From b30a58c1d933f20000007aa646da31f7b6a85b6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 7 Apr 2023 14:38:38 +0800 Subject: [PATCH 001/245] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqlupgrade/DM/2022/sql2022120100901.sql | 27 + .../sqlupgrade/DM/2022/sql2022120101001.sql | 23 + .../sqlupgrade/DM/2022/sql2022120901602.sql | 5 + .../sqlupgrade/DM/2022/sql2022121503101.sql | 19 + .../sqlupgrade/DM/2022/sql2022121613501.sql | 27 + .../sqlupgrade/DM/2022/sql2022122005801.sql | 24 + .../sqlupgrade/DM/2023/sql2023011206201.sql | 22 + .../sqlupgrade/DM/2023/sql2023013104001.sql | 22 + .../sqlupgrade/DM/2023/sql2023021000102.sql | 2 + .../sqlupgrade/DM/2023/sql2023021604102.sql | 2 + .../sqlupgrade/DM/2023/sql2023021705001.sql | 82 + .../sqlupgrade/DM/2023/sql2023032901802.sql | 2 + .../sqlupgrade/DM/2023/sql2023032906602.sql | 2 + .../sqlupgrade/DM/2023/sql2023032915202.sql | 2 + .../sqlupgrade/DM/2023/sql2023032916202.sql | 2 + .../sqlupgrade/DM/2023/sql2023040404902.sql | 2 + .../Mysql/2022/sql2022120100901.sql | 27 + .../Mysql/2022/sql2022120101001.sql | 23 + .../Mysql/2022/sql2022120901602.sql | 5 + .../Mysql/2022/sql2022121503101.sql | 19 + .../Mysql/2022/sql2022121613501.sql | 27 + .../Mysql/2022/sql2022122005801.sql | 24 + .../Mysql/2023/sql2023011206201.sql | 22 + .../Mysql/2023/sql2023013104001.sql | 22 + .../Mysql/2023/sql2023021000102.sql | 2 + .../Mysql/2023/sql2023021604102.sql | 2 + .../Mysql/2023/sql2023021705001.sql | 82 + .../Mysql/2023/sql2023032901802.sql | 2 + .../Mysql/2023/sql2023032906602.sql | 2 + .../Mysql/2023/sql2023032915202.sql | 2 + .../Mysql/2023/sql2023032916202.sql | 2 + .../Mysql/2023/sql2023040404902.sql | 2 + .../Oracle/2022/sql2022120100901.sql | 27 + .../Oracle/2022/sql2022120101001.sql | 23 + .../Oracle/2022/sql2022120901602.sql | 5 + .../Oracle/2022/sql2022121503101.sql | 19 + .../Oracle/2022/sql2022121613501.sql | 27 + .../Oracle/2022/sql2022122005801.sql | 24 + .../Oracle/2023/sql2023011206201.sql | 22 + .../Oracle/2023/sql2023013104001.sql | 22 + .../Oracle/2023/sql2023021000102.sql | 2 + .../Oracle/2023/sql2023021604102.sql | 2 + .../Oracle/2023/sql2023021705001.sql | 82 + .../Oracle/2023/sql2023032901802.sql | 2 + .../Oracle/2023/sql2023032906602.sql | 2 + .../Oracle/2023/sql2023032915202.sql | 2 + .../Oracle/2023/sql2023032916202.sql | 2 + .../Oracle/2023/sql2023040404902.sql | 2 + .../sqlupgrade/PG/2022/sql2022120100901.sql | 27 + .../sqlupgrade/PG/2022/sql2022120101001.sql | 23 + .../sqlupgrade/PG/2022/sql2022120901602.sql | 5 + .../sqlupgrade/PG/2022/sql2022121503101.sql | 19 + .../sqlupgrade/PG/2022/sql2022121613501.sql | 27 + .../sqlupgrade/PG/2022/sql2022122005801.sql | 24 + .../sqlupgrade/PG/2023/sql2023011206201.sql | 22 + .../sqlupgrade/PG/2023/sql2023013104001.sql | 22 + .../sqlupgrade/PG/2023/sql2023021000102.sql | 2 + .../sqlupgrade/PG/2023/sql2023021604102.sql | 2 + .../sqlupgrade/PG/2023/sql2023021705001.sql | 82 + .../sqlupgrade/PG/2023/sql2023032901802.sql | 2 + .../sqlupgrade/PG/2023/sql2023032906602.sql | 2 + .../sqlupgrade/PG/2023/sql2023032915202.sql | 2 + .../sqlupgrade/PG/2023/sql2023032916202.sql | 2 + .../sqlupgrade/PG/2023/sql2023040404902.sql | 2 + .../SQLServer/2022/sql2022120100901.sql | 27 + .../SQLServer/2022/sql2022120101001.sql | 23 + .../SQLServer/2022/sql2022120901602.sql | 5 + .../SQLServer/2022/sql2022121503101.sql | 19 + .../SQLServer/2022/sql2022121613501.sql | 27 + .../SQLServer/2022/sql2022122005801.sql | 24 + .../SQLServer/2023/sql2023011206201.sql | 22 + .../SQLServer/2023/sql2023013104001.sql | 22 + .../SQLServer/2023/sql2023021000102.sql | 2 + .../SQLServer/2023/sql2023021604102.sql | 2 + .../SQLServer/2023/sql2023021705001.sql | 82 + .../SQLServer/2023/sql2023032901802.sql | 2 + .../SQLServer/2023/sql2023032906602.sql | 2 + .../SQLServer/2023/sql2023032915202.sql | 2 + .../SQLServer/2023/sql2023032916202.sql | 2 + .../SQLServer/2023/sql2023040404902.sql | 2 + .../sqlupgrade/ST/2022/sql2022120100901.sql | 27 + .../sqlupgrade/ST/2022/sql2022120101001.sql | 23 + .../sqlupgrade/ST/2022/sql2022120901602.sql | 5 + .../sqlupgrade/ST/2022/sql2022121503101.sql | 19 + .../sqlupgrade/ST/2022/sql2022121613501.sql | 27 + .../sqlupgrade/ST/2022/sql2022122005801.sql | 24 + .../sqlupgrade/ST/2023/sql2023011206201.sql | 22 + .../sqlupgrade/ST/2023/sql2023013104001.sql | 22 + .../sqlupgrade/ST/2023/sql2023021000102.sql | 2 + .../sqlupgrade/ST/2023/sql2023021604102.sql | 2 + .../sqlupgrade/ST/2023/sql2023021705001.sql | 82 + .../sqlupgrade/ST/2023/sql2023032901802.sql | 2 + .../sqlupgrade/ST/2023/sql2023032906602.sql | 2 + .../sqlupgrade/ST/2023/sql2023032915202.sql | 2 + .../sqlupgrade/ST/2023/sql2023032916202.sql | 2 + .../sqlupgrade/ST/2023/sql2023040404902.sql | 2 + .../SalaryStatisticsDimensionController.java | 9 + .../agency/dto/PaymentAgencyListDTO.java | 2 +- .../dto/SalaryMySalaryBillListDTO.java | 2 +- .../salaryBill/dto/SalarySendBaseInfoDTO.java | 2 +- .../dto/SalarySendDetailListDTO.java | 2 +- .../salaryBill/dto/SalarySendInfoListDTO.java | 2 +- .../dto/SalaryTemplateReplenishFormDTO.java | 2 +- .../dto/SalaryTemplateSalaryItemListDTO.java | 2 +- .../SalaryTemplateSalaryItemSetListDTO.java | 2 +- .../dto/SalaryTemplateShowFormDTO.java | 2 +- .../dto/SalaryTemplateShowSetDTO.java | 2 +- .../param/SalaryBillQueryParam.java | 2 +- .../param/SalarySendDetailListQueryParam.java | 2 +- .../param/SalarySendDetailQueryParam.java | 2 +- .../param/SalarySendGrantParam.java | 2 +- .../param/SalarySendInfoQueryParam.java | 2 +- .../param/SalarySendRangeQueryParam.java | 2 +- .../param/SalarySendWithdrawParam.java | 2 +- .../param/SalaryTemplateCopyParam.java | 2 +- .../param/SalaryTemplateDefaultUseParam.java | 2 +- .../param/SalaryTemplateSaveParam.java | 2 +- .../salaryBill/po/SalarySendInfoPO.java | 2 +- .../entity/salaryBill/po/SalarySendPO.java | 4 +- .../salaryBill/po/SalaryTemplatePO.java | 4 +- .../dto/SalaryAccResultListDTO.java | 2 +- .../dto/SalaryCheckResultListDTO.java | 2 +- .../salaryacct/po/SalaryAcctRecordPO.java | 4 +- .../salarysob/po/SalarySobBackItemPO.java | 2 +- .../po/InsuranceArchivesFundSchemePO.java | 2 +- .../po/InsuranceArchivesOtherSchemePO.java | 2 +- .../po/InsuranceArchivesSocialSchemePO.java | 2 +- .../dto/TaxAgentAdjustRecordListDTO.java | 2 +- .../entity/taxagent/dto/TaxAgentListDTO.java | 2 +- .../SalaryStatisticsDimensionMapper.java | 65 + .../SalaryStatisticsDimensionMapper.xml | 302 +++ .../common/constant/DbCrudConstant.java | 14 + .../common/constant/SalaryConstant.java | 14 + .../common/constant/SalaryReportModule.java | 12 + .../SalaryStatisticsDimensionConstant.java | 141 ++ .../entity/bo/SalaryStatisticsEmployeeBO.java | 68 + .../entity/bo/SalaryStatisticsReportBO.java | 975 ++++++++++ .../dto/SalaryStatisticsDimensionFormDTO.java | 33 + .../dto/SalaryStatisticsDimensionListDTO.java | 44 + .../dto/SalaryStatisticsEchartsDTO.java | 56 + ...laryStatisticsEmployeeDetailResultDTO.java | 35 + .../dto/SalaryStatisticsEmployeeListDTO.java | 51 + .../dto/SalaryStatisticsItemFormDTO.java | 35 + .../dto/SalaryStatisticsItemRuleDTO.java | 47 + .../dto/SalaryStatisticsReportDataDTO.java | 46 + .../dto/SalaryStatisticsReportFormDTO.java | 31 + .../entity/dto/SubEmployeeTableDTO.java | 41 + .../report/entity/dto/SubTableChartsDTO.java | 54 + .../report/entity/dto/TaxAgentViewDTO.java | 31 + .../report/entity/param/BaseQueryParam.java | 28 + .../report/entity/param/ExportColumn.java | 27 + .../entity/param/ExportCommonParam.java | 41 + .../param/SalaryAcctEmployeeQueryParam.java | 33 + .../param/SalaryEmployeeQueryParam.java | 44 + .../SalaryStatisticsDimensionQueryParam.java | 25 + .../SalaryStatisticsDimensionSaveParam.java | 130 ++ ...aryStatisticsEmployeeDetailQueryParam.java | 42 + .../SalaryStatisticsEmployeeQueryParam.java | 37 + .../param/SalaryStatisticsItemSaveParam.java | 56 + .../SalaryStatisticsReportDataQueryParam.java | 81 + .../SalaryStatisticsReportQueryParam.java | 24 + .../SalaryStatisticsReportSaveParam.java | 47 + ...aryStatisticsSearchConditionSaveParam.java | 69 + .../entity/param/SubTableDataQueryParam.java | 72 + .../entity/param/SubTableItemParam.java | 41 + .../report/entity/param/SubTableParam.java | 33 + .../param/SubTableSearchConditionParam.java | 66 + .../entity/param/TaxAgentQueryParam.java | 28 + .../po/SalaryStatisticsDimensionPO.java | 92 + .../entity/po/SalaryStatisticsItemPO.java | 160 ++ .../entity/po/SalaryStatisticsReportPO.java | 85 + .../report/entity/po/SubTableItemPO.java | 80 + .../salary/report/enums/DataTypeEnum.java | 31 + .../salary/report/enums/DeleteTypeEnum.java | 33 + .../salary/report/enums/DimensionEnum.java | 44 + .../salary/report/enums/EmployeeTypeEnum.java | 52 + .../report/enums/ExtEmployeeTypeEnum.java | 24 + .../report/enums/IncomeCategoryEnum.java | 86 + .../salary/report/enums/OperateTypeEnum.java | 30 + .../salary/report/enums/PaymentScopeEnum.java | 34 + .../report/enums/PaymentStatusEnum.java | 41 + .../report/enums/SalaryDataTypeEnum.java | 54 + .../SalaryStatisticsDimensionTypeEnum.java | 46 + .../report/enums/SalarySystemTypeEnum.java | 56 + .../salary/report/enums/TableTypeEnum.java | 18 + .../enums/TaxAgentPermissionConstant.java | 24 + .../report/enums/TaxAgentRoleTypeEnum.java | 31 + .../salary/report/enums/UnitTypeEnum.java | 33 + .../report/enums/WeaBrowserTypeEnum.java | 37 + .../SalaryStatisticsDimensionService.java | 64 + .../SalaryStatisticsReportService.java | 78 + .../SalaryStatisticsDimensionServiceImpl.java | 237 +++ .../SalaryStatisticsReportServiceImpl.java | 1706 +++++++++++++++++ .../salary/report/util/ReportDataUtil.java | 39 + .../salary/report/util/ReportEnumUtil.java | 36 + .../salary/report/util/ReportTimeUtil.java | 165 ++ .../SalaryStatisticsDimensionController.java | 105 + .../SalaryStatisticsDimensionWrapper.java | 148 ++ 198 files changed, 8322 insertions(+), 35 deletions(-) create mode 100644 resource/sqlupgrade/DM/2022/sql2022120100901.sql create mode 100644 resource/sqlupgrade/DM/2022/sql2022120101001.sql create mode 100644 resource/sqlupgrade/DM/2022/sql2022120901602.sql create mode 100644 resource/sqlupgrade/DM/2022/sql2022121503101.sql create mode 100644 resource/sqlupgrade/DM/2022/sql2022121613501.sql create mode 100644 resource/sqlupgrade/DM/2022/sql2022122005801.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023011206201.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023013104001.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023021000102.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023021604102.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023021705001.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023032901802.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023032906602.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023032915202.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023032916202.sql create mode 100644 resource/sqlupgrade/DM/2023/sql2023040404902.sql create mode 100644 resource/sqlupgrade/Mysql/2022/sql2022120100901.sql create mode 100644 resource/sqlupgrade/Mysql/2022/sql2022120101001.sql create mode 100644 resource/sqlupgrade/Mysql/2022/sql2022120901602.sql create mode 100644 resource/sqlupgrade/Mysql/2022/sql2022121503101.sql create mode 100644 resource/sqlupgrade/Mysql/2022/sql2022121613501.sql create mode 100644 resource/sqlupgrade/Mysql/2022/sql2022122005801.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023011206201.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023013104001.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023021000102.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023021604102.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023021705001.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023032901802.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023032906602.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023032915202.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023032916202.sql create mode 100644 resource/sqlupgrade/Mysql/2023/sql2023040404902.sql create mode 100644 resource/sqlupgrade/Oracle/2022/sql2022120100901.sql create mode 100644 resource/sqlupgrade/Oracle/2022/sql2022120101001.sql create mode 100644 resource/sqlupgrade/Oracle/2022/sql2022120901602.sql create mode 100644 resource/sqlupgrade/Oracle/2022/sql2022121503101.sql create mode 100644 resource/sqlupgrade/Oracle/2022/sql2022121613501.sql create mode 100644 resource/sqlupgrade/Oracle/2022/sql2022122005801.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023011206201.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023013104001.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023021000102.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023021604102.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023021705001.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023032901802.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023032906602.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023032915202.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023032916202.sql create mode 100644 resource/sqlupgrade/Oracle/2023/sql2023040404902.sql create mode 100644 resource/sqlupgrade/PG/2022/sql2022120100901.sql create mode 100644 resource/sqlupgrade/PG/2022/sql2022120101001.sql create mode 100644 resource/sqlupgrade/PG/2022/sql2022120901602.sql create mode 100644 resource/sqlupgrade/PG/2022/sql2022121503101.sql create mode 100644 resource/sqlupgrade/PG/2022/sql2022121613501.sql create mode 100644 resource/sqlupgrade/PG/2022/sql2022122005801.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023011206201.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023013104001.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023021000102.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023021604102.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023021705001.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023032901802.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023032906602.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023032915202.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023032916202.sql create mode 100644 resource/sqlupgrade/PG/2023/sql2023040404902.sql create mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022120100901.sql create mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022120101001.sql create mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022120901602.sql create mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022121503101.sql create mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022121613501.sql create mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022122005801.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023011206201.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023013104001.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023021000102.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023021604102.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023021705001.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023032901802.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023032906602.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023032915202.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023032916202.sql create mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023040404902.sql create mode 100644 resource/sqlupgrade/ST/2022/sql2022120100901.sql create mode 100644 resource/sqlupgrade/ST/2022/sql2022120101001.sql create mode 100644 resource/sqlupgrade/ST/2022/sql2022120901602.sql create mode 100644 resource/sqlupgrade/ST/2022/sql2022121503101.sql create mode 100644 resource/sqlupgrade/ST/2022/sql2022121613501.sql create mode 100644 resource/sqlupgrade/ST/2022/sql2022122005801.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023011206201.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023013104001.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023021000102.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023021604102.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023021705001.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023032901802.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023032906602.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023032915202.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023032916202.sql create mode 100644 resource/sqlupgrade/ST/2023/sql2023040404902.sql create mode 100644 src/com/api/salary/web/SalaryStatisticsDimensionController.java create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.java create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.xml create mode 100644 src/com/engine/salary/report/common/constant/DbCrudConstant.java create mode 100644 src/com/engine/salary/report/common/constant/SalaryConstant.java create mode 100644 src/com/engine/salary/report/common/constant/SalaryReportModule.java create mode 100644 src/com/engine/salary/report/common/constant/SalaryStatisticsDimensionConstant.java create mode 100644 src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java create mode 100644 src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SubEmployeeTableDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java create mode 100644 src/com/engine/salary/report/entity/param/BaseQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/ExportColumn.java create mode 100644 src/com/engine/salary/report/entity/param/ExportCommonParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsSearchConditionSaveParam.java create mode 100644 src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/SubTableItemParam.java create mode 100644 src/com/engine/salary/report/entity/param/SubTableParam.java create mode 100644 src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java create mode 100644 src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java create mode 100644 src/com/engine/salary/report/entity/po/SalaryStatisticsDimensionPO.java create mode 100644 src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java create mode 100644 src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java create mode 100644 src/com/engine/salary/report/entity/po/SubTableItemPO.java create mode 100644 src/com/engine/salary/report/enums/DataTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/DeleteTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/DimensionEnum.java create mode 100644 src/com/engine/salary/report/enums/EmployeeTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/ExtEmployeeTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/IncomeCategoryEnum.java create mode 100644 src/com/engine/salary/report/enums/OperateTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/PaymentScopeEnum.java create mode 100644 src/com/engine/salary/report/enums/PaymentStatusEnum.java create mode 100644 src/com/engine/salary/report/enums/SalaryDataTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/SalarySystemTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/TableTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/TaxAgentPermissionConstant.java create mode 100644 src/com/engine/salary/report/enums/TaxAgentRoleTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/UnitTypeEnum.java create mode 100644 src/com/engine/salary/report/enums/WeaBrowserTypeEnum.java create mode 100644 src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java create mode 100644 src/com/engine/salary/report/service/SalaryStatisticsReportService.java create mode 100644 src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java create mode 100644 src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java create mode 100644 src/com/engine/salary/report/util/ReportDataUtil.java create mode 100644 src/com/engine/salary/report/util/ReportEnumUtil.java create mode 100644 src/com/engine/salary/report/util/ReportTimeUtil.java create mode 100644 src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java create mode 100644 src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java diff --git a/resource/sqlupgrade/DM/2022/sql2022120100901.sql b/resource/sqlupgrade/DM/2022/sql2022120100901.sql new file mode 100644 index 000000000..9b45402f5 --- /dev/null +++ b/resource/sqlupgrade/DM/2022/sql2022120100901.sql @@ -0,0 +1,27 @@ +create table hrsa_sub_table +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + sub_table_name varchar(100) not null, + dimension varchar(20) not null, + start_month varchar(10), + end_month varchar(10), + pay_org_string varchar(500), + pay_agency_string varchar(500), + sub_company_string varchar(500), + depart_string varchar(500), + grade_string varchar(500), + position_string varchar(500), + status_string varchar(500), + employee_type varchar(500), + employee_string varchar(500), + payment_type_string varchar(100) +); +/ + +create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022120101001.sql b/resource/sqlupgrade/DM/2022/sql2022120101001.sql new file mode 100644 index 000000000..8ad5b3129 --- /dev/null +++ b/resource/sqlupgrade/DM/2022/sql2022120101001.sql @@ -0,0 +1,23 @@ +create table hrsa_sub_table_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + table_id number not null, + item_name varchar(50) not null, + item_value varchar(500) not null, + index_value int not null, + total_rule varchar(500), + count_rule varchar(500), + unit_type int default 2 +); +/ + +create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key); +/ + +create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022120901602.sql b/resource/sqlupgrade/DM/2022/sql2022120901602.sql new file mode 100644 index 000000000..81a0b8693 --- /dev/null +++ b/resource/sqlupgrade/DM/2022/sql2022120901602.sql @@ -0,0 +1,5 @@ +alter table hrsa_sub_table add table_type int; +/ + +alter table hrsa_sub_table modify table_type default 0; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022121503101.sql b/resource/sqlupgrade/DM/2022/sql2022121503101.sql new file mode 100644 index 000000000..fb9159c03 --- /dev/null +++ b/resource/sqlupgrade/DM/2022/sql2022121503101.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_stats_dim +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + dim_name varchar(100), + dim_type varchar(20), + remark varchar(500), + setting varchar(2000), + is_default int, + dim_code varchar(50) +); +/ + +create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022121613501.sql b/resource/sqlupgrade/DM/2022/sql2022121613501.sql new file mode 100644 index 000000000..2cb7ab3fb --- /dev/null +++ b/resource/sqlupgrade/DM/2022/sql2022121613501.sql @@ -0,0 +1,27 @@ +create table hrsa_salary_stats_report +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + report_name varchar(100), + dimension varchar(1000), + tax_agent_setting varchar(1000), + income_category_setting varchar(20), + sub_company_setting varchar(1000), + depart_setting varchar(1000), + grade_setting varchar(1000), + position_setting varchar(1000), + status_setting varchar(1000), + employee_setting varchar(1000), + hiredate_setting varchar(1000), + leavedate_setting varchar(1000), + salary_start_month date, + salary_end_month date +); +/ + +create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022122005801.sql b/resource/sqlupgrade/DM/2022/sql2022122005801.sql new file mode 100644 index 000000000..289ad7775 --- /dev/null +++ b/resource/sqlupgrade/DM/2022/sql2022122005801.sql @@ -0,0 +1,24 @@ +create table hrsa_salary_statistics_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + item_name varchar(50), + item_value varchar(1000), + count_rule varchar(500), + sum_rule varchar(500), + avg_rule varchar(500), + max_rule varchar(500), + min_rule varchar(500), + median_rule varchar(500), + index_value int, + unit_type int, + stat_report_id number +); +/ + +create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023011206201.sql b/resource/sqlupgrade/DM/2023/sql2023011206201.sql new file mode 100644 index 000000000..1bcc5602a --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023011206201.sql @@ -0,0 +1,22 @@ +create table hrsa_charts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + table_id number not null, + charts_type int not null, + item_values varchar(500), + item_col_value varchar(50) not null, + dimension_range int not null, + item_sort_value varchar(500), + item_col_sort_value varchar(50), + sort_type int, + sort_num int +); +/ + +create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023013104001.sql b/resource/sqlupgrade/DM/2023/sql2023013104001.sql new file mode 100644 index 000000000..bd3d42415 --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023013104001.sql @@ -0,0 +1,22 @@ +create table hrsa_salary_echarts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + report_id number not null, + charts_type int not null, + item_values varchar(500), + item_col_value varchar(50) not null, + dimension_range int not null, + item_sort_value varchar(500), + item_col_sort_value varchar(50), + sort_type int, + sort_num int +); +/ + +create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023021000102.sql b/resource/sqlupgrade/DM/2023/sql2023021000102.sql new file mode 100644 index 000000000..a1b09bbb5 --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023021000102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim modify dim_type varchar(30); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023021604102.sql b/resource/sqlupgrade/DM/2023/sql2023021604102.sql new file mode 100644 index 000000000..a5bb145fe --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023021604102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report modify income_category_setting varchar(1000); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023021705001.sql b/resource/sqlupgrade/DM/2023/sql2023021705001.sql new file mode 100644 index 000000000..708255326 --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023021705001.sql @@ -0,0 +1,82 @@ +create table hrsa_statreportlogs_detail +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + uuid varchar(36) not null, + mainid varchar(36) not null, + dataid varchar(50) not null, + belongdataid varchar(50) not null, + tablename varchar(200) not null, + tablenamelabelid varchar(50) default '-1' not null, + tablenamedesc varchar(50) not null, + fieldname varchar(200) not null, + fieldnamelabelid varchar(50) default '-1' not null, + newvalue clob not null, + oldvalue clob not null, + newrealvalue clob not null, + oldrealvalue clob not null, + fielddesc varchar(200) not null, + showorder int not null, + isdetail int default 0 not null +); +/ + +create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key); +/ + +create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time); +/ + +create table hrsa_statreportlogs +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + uuid varchar(36) not null, + log_date date not null, + device varchar(500) not null, + log_operator number not null, + operatorname varchar(100), + targetid number default '-1' not null, + targetname clob not null, + modulename varchar(100) not null, + functionname varchar(100) not null, + interfacename varchar(100) not null, + requesturl varchar(200) not null, + requesturi varchar(200) not null, + operatetype varchar(50) not null, + operatetypename varchar(100) not null, + operatedesc varchar(3000) not null, + params clob not null, + belongmainid varchar(36) not null, + clientip varchar(50) not null, + groupid varchar(50) not null, + groupnamelabel varchar(1000) not null, + redoservice varchar(200) not null, + redocontext clob not null, + cancelservice varchar(200) not null, + cancelcontext clob not null, + totalruntime number default '0' not null, + mainruntime number default '0' not null, + log_result varchar(100) not null, + fromterminal varchar(100) not null, + resultdesc clob not null, + old_content varchar(3000) not null, + link_type varchar(20) not null, + link_id number default '0' not null, + old_link_id number default '0' not null +); +/ + +create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key); +/ + +create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023032901802.sql b/resource/sqlupgrade/DM/2023/sql2023032901802.sql new file mode 100644 index 000000000..28569b30a --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023032901802.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add remark varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023032906602.sql b/resource/sqlupgrade/DM/2023/sql2023032906602.sql new file mode 100644 index 000000000..2904d96eb --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023032906602.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add second_dimension varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023032915202.sql b/resource/sqlupgrade/DM/2023/sql2023032915202.sql new file mode 100644 index 000000000..6a8164591 --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023032915202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_index varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023032916202.sql b/resource/sqlupgrade/DM/2023/sql2023032916202.sql new file mode 100644 index 000000000..a78cd0884 --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023032916202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_type varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023040404902.sql b/resource/sqlupgrade/DM/2023/sql2023040404902.sql new file mode 100644 index 000000000..c444c3992 --- /dev/null +++ b/resource/sqlupgrade/DM/2023/sql2023040404902.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim add label_id int; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022120100901.sql b/resource/sqlupgrade/Mysql/2022/sql2022120100901.sql new file mode 100644 index 000000000..ee1284958 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2022/sql2022120100901.sql @@ -0,0 +1,27 @@ +create table hrsa_sub_table +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + sub_table_name varchar(100) not null comment '表名' , + dimension varchar(20) not null comment '统计维度' , + start_month varchar(10) comment '开始月' , + end_month varchar(10) comment '终止月' , + pay_org_string varchar(500) comment '个税扣缴义务人高级搜索' , + pay_agency_string varchar(500) comment '缴纳组织高级搜索' , + sub_company_string varchar(500) comment '分部高级搜索' , + depart_string varchar(500) comment '部门高级搜索' , + grade_string varchar(500) comment '职级高级搜索' , + position_string varchar(500) comment '岗位高级搜索' , + status_string varchar(500) comment '人员状态高级搜索' , + employee_type varchar(500) comment '人员类型高级搜索' , + employee_string varchar(500) comment '人员高级搜索' , + payment_type_string varchar(100) comment '缴纳类型' +) +; + +create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022120101001.sql b/resource/sqlupgrade/Mysql/2022/sql2022120101001.sql new file mode 100644 index 000000000..8f205871c --- /dev/null +++ b/resource/sqlupgrade/Mysql/2022/sql2022120101001.sql @@ -0,0 +1,23 @@ +create table hrsa_sub_table_item +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + table_id bigint not null comment '数据表id' , + item_name varchar(50) not null comment '统计项名称' , + item_value varchar(500) not null comment '统计项集合' , + index_value int not null comment '顺序' , + total_rule varchar(500) comment '合计规则' , + count_rule varchar(500) comment '计数规则' , + unit_type int default 2 comment '统计单位' +) +; + +create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key) +; + +create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022120901602.sql b/resource/sqlupgrade/Mysql/2022/sql2022120901602.sql new file mode 100644 index 000000000..f7c90dd80 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2022/sql2022120901602.sql @@ -0,0 +1,5 @@ +alter table hrsa_sub_table add table_type int +; + +alter table hrsa_sub_table modify column table_type int default 0 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022121503101.sql b/resource/sqlupgrade/Mysql/2022/sql2022121503101.sql new file mode 100644 index 000000000..068b25eaa --- /dev/null +++ b/resource/sqlupgrade/Mysql/2022/sql2022121503101.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_stats_dim +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + dim_name varchar(100) comment '统计维度名称' , + dim_type varchar(20) comment '统计维度类型' , + remark varchar(500) comment '描述' , + setting varchar(2000) comment '设置内容', + is_default int comment '是否默认' , + dim_code varchar(50) comment '统计维度编码' +) +; + +create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022121613501.sql b/resource/sqlupgrade/Mysql/2022/sql2022121613501.sql new file mode 100644 index 000000000..c923fcfe6 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2022/sql2022121613501.sql @@ -0,0 +1,27 @@ +create table hrsa_salary_stats_report +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + report_name varchar(100) comment '报表名称' , + dimension varchar(1000) comment '统计维度(多个的话以逗号分隔)' , + tax_agent_setting varchar(1000) comment '个税扣缴义务人配置' , + income_category_setting varchar(20) comment '收入所得项目配置' , + sub_company_setting varchar(1000) comment '分部配置' , + depart_setting varchar(1000) comment '部门配置' , + grade_setting varchar(1000) comment '职级配置' , + position_setting varchar(1000) comment '岗位配置' , + status_setting varchar(1000) comment '状态配置' , + employee_setting varchar(1000) comment '人员配置' , + hiredate_setting varchar(1000) comment '入职日期配置' , + leavedate_setting varchar(1000) comment '离职日期配置' , + salary_start_month datetime comment '薪资所属月份-起始' , + salary_end_month datetime comment '薪资所属月份-截止' +) +; + +create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022122005801.sql b/resource/sqlupgrade/Mysql/2022/sql2022122005801.sql new file mode 100644 index 000000000..de1259f69 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2022/sql2022122005801.sql @@ -0,0 +1,24 @@ +create table hrsa_salary_statistics_item +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + item_name varchar(50) comment '统计项名称' , + item_value varchar(1000) comment '统计项集合' , + count_rule varchar(500) comment '计数规则' , + sum_rule varchar(500) comment '求和规则' , + avg_rule varchar(500) comment '平均值规则' , + max_rule varchar(500) comment '最大值规则' , + min_rule varchar(500) comment '最小值规则' , + median_rule varchar(500) comment '中位数规则' , + index_value int comment '顺序' , + unit_type int comment '统计单位', + stat_report_id bigint comment '统计报表id' +) +; + +create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023011206201.sql b/resource/sqlupgrade/Mysql/2023/sql2023011206201.sql new file mode 100644 index 000000000..594c7d566 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023011206201.sql @@ -0,0 +1,22 @@ +create table hrsa_charts_setting +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + table_id bigint not null comment '报表id' , + charts_type int not null comment '报表类型' , + item_values varchar(500) comment '统计项目' , + item_col_value varchar(50) not null comment '统计列' , + dimension_range int not null comment '维度统计范围' , + item_sort_value varchar(500) comment '排序统计项目' , + item_col_sort_value varchar(50) comment '排序列' , + sort_type int comment '排序类型' , + sort_num int comment '排序取数值' +) +; + +create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023013104001.sql b/resource/sqlupgrade/Mysql/2023/sql2023013104001.sql new file mode 100644 index 000000000..4cfea914a --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023013104001.sql @@ -0,0 +1,22 @@ +create table hrsa_salary_echarts_setting +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + report_id bigint not null comment '报表id' , + charts_type int not null comment '报表类型' , + item_values varchar(500) comment '统计项目' , + item_col_value varchar(50) not null comment '统计列' , + dimension_range int not null comment '维度统计范围' , + item_sort_value varchar(500) comment '排序统计项目' , + item_col_sort_value varchar(50) comment '排序列' , + sort_type int comment '排序类型' , + sort_num int comment '排序取数值' +) +; + +create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023021000102.sql b/resource/sqlupgrade/Mysql/2023/sql2023021000102.sql new file mode 100644 index 000000000..d55b2e705 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023021000102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim modify column dim_type varchar(30) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023021604102.sql b/resource/sqlupgrade/Mysql/2023/sql2023021604102.sql new file mode 100644 index 000000000..3428a6b34 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023021604102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report modify column income_category_setting varchar(1000) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023021705001.sql b/resource/sqlupgrade/Mysql/2023/sql2023021705001.sql new file mode 100644 index 000000000..7f79e1836 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023021705001.sql @@ -0,0 +1,82 @@ +create table hrsa_statreportlogs_detail +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + uuid varchar(36) not null comment '日志UUID' , + mainid varchar(36) not null comment '主表id' , + dataid varchar(50) not null comment '数据id' , + belongdataid varchar(50) not null comment '主表数据id' , + tablename varchar(200) not null comment '表名' , + tablenamelabelid varchar(50) default '-1' not null comment '表名labelid' , + tablenamedesc varchar(50) not null comment '对应数据库的表' , + fieldname varchar(200) not null comment '字段名' , + fieldnamelabelid varchar(50) default '-1' not null comment '字段名labelid' , + newvalue text not null comment '更新后的值' , + oldvalue text not null comment '更新前的值' , + newrealvalue text not null comment '更新后的显示值' , + oldrealvalue text not null comment '更新前的显示值' , + fielddesc varchar(200) not null comment '字段名' , + showorder int(11) not null comment '字段名' , + isdetail int(11) default 0 not null comment '是否明细字段' +) +; + +create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key) +; + +create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time) +; + +create table hrsa_statreportlogs +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + uuid varchar(36) not null comment '日志UUID' , + log_date datetime not null comment '记录时间' , + device varchar(500) not null comment '终端信息' , + log_operator bigint not null comment '操作者' , + operatorname varchar(100) comment '操作人姓名' , + targetid bigint default '-1' not null comment '操作目标id' , + targetname text not null comment '操作目标名称' , + modulename varchar(100) not null comment '模块' , + functionname varchar(100) not null comment '服务(方法)' , + interfacename varchar(100) not null comment '访问接口名' , + requesturl varchar(200) not null comment '请求全路径' , + requesturi varchar(200) not null comment '请求地址' , + operatetype varchar(50) not null comment '操作类型' , + operatetypename varchar(100) not null comment '操作类型名称' , + operatedesc varchar(3000) not null comment '操作详细说明' , + params text not null comment '涉及的相关参数' , + belongmainid varchar(36) not null comment '所属主表uuid' , + clientip varchar(50) not null comment '操作IP' , + groupid varchar(50) not null comment '分组' , + groupnamelabel varchar(1000) not null comment '分组标题' , + redoservice varchar(200) not null comment '重做业务接口' , + redocontext text not null comment '重做参数' , + cancelservice varchar(200) not null comment '撤销业务接口' , + cancelcontext text not null comment '撤销参数' , + totalruntime bigint default '0' not null comment '总运行时长' , + mainruntime bigint default '0' not null comment '主方法运行时长' , + log_result varchar(100) not null comment '日志结果' , + fromterminal varchar(100) not null comment '来自pc web' , + resultdesc text not null comment '运行结果描述' , + old_content varchar(3000) not null comment '原先内容' , + link_type varchar(20) not null comment '链接类型' , + link_id bigint default '0' not null comment '链接id' , + old_link_id bigint default '0' not null comment '原先链接id' +) +; + +create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key) +; + +create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023032901802.sql b/resource/sqlupgrade/Mysql/2023/sql2023032901802.sql new file mode 100644 index 000000000..cb8547275 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023032901802.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add remark varchar(100) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023032906602.sql b/resource/sqlupgrade/Mysql/2023/sql2023032906602.sql new file mode 100644 index 000000000..fa36a694a --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023032906602.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add second_dimension varchar(100) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023032915202.sql b/resource/sqlupgrade/Mysql/2023/sql2023032915202.sql new file mode 100644 index 000000000..2839f913e --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023032915202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_index varchar(100) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023032916202.sql b/resource/sqlupgrade/Mysql/2023/sql2023032916202.sql new file mode 100644 index 000000000..fc2e40f84 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023032916202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_type varchar(100) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023040404902.sql b/resource/sqlupgrade/Mysql/2023/sql2023040404902.sql new file mode 100644 index 000000000..80a9ba9b9 --- /dev/null +++ b/resource/sqlupgrade/Mysql/2023/sql2023040404902.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim add label_id int +; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022120100901.sql b/resource/sqlupgrade/Oracle/2022/sql2022120100901.sql new file mode 100644 index 000000000..f6775e3fb --- /dev/null +++ b/resource/sqlupgrade/Oracle/2022/sql2022120100901.sql @@ -0,0 +1,27 @@ +create table hrsa_sub_table +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + sub_table_name varchar2(100) not null, + dimension varchar2(20) not null, + start_month varchar2(10), + end_month varchar2(10), + pay_org_string varchar2(500), + pay_agency_string varchar2(500), + sub_company_string varchar2(500), + depart_string varchar2(500), + grade_string varchar2(500), + position_string varchar2(500), + status_string varchar2(500), + employee_type varchar2(500), + employee_string varchar2(500), + payment_type_string varchar2(100) +) +/ + +create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022120101001.sql b/resource/sqlupgrade/Oracle/2022/sql2022120101001.sql new file mode 100644 index 000000000..85d21951d --- /dev/null +++ b/resource/sqlupgrade/Oracle/2022/sql2022120101001.sql @@ -0,0 +1,23 @@ +create table hrsa_sub_table_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + item_name varchar2(50) not null, + item_value varchar2(500) not null, + index_value int not null, + total_rule varchar2(500), + count_rule varchar2(500), + unit_type int default 2 +) +/ + +create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key) +/ + +create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022120901602.sql b/resource/sqlupgrade/Oracle/2022/sql2022120901602.sql new file mode 100644 index 000000000..92c4fbfec --- /dev/null +++ b/resource/sqlupgrade/Oracle/2022/sql2022120901602.sql @@ -0,0 +1,5 @@ +alter table hrsa_sub_table add table_type int +/ + +alter table hrsa_sub_table modify table_type default 0 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022121503101.sql b/resource/sqlupgrade/Oracle/2022/sql2022121503101.sql new file mode 100644 index 000000000..52b6a3318 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2022/sql2022121503101.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_stats_dim +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + dim_name varchar2(100), + dim_type varchar2(20), + remark varchar2(500), + setting varchar2(2000), + is_default int, + dim_code varchar2(50) +) +/ + +create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022121613501.sql b/resource/sqlupgrade/Oracle/2022/sql2022121613501.sql new file mode 100644 index 000000000..e8fa04962 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2022/sql2022121613501.sql @@ -0,0 +1,27 @@ +create table hrsa_salary_stats_report +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_name varchar2(100), + dimension varchar2(1000), + tax_agent_setting varchar2(1000), + income_category_setting varchar2(20), + sub_company_setting varchar2(1000), + depart_setting varchar2(1000), + grade_setting varchar2(1000), + position_setting varchar2(1000), + status_setting varchar2(1000), + employee_setting varchar2(1000), + hiredate_setting varchar2(1000), + leavedate_setting varchar2(1000), + salary_start_month date, + salary_end_month date +) +/ + +create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022122005801.sql b/resource/sqlupgrade/Oracle/2022/sql2022122005801.sql new file mode 100644 index 000000000..e3a2076f4 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2022/sql2022122005801.sql @@ -0,0 +1,24 @@ +create table hrsa_salary_statistics_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + item_name varchar2(50), + item_value varchar2(1000), + count_rule varchar2(500), + sum_rule varchar2(500), + avg_rule varchar2(500), + max_rule varchar2(500), + min_rule varchar2(500), + median_rule varchar2(500), + index_value int, + unit_type int, + stat_report_id number +) +/ + +create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023011206201.sql b/resource/sqlupgrade/Oracle/2023/sql2023011206201.sql new file mode 100644 index 000000000..fbb7bcfba --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023011206201.sql @@ -0,0 +1,22 @@ +create table hrsa_charts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +) +/ + +create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023013104001.sql b/resource/sqlupgrade/Oracle/2023/sql2023013104001.sql new file mode 100644 index 000000000..b3a854e00 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023013104001.sql @@ -0,0 +1,22 @@ +create table hrsa_salary_echarts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +) +/ + +create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023021000102.sql b/resource/sqlupgrade/Oracle/2023/sql2023021000102.sql new file mode 100644 index 000000000..92d4c554d --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023021000102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim modify dim_type varchar2(30) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023021604102.sql b/resource/sqlupgrade/Oracle/2023/sql2023021604102.sql new file mode 100644 index 000000000..1933ee237 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023021604102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report modify income_category_setting varchar2(1000) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023021705001.sql b/resource/sqlupgrade/Oracle/2023/sql2023021705001.sql new file mode 100644 index 000000000..b215d10b7 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023021705001.sql @@ -0,0 +1,82 @@ +create table hrsa_statreportlogs_detail +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + mainid varchar2(36) not null, + dataid varchar2(50) not null, + belongdataid varchar2(50) not null, + tablename varchar2(200) not null, + tablenamelabelid varchar2(50) default '-1' not null, + tablenamedesc varchar2(50) not null, + fieldname varchar2(200) not null, + fieldnamelabelid varchar2(50) default '-1' not null, + newvalue clob not null, + oldvalue clob not null, + newrealvalue clob not null, + oldrealvalue clob not null, + fielddesc varchar2(200) not null, + showorder int not null, + isdetail int default 0 not null +) +/ + +create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key) +/ + +create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time) +/ + +create table hrsa_statreportlogs +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + log_date date not null, + device varchar2(500) not null, + log_operator number not null, + operatorname varchar2(100), + targetid number default '-1' not null, + targetname clob not null, + modulename varchar2(100) not null, + functionname varchar2(100) not null, + interfacename varchar2(100) not null, + requesturl varchar2(200) not null, + requesturi varchar2(200) not null, + operatetype varchar2(50) not null, + operatetypename varchar2(100) not null, + operatedesc varchar2(3000) not null, + params clob not null, + belongmainid varchar2(36) not null, + clientip varchar2(50) not null, + groupid varchar2(50) not null, + groupnamelabel varchar2(1000) not null, + redoservice varchar2(200) not null, + redocontext clob not null, + cancelservice varchar2(200) not null, + cancelcontext clob not null, + totalruntime number default '0' not null, + mainruntime number default '0' not null, + log_result varchar2(100) not null, + fromterminal varchar2(100) not null, + resultdesc clob not null, + old_content varchar2(3000) not null, + link_type varchar2(20) not null, + link_id number default '0' not null, + old_link_id number default '0' not null +) +/ + +create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key) +/ + +create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023032901802.sql b/resource/sqlupgrade/Oracle/2023/sql2023032901802.sql new file mode 100644 index 000000000..76cf30e53 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023032901802.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add remark varchar2(100) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023032906602.sql b/resource/sqlupgrade/Oracle/2023/sql2023032906602.sql new file mode 100644 index 000000000..d9d154eee --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023032906602.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add second_dimension varchar2(100) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023032915202.sql b/resource/sqlupgrade/Oracle/2023/sql2023032915202.sql new file mode 100644 index 000000000..eb24e58d0 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023032915202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_index varchar2(100) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023032916202.sql b/resource/sqlupgrade/Oracle/2023/sql2023032916202.sql new file mode 100644 index 000000000..d63f6bb40 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023032916202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_type varchar2(100) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023040404902.sql b/resource/sqlupgrade/Oracle/2023/sql2023040404902.sql new file mode 100644 index 000000000..34a089ab4 --- /dev/null +++ b/resource/sqlupgrade/Oracle/2023/sql2023040404902.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim add label_id int +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022120100901.sql b/resource/sqlupgrade/PG/2022/sql2022120100901.sql new file mode 100644 index 000000000..82f5268ae --- /dev/null +++ b/resource/sqlupgrade/PG/2022/sql2022120100901.sql @@ -0,0 +1,27 @@ +create table hrsa_sub_table +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + sub_table_name varchar(100) not null, + dimension varchar(20) not null, + start_month varchar(10), + end_month varchar(10), + pay_org_string varchar(500), + pay_agency_string varchar(500), + sub_company_string varchar(500), + depart_string varchar(500), + grade_string varchar(500), + position_string varchar(500), + status_string varchar(500), + employee_type varchar(500), + employee_string varchar(500), + payment_type_string varchar(100) +); +/ + +create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022120101001.sql b/resource/sqlupgrade/PG/2022/sql2022120101001.sql new file mode 100644 index 000000000..95163c1ca --- /dev/null +++ b/resource/sqlupgrade/PG/2022/sql2022120101001.sql @@ -0,0 +1,23 @@ +create table hrsa_sub_table_item +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + table_id bigint not null, + item_name varchar(50) not null, + item_value varchar(500) not null, + index_value int not null, + total_rule varchar(500), + count_rule varchar(500), + unit_type int default 2 +); +/ + +create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key); +/ + +create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022120901602.sql b/resource/sqlupgrade/PG/2022/sql2022120901602.sql new file mode 100644 index 000000000..7d05fff62 --- /dev/null +++ b/resource/sqlupgrade/PG/2022/sql2022120901602.sql @@ -0,0 +1,5 @@ +alter table hrsa_sub_table add table_type int; +/ + +alter table hrsa_sub_table alter column table_type set default 0; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022121503101.sql b/resource/sqlupgrade/PG/2022/sql2022121503101.sql new file mode 100644 index 000000000..b5d69512b --- /dev/null +++ b/resource/sqlupgrade/PG/2022/sql2022121503101.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_stats_dim +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + dim_name varchar(100), + dim_type varchar(20), + remark varchar(500), + setting varchar(2000), + is_default int, + dim_code varchar(50) +); +/ + +create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022121613501.sql b/resource/sqlupgrade/PG/2022/sql2022121613501.sql new file mode 100644 index 000000000..6e5ca8dd4 --- /dev/null +++ b/resource/sqlupgrade/PG/2022/sql2022121613501.sql @@ -0,0 +1,27 @@ +create table hrsa_salary_stats_report +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + report_name varchar(100), + dimension varchar(1000), + tax_agent_setting varchar(1000), + income_category_setting varchar(20), + sub_company_setting varchar(1000), + depart_setting varchar(1000), + grade_setting varchar(1000), + position_setting varchar(1000), + status_setting varchar(1000), + employee_setting varchar(1000), + hiredate_setting varchar(1000), + leavedate_setting varchar(1000), + salary_start_month timestamp, + salary_end_month timestamp +); +/ + +create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022122005801.sql b/resource/sqlupgrade/PG/2022/sql2022122005801.sql new file mode 100644 index 000000000..690c20522 --- /dev/null +++ b/resource/sqlupgrade/PG/2022/sql2022122005801.sql @@ -0,0 +1,24 @@ +create table hrsa_salary_statistics_item +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + item_name varchar(50), + item_value varchar(1000), + count_rule varchar(500), + sum_rule varchar(500), + avg_rule varchar(500), + max_rule varchar(500), + min_rule varchar(500), + median_rule varchar(500), + index_value int, + unit_type int, + stat_report_id bigint +); +/ + +create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023011206201.sql b/resource/sqlupgrade/PG/2023/sql2023011206201.sql new file mode 100644 index 000000000..5bffbb0c0 --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023011206201.sql @@ -0,0 +1,22 @@ +create table hrsa_charts_setting +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + table_id bigint not null, + charts_type int not null, + item_values varchar(500), + item_col_value varchar(50) not null, + dimension_range int not null, + item_sort_value varchar(500), + item_col_sort_value varchar(50), + sort_type int, + sort_num int +); +/ + +create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023013104001.sql b/resource/sqlupgrade/PG/2023/sql2023013104001.sql new file mode 100644 index 000000000..873f2319a --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023013104001.sql @@ -0,0 +1,22 @@ +create table hrsa_salary_echarts_setting +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + report_id bigint not null, + charts_type int not null, + item_values varchar(500), + item_col_value varchar(50) not null, + dimension_range int not null, + item_sort_value varchar(500), + item_col_sort_value varchar(50), + sort_type int, + sort_num int +); +/ + +create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023021000102.sql b/resource/sqlupgrade/PG/2023/sql2023021000102.sql new file mode 100644 index 000000000..3dc980de1 --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023021000102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim alter column dim_type type varchar(30); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023021604102.sql b/resource/sqlupgrade/PG/2023/sql2023021604102.sql new file mode 100644 index 000000000..7acd451eb --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023021604102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report alter column income_category_setting type varchar(1000); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023021705001.sql b/resource/sqlupgrade/PG/2023/sql2023021705001.sql new file mode 100644 index 000000000..9052d725a --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023021705001.sql @@ -0,0 +1,82 @@ +create table hrsa_statreportlogs_detail +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + uuid varchar(36) not null, + mainid varchar(36) not null, + dataid varchar(50) not null, + belongdataid varchar(50) not null, + tablename varchar(200) not null, + tablenamelabelid varchar(50) default '-1' not null, + tablenamedesc varchar(50) not null, + fieldname varchar(200) not null, + fieldnamelabelid varchar(50) default '-1' not null, + newvalue text not null, + oldvalue text not null, + newrealvalue text not null, + oldrealvalue text not null, + fielddesc varchar(200) not null, + showorder int not null, + isdetail int default 0 not null +); +/ + +create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key); +/ + +create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time); +/ + +create table hrsa_statreportlogs +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + uuid varchar(36) not null, + log_date timestamp not null, + device varchar(500) not null, + log_operator bigint not null, + operatorname varchar(100), + targetid bigint default '-1' not null, + targetname text not null, + modulename varchar(100) not null, + functionname varchar(100) not null, + interfacename varchar(100) not null, + requesturl varchar(200) not null, + requesturi varchar(200) not null, + operatetype varchar(50) not null, + operatetypename varchar(100) not null, + operatedesc varchar(3000) not null, + params text not null, + belongmainid varchar(36) not null, + clientip varchar(50) not null, + groupid varchar(50) not null, + groupnamelabel varchar(1000) not null, + redoservice varchar(200) not null, + redocontext text not null, + cancelservice varchar(200) not null, + cancelcontext text not null, + totalruntime bigint default '0' not null, + mainruntime bigint default '0' not null, + log_result varchar(100) not null, + fromterminal varchar(100) not null, + resultdesc text not null, + old_content varchar(3000) not null, + link_type varchar(20) not null, + link_id bigint default '0' not null, + old_link_id bigint default '0' not null +); +/ + +create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key); +/ + +create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023032901802.sql b/resource/sqlupgrade/PG/2023/sql2023032901802.sql new file mode 100644 index 000000000..28569b30a --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023032901802.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add remark varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023032906602.sql b/resource/sqlupgrade/PG/2023/sql2023032906602.sql new file mode 100644 index 000000000..2904d96eb --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023032906602.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add second_dimension varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023032915202.sql b/resource/sqlupgrade/PG/2023/sql2023032915202.sql new file mode 100644 index 000000000..6a8164591 --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023032915202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_index varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023032916202.sql b/resource/sqlupgrade/PG/2023/sql2023032916202.sql new file mode 100644 index 000000000..a78cd0884 --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023032916202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_type varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023040404902.sql b/resource/sqlupgrade/PG/2023/sql2023040404902.sql new file mode 100644 index 000000000..c444c3992 --- /dev/null +++ b/resource/sqlupgrade/PG/2023/sql2023040404902.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim add label_id int; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022120100901.sql b/resource/sqlupgrade/SQLServer/2022/sql2022120100901.sql new file mode 100644 index 000000000..62848fbf9 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2022/sql2022120100901.sql @@ -0,0 +1,27 @@ +create table hrsa_sub_table +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + sub_table_name nvarchar(100) not null, + dimension nvarchar(20) not null, + start_month nvarchar(10), + end_month nvarchar(10), + pay_org_string nvarchar(500), + pay_agency_string nvarchar(500), + sub_company_string nvarchar(500), + depart_string nvarchar(500), + grade_string nvarchar(500), + position_string nvarchar(500), + status_string nvarchar(500), + employee_type nvarchar(500), + employee_string nvarchar(500), + payment_type_string nvarchar(100) +) +GO + +create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022120101001.sql b/resource/sqlupgrade/SQLServer/2022/sql2022120101001.sql new file mode 100644 index 000000000..7f1c82181 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2022/sql2022120101001.sql @@ -0,0 +1,23 @@ +create table hrsa_sub_table_item +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + table_id bigint not null, + item_name nvarchar(50) not null, + item_value nvarchar(500) not null, + index_value int not null, + total_rule nvarchar(500), + count_rule nvarchar(500), + unit_type int default 2 +) +GO + +create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key) +GO + +create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022120901602.sql b/resource/sqlupgrade/SQLServer/2022/sql2022120901602.sql new file mode 100644 index 000000000..9850ab2d9 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2022/sql2022120901602.sql @@ -0,0 +1,5 @@ +alter table hrsa_sub_table add table_type int +GO + +alter table hrsa_sub_table add constraint df_table_type_7b1e7561 default 0 for table_type +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022121503101.sql b/resource/sqlupgrade/SQLServer/2022/sql2022121503101.sql new file mode 100644 index 000000000..c90b2601d --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2022/sql2022121503101.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_stats_dim +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + dim_name nvarchar(100), + dim_type nvarchar(20), + remark nvarchar(500), + setting nvarchar(2000), + is_default int, + dim_code nvarchar(50) +) +GO + +create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022121613501.sql b/resource/sqlupgrade/SQLServer/2022/sql2022121613501.sql new file mode 100644 index 000000000..478e002e5 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2022/sql2022121613501.sql @@ -0,0 +1,27 @@ +create table hrsa_salary_stats_report +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + report_name nvarchar(100), + dimension nvarchar(1000), + tax_agent_setting nvarchar(1000), + income_category_setting nvarchar(20), + sub_company_setting nvarchar(1000), + depart_setting nvarchar(1000), + grade_setting nvarchar(1000), + position_setting nvarchar(1000), + status_setting nvarchar(1000), + employee_setting nvarchar(1000), + hiredate_setting varchar(1000), + leavedate_setting varchar(1000), + salary_start_month datetime, + salary_end_month datetime +) +GO + +create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022122005801.sql b/resource/sqlupgrade/SQLServer/2022/sql2022122005801.sql new file mode 100644 index 000000000..48224de5e --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2022/sql2022122005801.sql @@ -0,0 +1,24 @@ +create table hrsa_salary_statistics_item +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + item_name nvarchar(50), + item_value nvarchar(1000), + count_rule nvarchar(500), + sum_rule nvarchar(500), + avg_rule nvarchar(500), + max_rule nvarchar(500), + min_rule nvarchar(500), + median_rule nvarchar(500), + index_value int, + unit_type int, + stat_report_id bigint +) +GO + +create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023011206201.sql b/resource/sqlupgrade/SQLServer/2023/sql2023011206201.sql new file mode 100644 index 000000000..6ff111bcd --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023011206201.sql @@ -0,0 +1,22 @@ +create table hrsa_charts_setting +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + table_id bigint not null, + charts_type int not null, + item_values nvarchar(500), + item_col_value nvarchar(50) not null, + dimension_range int not null, + item_sort_value nvarchar(500), + item_col_sort_value nvarchar(50), + sort_type int, + sort_num int +) +GO + +create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023013104001.sql b/resource/sqlupgrade/SQLServer/2023/sql2023013104001.sql new file mode 100644 index 000000000..a74523163 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023013104001.sql @@ -0,0 +1,22 @@ +create table hrsa_salary_echarts_setting +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + report_id bigint not null, + charts_type int not null, + item_values nvarchar(500), + item_col_value nvarchar(50) not null, + dimension_range int not null, + item_sort_value nvarchar(500), + item_col_sort_value nvarchar(50), + sort_type int, + sort_num int +) +GO + +create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023021000102.sql b/resource/sqlupgrade/SQLServer/2023/sql2023021000102.sql new file mode 100644 index 000000000..4e68f59aa --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023021000102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim alter column dim_type nvarchar(30) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023021604102.sql b/resource/sqlupgrade/SQLServer/2023/sql2023021604102.sql new file mode 100644 index 000000000..14c2effdd --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023021604102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report alter column income_category_setting nvarchar(1000) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023021705001.sql b/resource/sqlupgrade/SQLServer/2023/sql2023021705001.sql new file mode 100644 index 000000000..c5525afae --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023021705001.sql @@ -0,0 +1,82 @@ +create table hrsa_statreportlogs_detail +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + uuid nvarchar(36) not null, + mainid nvarchar(36) not null, + dataid nvarchar(50) not null, + belongdataid nvarchar(50) not null, + tablename nvarchar(200) not null, + tablenamelabelid nvarchar(50) default '-1' not null, + tablenamedesc nvarchar(50) not null, + fieldname nvarchar(200) not null, + fieldnamelabelid nvarchar(50) default '-1' not null, + newvalue nvarchar(max) not null, + oldvalue nvarchar(max) not null, + newrealvalue nvarchar(max) not null, + oldrealvalue nvarchar(max) not null, + fielddesc nvarchar(200) not null, + showorder int not null, + isdetail int default 0 not null +) +GO + +create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key) +GO + +create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time) +GO + +create table hrsa_statreportlogs +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + uuid nvarchar(36) not null, + log_date datetime not null, + device nvarchar(500) not null, + log_operator bigint not null, + operatorname nvarchar(100), + targetid bigint default '-1' not null, + targetname nvarchar(max) not null, + modulename nvarchar(100) not null, + functionname nvarchar(100) not null, + interfacename nvarchar(100) not null, + requesturl nvarchar(200) not null, + requesturi nvarchar(200) not null, + operatetype nvarchar(50) not null, + operatetypename nvarchar(100) not null, + operatedesc nvarchar(3000) not null, + params nvarchar(max) not null, + belongmainid nvarchar(36) not null, + clientip nvarchar(50) not null, + groupid nvarchar(50) not null, + groupnamelabel nvarchar(1000) not null, + redoservice nvarchar(200) not null, + redocontext nvarchar(max) not null, + cancelservice nvarchar(200) not null, + cancelcontext nvarchar(max) not null, + totalruntime bigint default '0' not null, + mainruntime bigint default '0' not null, + log_result nvarchar(100) not null, + fromterminal nvarchar(100) not null, + resultdesc nvarchar(max) not null, + old_content nvarchar(3000) not null, + link_type nvarchar(20) not null, + link_id bigint default '0' not null, + old_link_id bigint default '0' not null +) +GO + +create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key) +GO + +create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023032901802.sql b/resource/sqlupgrade/SQLServer/2023/sql2023032901802.sql new file mode 100644 index 000000000..fb1f9c1d6 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023032901802.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add remark nvarchar(100) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023032906602.sql b/resource/sqlupgrade/SQLServer/2023/sql2023032906602.sql new file mode 100644 index 000000000..1c9ec574c --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023032906602.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add second_dimension nvarchar(100) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023032915202.sql b/resource/sqlupgrade/SQLServer/2023/sql2023032915202.sql new file mode 100644 index 000000000..e8703b352 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023032915202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_index nvarchar(100) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023032916202.sql b/resource/sqlupgrade/SQLServer/2023/sql2023032916202.sql new file mode 100644 index 000000000..6416a4b37 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023032916202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_type nvarchar(100) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023040404902.sql b/resource/sqlupgrade/SQLServer/2023/sql2023040404902.sql new file mode 100644 index 000000000..2ce9a28f2 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/2023/sql2023040404902.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim add label_id int +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022120100901.sql b/resource/sqlupgrade/ST/2022/sql2022120100901.sql new file mode 100644 index 000000000..9b45402f5 --- /dev/null +++ b/resource/sqlupgrade/ST/2022/sql2022120100901.sql @@ -0,0 +1,27 @@ +create table hrsa_sub_table +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + sub_table_name varchar(100) not null, + dimension varchar(20) not null, + start_month varchar(10), + end_month varchar(10), + pay_org_string varchar(500), + pay_agency_string varchar(500), + sub_company_string varchar(500), + depart_string varchar(500), + grade_string varchar(500), + position_string varchar(500), + status_string varchar(500), + employee_type varchar(500), + employee_string varchar(500), + payment_type_string varchar(100) +); +/ + +create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022120101001.sql b/resource/sqlupgrade/ST/2022/sql2022120101001.sql new file mode 100644 index 000000000..8ad5b3129 --- /dev/null +++ b/resource/sqlupgrade/ST/2022/sql2022120101001.sql @@ -0,0 +1,23 @@ +create table hrsa_sub_table_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + table_id number not null, + item_name varchar(50) not null, + item_value varchar(500) not null, + index_value int not null, + total_rule varchar(500), + count_rule varchar(500), + unit_type int default 2 +); +/ + +create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key); +/ + +create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022120901602.sql b/resource/sqlupgrade/ST/2022/sql2022120901602.sql new file mode 100644 index 000000000..81a0b8693 --- /dev/null +++ b/resource/sqlupgrade/ST/2022/sql2022120901602.sql @@ -0,0 +1,5 @@ +alter table hrsa_sub_table add table_type int; +/ + +alter table hrsa_sub_table modify table_type default 0; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022121503101.sql b/resource/sqlupgrade/ST/2022/sql2022121503101.sql new file mode 100644 index 000000000..fb9159c03 --- /dev/null +++ b/resource/sqlupgrade/ST/2022/sql2022121503101.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_stats_dim +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + dim_name varchar(100), + dim_type varchar(20), + remark varchar(500), + setting varchar(2000), + is_default int, + dim_code varchar(50) +); +/ + +create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022121613501.sql b/resource/sqlupgrade/ST/2022/sql2022121613501.sql new file mode 100644 index 000000000..2cb7ab3fb --- /dev/null +++ b/resource/sqlupgrade/ST/2022/sql2022121613501.sql @@ -0,0 +1,27 @@ +create table hrsa_salary_stats_report +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + report_name varchar(100), + dimension varchar(1000), + tax_agent_setting varchar(1000), + income_category_setting varchar(20), + sub_company_setting varchar(1000), + depart_setting varchar(1000), + grade_setting varchar(1000), + position_setting varchar(1000), + status_setting varchar(1000), + employee_setting varchar(1000), + hiredate_setting varchar(1000), + leavedate_setting varchar(1000), + salary_start_month date, + salary_end_month date +); +/ + +create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022122005801.sql b/resource/sqlupgrade/ST/2022/sql2022122005801.sql new file mode 100644 index 000000000..289ad7775 --- /dev/null +++ b/resource/sqlupgrade/ST/2022/sql2022122005801.sql @@ -0,0 +1,24 @@ +create table hrsa_salary_statistics_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + item_name varchar(50), + item_value varchar(1000), + count_rule varchar(500), + sum_rule varchar(500), + avg_rule varchar(500), + max_rule varchar(500), + min_rule varchar(500), + median_rule varchar(500), + index_value int, + unit_type int, + stat_report_id number +); +/ + +create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023011206201.sql b/resource/sqlupgrade/ST/2023/sql2023011206201.sql new file mode 100644 index 000000000..1bcc5602a --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023011206201.sql @@ -0,0 +1,22 @@ +create table hrsa_charts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + table_id number not null, + charts_type int not null, + item_values varchar(500), + item_col_value varchar(50) not null, + dimension_range int not null, + item_sort_value varchar(500), + item_col_sort_value varchar(50), + sort_type int, + sort_num int +); +/ + +create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023013104001.sql b/resource/sqlupgrade/ST/2023/sql2023013104001.sql new file mode 100644 index 000000000..bd3d42415 --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023013104001.sql @@ -0,0 +1,22 @@ +create table hrsa_salary_echarts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + report_id number not null, + charts_type int not null, + item_values varchar(500), + item_col_value varchar(50) not null, + dimension_range int not null, + item_sort_value varchar(500), + item_col_sort_value varchar(50), + sort_type int, + sort_num int +); +/ + +create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023021000102.sql b/resource/sqlupgrade/ST/2023/sql2023021000102.sql new file mode 100644 index 000000000..a1b09bbb5 --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023021000102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim modify dim_type varchar(30); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023021604102.sql b/resource/sqlupgrade/ST/2023/sql2023021604102.sql new file mode 100644 index 000000000..a5bb145fe --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023021604102.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report modify income_category_setting varchar(1000); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023021705001.sql b/resource/sqlupgrade/ST/2023/sql2023021705001.sql new file mode 100644 index 000000000..708255326 --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023021705001.sql @@ -0,0 +1,82 @@ +create table hrsa_statreportlogs_detail +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + uuid varchar(36) not null, + mainid varchar(36) not null, + dataid varchar(50) not null, + belongdataid varchar(50) not null, + tablename varchar(200) not null, + tablenamelabelid varchar(50) default '-1' not null, + tablenamedesc varchar(50) not null, + fieldname varchar(200) not null, + fieldnamelabelid varchar(50) default '-1' not null, + newvalue clob not null, + oldvalue clob not null, + newrealvalue clob not null, + oldrealvalue clob not null, + fielddesc varchar(200) not null, + showorder int not null, + isdetail int default 0 not null +); +/ + +create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key); +/ + +create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time); +/ + +create table hrsa_statreportlogs +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar(10), + uuid varchar(36) not null, + log_date date not null, + device varchar(500) not null, + log_operator number not null, + operatorname varchar(100), + targetid number default '-1' not null, + targetname clob not null, + modulename varchar(100) not null, + functionname varchar(100) not null, + interfacename varchar(100) not null, + requesturl varchar(200) not null, + requesturi varchar(200) not null, + operatetype varchar(50) not null, + operatetypename varchar(100) not null, + operatedesc varchar(3000) not null, + params clob not null, + belongmainid varchar(36) not null, + clientip varchar(50) not null, + groupid varchar(50) not null, + groupnamelabel varchar(1000) not null, + redoservice varchar(200) not null, + redocontext clob not null, + cancelservice varchar(200) not null, + cancelcontext clob not null, + totalruntime number default '0' not null, + mainruntime number default '0' not null, + log_result varchar(100) not null, + fromterminal varchar(100) not null, + resultdesc clob not null, + old_content varchar(3000) not null, + link_type varchar(20) not null, + link_id number default '0' not null, + old_link_id number default '0' not null +); +/ + +create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key); +/ + +create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023032901802.sql b/resource/sqlupgrade/ST/2023/sql2023032901802.sql new file mode 100644 index 000000000..28569b30a --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023032901802.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add remark varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023032906602.sql b/resource/sqlupgrade/ST/2023/sql2023032906602.sql new file mode 100644 index 000000000..2904d96eb --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023032906602.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add second_dimension varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023032915202.sql b/resource/sqlupgrade/ST/2023/sql2023032915202.sql new file mode 100644 index 000000000..6a8164591 --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023032915202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_index varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023032916202.sql b/resource/sqlupgrade/ST/2023/sql2023032916202.sql new file mode 100644 index 000000000..a78cd0884 --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023032916202.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_report add sort_type varchar(100); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023040404902.sql b/resource/sqlupgrade/ST/2023/sql2023040404902.sql new file mode 100644 index 000000000..c444c3992 --- /dev/null +++ b/resource/sqlupgrade/ST/2023/sql2023040404902.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_stats_dim add label_id int; +/ \ No newline at end of file diff --git a/src/com/api/salary/web/SalaryStatisticsDimensionController.java b/src/com/api/salary/web/SalaryStatisticsDimensionController.java new file mode 100644 index 000000000..6f088d983 --- /dev/null +++ b/src/com/api/salary/web/SalaryStatisticsDimensionController.java @@ -0,0 +1,9 @@ +package com.api.salary.web; + + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/report/statistics/dimension") +public class SalaryStatisticsDimensionController extends com.engine.salary.report.web.SalaryStatisticsDimensionController{ + +} diff --git a/src/com/engine/salary/entity/agency/dto/PaymentAgencyListDTO.java b/src/com/engine/salary/entity/agency/dto/PaymentAgencyListDTO.java index 8f554125d..e9dc1fae6 100644 --- a/src/com/engine/salary/entity/agency/dto/PaymentAgencyListDTO.java +++ b/src/com/engine/salary/entity/agency/dto/PaymentAgencyListDTO.java @@ -17,7 +17,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("") +////"") //@TableOperates(value = { // @Operates(index = 0, text = "编辑", labelId = 87058), // @Operates(index = 1, text = "删除", labelId = 87061) diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java index 9e91b8d74..a624f49d2 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java @@ -18,7 +18,7 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("我的工资单") +////"我的工资单") //@TableOperates(value = { // @Operates(index = 0, text = "查看", labelId = 90821) //}, tableType = WeaTableTypeEnum.NONE) diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalarySendBaseInfoDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalarySendBaseInfoDTO.java index 8bcd1cd0b..72b72b9c2 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalarySendBaseInfoDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalarySendBaseInfoDTO.java @@ -19,7 +19,7 @@ import java.time.YearMonth; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单发放基本信息") +////"工资单发放基本信息") public class SalarySendBaseInfoDTO { // @ApiModelProperty("已发送") diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalarySendDetailListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalarySendDetailListDTO.java index e48baa285..548213659 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalarySendDetailListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalarySendDetailListDTO.java @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单发放详情列表") +////"工资单发放详情列表") public class SalarySendDetailListDTO { // @ApiModelProperty("主键id") diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalarySendInfoListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalarySendInfoListDTO.java index 89bde7d45..eb82e629f 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalarySendInfoListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalarySendInfoListDTO.java @@ -15,7 +15,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单发放信息列表") +////"工资单发放信息列表") //@TableOperates(tableType = WeaTableTypeEnum.CHECKBOX) public class SalarySendInfoListDTO { diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateReplenishFormDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateReplenishFormDTO.java index 117ead514..1f9de039a 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateReplenishFormDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateReplenishFormDTO.java @@ -16,7 +16,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单补发表单") +////"工资单补发表单") public class SalaryTemplateReplenishFormDTO { // @ApiModelProperty("主键id") diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java index c4faaf061..660d76505 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单薪资项目") +////"工资单薪资项目") public class SalaryTemplateSalaryItemListDTO { // @ApiModelProperty("薪资账套项目id") diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemSetListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemSetListDTO.java index 667625743..c71fda9a5 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemSetListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemSetListDTO.java @@ -14,7 +14,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单薪资项目设置") +////"工资单薪资项目设置") public class SalaryTemplateSalaryItemSetListDTO { // @ApiModelProperty("组id") diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowFormDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowFormDTO.java index 687d60f05..9fb832686 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowFormDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowFormDTO.java @@ -15,7 +15,7 @@ import java.util.Map; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单显示设置表单") +////"工资单显示设置表单") public class SalaryTemplateShowFormDTO { // @ApiModelProperty("主键id") diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowSetDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowSetDTO.java index 2df2a7756..232fd9aba 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowSetDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowSetDTO.java @@ -21,7 +21,7 @@ import java.util.stream.Collectors; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("主题及其他设置") +////"主题及其他设置") public class SalaryTemplateShowSetDTO { // @ApiModelProperty("工资单主题") diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryBillQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryBillQueryParam.java index 5cf80066b..f5f459a29 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryBillQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryBillQueryParam.java @@ -18,7 +18,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单发放信息查询参数") +////"工资单发放信息查询参数") public class SalaryBillQueryParam extends BaseQueryParam { // @JsonIgnore diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailListQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailListQueryParam.java index a5ebe455e..67512b4eb 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailListQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailListQueryParam.java @@ -18,7 +18,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单发放信息查询参数") +////"工资单发放信息查询参数") public class SalarySendDetailListQueryParam extends BaseQueryParam { // @ApiModelProperty("主键id") diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java index e839e10c1..03a9a42ea 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java @@ -18,7 +18,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单发放信息查询参数") +////"工资单发放信息查询参数") public class SalarySendDetailQueryParam extends BaseQueryParam { // @ApiModelProperty("主键id") diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java index 39a67bd6a..3e6b4c7dd 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java @@ -19,7 +19,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单发放参数") +////"工资单发放参数") public class SalarySendGrantParam { // 主键id diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendInfoQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendInfoQueryParam.java index b48abeb72..8c3ab1746 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendInfoQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendInfoQueryParam.java @@ -19,7 +19,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单发放信息查询参数") +////"工资单发放信息查询参数") public class SalarySendInfoQueryParam extends BaseQueryParam { // @ApiModelProperty("主键id") diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeQueryParam.java index 65a4bb257..15ae92097 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeQueryParam.java @@ -10,7 +10,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单发放范围查询参数") +////"工资单发放范围查询参数") public class SalarySendRangeQueryParam extends BaseQueryParam { /** * 发放类型 diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java index df4808dbc..9d6e4c19b 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java @@ -18,7 +18,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单撤回参数") +////"工资单撤回参数") public class SalarySendWithdrawParam { // @ApiModelProperty("主键id") diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateCopyParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateCopyParam.java index bfeaf2caa..78fb3755d 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateCopyParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateCopyParam.java @@ -14,7 +14,7 @@ import org.apache.commons.lang3.StringUtils; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单复制参数") +////"工资单复制参数") public class SalaryTemplateCopyParam { // @ApiModelProperty("主键") diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateDefaultUseParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateDefaultUseParam.java index da8d7cfc1..dcfe0fe57 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateDefaultUseParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateDefaultUseParam.java @@ -13,7 +13,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单模板默认使用参数") +////"工资单模板默认使用参数") public class SalaryTemplateDefaultUseParam { // @ApiModelProperty("主键") diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java index c470f3505..b84610abf 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java @@ -20,7 +20,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("工资单模板保存参数") +////"工资单模板保存参数") public class SalaryTemplateSaveParam { // @ApiModelProperty("主键") diff --git a/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java b/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java index 15171f1e3..6dd5241b1 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java @@ -16,7 +16,7 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor -//@TableName("hrsa_salary_send_info") +////hrsa_salary_send_info") //工资单发放信息表") public class SalarySendInfoPO { diff --git a/src/com/engine/salary/entity/salaryBill/po/SalarySendPO.java b/src/com/engine/salary/entity/salaryBill/po/SalarySendPO.java index 2e39a783b..9d857212f 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalarySendPO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalarySendPO.java @@ -14,8 +14,8 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor -//@TableName("hrsa_salary_send") -//@ElogTransform(name = "工资单发放表") +////hrsa_salary_send") +////工资单发放表") public class SalarySendPO { /** diff --git a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java index 60c2bc244..cfbf15d20 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java @@ -16,8 +16,8 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor -//@TableName("hrsa_salary_template") -//@ElogTransform(name = "工资单模板表") +////hrsa_salary_template") +////工资单模板表") public class SalaryTemplatePO { /** diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAccResultListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAccResultListDTO.java index 901aab1cd..f294ed26c 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAccResultListDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAccResultListDTO.java @@ -24,7 +24,7 @@ //@Builder //@NoArgsConstructor //@AllArgsConstructor -//@ApiModel("核算结果列表") +////"核算结果列表") //public class SalaryAccResultListDTO { // // //动态表头") diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryCheckResultListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryCheckResultListDTO.java index 84218c20d..c9ac60aa7 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryCheckResultListDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryCheckResultListDTO.java @@ -22,7 +22,7 @@ //@Builder //@NoArgsConstructor //@AllArgsConstructor -//@ApiModel("薪资核算校验结果列表") +////"薪资核算校验结果列表") //@SalaryTable( // value = { // @SalaryTableOperate(index = 0, text = "忽略", labelId = 92457), diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java index ce941edf8..9587048ee 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java @@ -68,14 +68,14 @@ public class SalaryAcctRecordPO { * 回算(上次核算的薪资核算记录id) */ @Deprecated -// @ElogTransform(name = "备用字段1", ignore = true) +// //备用字段1", ignore = true) private Long superId; /** * 回算(最原始的那次薪资核算记录id) */ @Deprecated -// @ElogTransform(name = "备用字段2", ignore = true) +// //备用字段2", ignore = true) private Long rootId; /** diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java index d6fe74adb..659707a90 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java @@ -16,7 +16,7 @@ import java.util.Date; * @author Harryxzy * @date 2022/11/15 16:06 * @description 薪资账套回算薪资项目 - * @TableName(value = "hrsa_salary_sob_back_item") + * //hrsa_salary_sob_back_item") */ @Data @Builder diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesFundSchemePO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesFundSchemePO.java index 5e511ae39..7b333f4e6 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesFundSchemePO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesFundSchemePO.java @@ -53,7 +53,7 @@ public class InsuranceArchivesFundSchemePO { /** * 公积金方案名称 */ - /*@ElogTransform(name = "公积金方案名称") + /*//公积金方案名称") private String fundName;*/ /** diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesOtherSchemePO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesOtherSchemePO.java index 5a7453937..76146719d 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesOtherSchemePO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesOtherSchemePO.java @@ -53,7 +53,7 @@ public class InsuranceArchivesOtherSchemePO { /** * 其他福利方案名称 */ - /*@ElogTransform(name = "其他福利方案名称") + /*//其他福利方案名称") private String otherName;*/ /** diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesSocialSchemePO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesSocialSchemePO.java index d9c5a6e72..e6f4ff038 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesSocialSchemePO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesSocialSchemePO.java @@ -54,7 +54,7 @@ public class InsuranceArchivesSocialSchemePO { /** * 社保方案名称 */ - /* @ElogTransform(name = "社保方案名称") + /* //社保方案名称") private String socialName;*/ /** diff --git a/src/com/engine/salary/entity/taxagent/dto/TaxAgentAdjustRecordListDTO.java b/src/com/engine/salary/entity/taxagent/dto/TaxAgentAdjustRecordListDTO.java index 36cb60e2b..1d7eff654 100644 --- a/src/com/engine/salary/entity/taxagent/dto/TaxAgentAdjustRecordListDTO.java +++ b/src/com/engine/salary/entity/taxagent/dto/TaxAgentAdjustRecordListDTO.java @@ -27,7 +27,7 @@ //@Builder //@NoArgsConstructor //@AllArgsConstructor -//@ApiModel("个税扣缴义务人调整记录列表") +////"个税扣缴义务人调整记录列表") //@TableOperates(tableType = WeaTableTypeEnum.CHECKBOX) //public class TaxAgentAdjustRecordListDTO { // @ApiModelProperty("主键id") diff --git a/src/com/engine/salary/entity/taxagent/dto/TaxAgentListDTO.java b/src/com/engine/salary/entity/taxagent/dto/TaxAgentListDTO.java index 78b35c633..9223f2b9a 100644 --- a/src/com/engine/salary/entity/taxagent/dto/TaxAgentListDTO.java +++ b/src/com/engine/salary/entity/taxagent/dto/TaxAgentListDTO.java @@ -16,7 +16,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//@ApiModel("个税扣缴义务人列表") +////"个税扣缴义务人列表") //@TableOperates(value = { // @Operates(index = 0, text = "编辑" ,labelId = 59943), // @Operates(index = 1, text = "删除" ,labelId = 59942) diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.java new file mode 100644 index 000000000..c4e5c266a --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.java @@ -0,0 +1,65 @@ +package com.engine.salary.mapper.report; + +import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; + +import java.util.List; + +public interface SalaryStatisticsDimensionMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryStatisticsDimensionPO salaryStatsDim); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryStatisticsDimensionPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param salaryStatsDim 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryStatisticsDimensionPO salaryStatsDim); + + /** + * 修改,修改所有字段 + * + * @param salaryStatsDim 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryStatisticsDimensionPO salaryStatsDim); + + /** + * 修改,忽略null字段 + * + * @param salaryStatsDim 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryStatisticsDimensionPO salaryStatsDim); + + /** + * 删除记录 + * + * @param salaryStatsDim 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryStatisticsDimensionPO salaryStatsDim); + + void batDelete(List deleteIds); +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.xml new file mode 100644 index 000000000..dfe698fe6 --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.xml @@ -0,0 +1,302 @@ + + + + + + + + + + + + + + + + + + + + + + t + . + create_time + , t.creator + , t.delete_type + , t.dim_code + , t.dim_name + , t.dim_type + , t.id + , t.is_default + , t.label_id + , t.remark + , t.setting + , t.tenant_key + , t.update_time + + + + + + + + + + + + AND dim_name like CONCAT('%',#{dimNameLike},'%') + + + + + AND dim_name like '%'||#{dimName}||'%' + + + + + AND dim_name like '%'+#{dimNameLike}+'%' + + + + + + + + + + INSERT INTO hrsa_salary_stats_dim + + + + create_time, + + + creator, + + + delete_type, + + + dim_code, + + + dim_name, + + + dim_type, + + + id, + + + is_default, + + + label_id, + + + remark, + + + setting, + + + tenant_key, + + + update_time, + + + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{dimCode}, + + + #{dimName}, + + + #{dimType}, + + + #{id}, + + + #{isDefault}, + + + #{labelId}, + + + #{remark}, + + + #{setting}, + + + #{tenantKey}, + + + #{updateTime}, + + + + + + + UPDATE hrsa_salary_stats_dim + + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + dim_code=#{dimCode}, + dim_name=#{dimName}, + dim_type=#{dimType}, + is_default=#{isDefault}, + label_id=#{labelId}, + remark=#{remark}, + setting=#{setting}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_stats_dim + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + dim_code=#{dimCode}, + + + dim_name=#{dimName}, + + + dim_type=#{dimType}, + + + is_default=#{isDefault}, + + + label_id=#{labelId}, + + + remark=#{remark}, + + + setting=#{setting}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_stats_dim + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_salary_stats_dim + SET delete_type=1 + WHERE id IN + + #{id} + + AND delete_type = 0 + + + + \ No newline at end of file diff --git a/src/com/engine/salary/report/common/constant/DbCrudConstant.java b/src/com/engine/salary/report/common/constant/DbCrudConstant.java new file mode 100644 index 000000000..885309c4a --- /dev/null +++ b/src/com/engine/salary/report/common/constant/DbCrudConstant.java @@ -0,0 +1,14 @@ +package com.engine.salary.report.common.constant; + +/** + * @Description: 数据库操作常量 + * @Author: wangxiangzhong + * @Date: 2022/7/27 20:41 + */ +public class DbCrudConstant { + + /** + * 默认分片大小 + */ + public static final int DEF_PART_SIZE = 1000; +} diff --git a/src/com/engine/salary/report/common/constant/SalaryConstant.java b/src/com/engine/salary/report/common/constant/SalaryConstant.java new file mode 100644 index 000000000..69ad5ff88 --- /dev/null +++ b/src/com/engine/salary/report/common/constant/SalaryConstant.java @@ -0,0 +1,14 @@ +package com.engine.salary.report.common.constant; + +/** + * @Description: 薪资常量 + * @Author: wangxiangzhong + * @Date: 2022/5/27 13:32 + */ +public class SalaryConstant { + + /** + * 列表中薪资项目动态列后缀标识 + */ + public static final String DYNAMIC_SUFFIX = "_salaryItem"; +} diff --git a/src/com/engine/salary/report/common/constant/SalaryReportModule.java b/src/com/engine/salary/report/common/constant/SalaryReportModule.java new file mode 100644 index 000000000..8afc32b4e --- /dev/null +++ b/src/com/engine/salary/report/common/constant/SalaryReportModule.java @@ -0,0 +1,12 @@ +package com.engine.salary.report.common.constant; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/10/24 + * @Version: v1.0 + */ +public class SalaryReportModule { + + public final static String BROWSER_MODULE = "salaryreport"; +} diff --git a/src/com/engine/salary/report/common/constant/SalaryStatisticsDimensionConstant.java b/src/com/engine/salary/report/common/constant/SalaryStatisticsDimensionConstant.java new file mode 100644 index 000000000..9be8dfd15 --- /dev/null +++ b/src/com/engine/salary/report/common/constant/SalaryStatisticsDimensionConstant.java @@ -0,0 +1,141 @@ +package com.engine.salary.report.common.constant; + +/** + * @Description: 薪资报表统计维度常量 + * @Author: wangxiangzhong + * @Date: 2022/12/30 13:17 + */ +public class SalaryStatisticsDimensionConstant { + + // 默认维度 start ==================================================================================== + /** + * 薪资所属月 + */ + public static final String DM_SALARY_MONTH = "salaryMonth"; + + /** + * 个税扣缴义务人 + */ + public static final String DM_TAX_AGENT = "taxAgent"; + + /** + * 收入所得类型 + */ + public static final String DM_INCOME_CATEGORY = "incomeCategory"; + + /** + * 分部 + */ + public static final String DM_SUB_COMPANY = "subCompany"; + + /** + * 部门 + */ + public static final String DM_DEPARTMENT = "department"; + + /** + * 岗位 + */ + public static final String DM_POSITION = "position"; + + /** + * 职级 + */ + public static final String DM_GRADE = "grade"; + + /** + * 人事状态 + */ + public static final String DM_HRM_STATUS = "hrmStatus"; + + /** + * 人员类型 + */ + public static final String DM_EMPLOYEE_TYPE = "employeeType"; + + /** + * 人员 + */ + public static final String DM_EMPLOYEE = "employee"; + + /** + * 年度 + */ + public static final String DM_YEAR = "year"; + + /** + * 半年度 + */ + public static final String DM_HALF_YEAR = "halfYear"; + + /** + * 季度 + */ + public static final String DM_QUARTER = "quarter"; + +// /** +// * 月度 用薪资所属月,所以没必要了 +// */ +// public static final String DM_MONTH = "month"; + // 默认维度 end ==================================================================================== + + /** + * 性别 + */ + public static final String DM_SEX = "sex"; + + /** + * 职称 + */ + public static final String DM_JOB_CALL = "job_call"; + + /** + * 上级 + */ + public static final String DM_SUPERIOR = "superior"; + + /** + * 婚姻状况 + */ + public static final String DM_MARITAL_STATUS = "marital_status"; + + /** + * 学历 + */ + public static final String DM_EDUCATION = "education"; + + /** + * 学位 + */ + public static final String DM_DEGREE = "degree"; + + /** + * 民族 + */ + public static final String DM_NATION = "nation"; + + /** + * 户口类型 + */ + public static final String DM_HOUSEHOLD_TYPE = "household_type"; + + /** + * 政治面貌 + */ + public static final String DM_POLITICS_STATUS = "politics_status"; + + /** + * 年龄 + */ + public static final String DM_AGE = "age"; + + /** + * 工龄 + */ + public static final String DM_WORK_YEAR = "work_year"; + + /** + * 司龄 + */ + public static final String DM_COMPANY_YEAR = "company_year"; +} diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java new file mode 100644 index 000000000..808c59768 --- /dev/null +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java @@ -0,0 +1,68 @@ +package com.engine.salary.report.entity.bo; + +import com.google.common.collect.Sets; +import org.apache.commons.collections4.CollectionUtils; + +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @Description: 薪酬统计员工明细 + * @Author: wangxiangzhong + * @Date: 2022/12/30 14:23 + */ +public class SalaryStatisticsEmployeeBO { + + /** + * 年月参数处理,注意:薪资所属月居然是用字符串存储的,无法通过sql between处理 + * + * @param year + * @param salaryMonth + * @return + */ + public static Set getSalaryMonths(Integer year, List salaryMonth) { + Set salaryMonths = Sets.newHashSet(); + // 年份参数 + if (Objects.nonNull(year)) { + List months = Arrays.asList("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"); + for (int i=0;i 2 ? salaryMonth.subList(0, 1) : salaryMonth); + if (salaryMonth.size() == 2) { + if (salaryMonth.get(0).isAfter(salaryMonth.get(1))) { + salaryMonths.clear(); + salaryMonths.add("2000-01"); + } else { + YearMonth startYearMonth = salaryMonth.get(0); + YearMonth endYearMonth = salaryMonth.get(1); + Set yearMonths = Sets.newHashSet(); + while (!startYearMonth.isAfter(endYearMonth)) { + yearMonths.add(startYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"))); + startYearMonth = startYearMonth.plusMonths(1); + } + if (CollectionUtils.isNotEmpty(salaryMonths)) { + Set finalSalaryMonths = salaryMonths; + salaryMonths = yearMonths.stream().filter(finalSalaryMonths::contains).collect(Collectors.toSet()); + salaryMonths = CollectionUtils.isEmpty(salaryMonths) ? Sets.newHashSet("2000-01") : salaryMonths; + } else { + salaryMonths = yearMonths; + } + } + } else { + String singMonth = salaryMonth.get(0).format(DateTimeFormatter.ofPattern("yyyy-MM")); + salaryMonths.add(CollectionUtils.isNotEmpty(salaryMonths) ? (salaryMonths.contains(singMonth) ? singMonth : "2000-01") : singMonth); + } + } + + return salaryMonths; + } +} diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java new file mode 100644 index 000000000..734c8c966 --- /dev/null +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -0,0 +1,975 @@ +package com.engine.salary.report.entity.bo; + +import com.alibaba.fastjson.JSON; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; +import com.engine.salary.report.entity.dto.SalaryStatisticsItemRuleDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; +import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; +import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; +import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; +import com.engine.salary.report.enums.UnitTypeEnum; +import com.engine.salary.report.util.ReportDataUtil; +import com.engine.salary.report.util.ReportTimeUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 薪酬统计报表 + * @Author: wangxiangzhong + * @Date: 2022/12/30 14:04 + */ +public class SalaryStatisticsReportBO { + + public static final String COUNT = "count"; + public static final String SUM = "sum"; + public static final String AVG = "avg"; + public static final String MAX = "max"; + public static final String MIN = "min"; + public static final String MEDIAN = "median"; + + public static final String ZERO = "0"; + public static final String ONE = "1"; + public static final String COMMA = ","; + public static final String UD = "_"; + + public static final String K_NOW = "_now"; + public static final String K_RATIO = "_ratio"; + public static final String K_LAST = "_last"; + public static final String K_SAME = "_same"; + + public static final String P_NOW = "_now"; + public static final String P_LAST = "_last"; + public static final String P_SAME = "_same"; + public static final String P_RATIO = "_ratio"; + public static final String P_M2M_D_VALUE = "_m2m_d_value"; + public static final String P_M2M_INCREASE = "_m2m_increase"; + public static final String P_M2M_UPPER_LIMIT = "_m2m_upperLimit"; + public static final String P_M2M_LOWER_LIMIT = "_m2m_lowerLimit"; + public static final String P_Y2Y_D_VALUE = "_y2y_d_value"; + public static final String P_Y2Y_INCREASE = "_y2y_increase"; + public static final String P_Y2Y_UPPER_LIMIT = "_y2y_upperLimit"; + public static final String P_Y2Y_LOWER_LIMIT = "_y2y_lowerLimit"; + + public static final String COL_WIDTH = "150"; + + public static final String PERCENT = "%"; + public static final String D_ZERO = "0.00"; + + public static final BigDecimal HUNDRED = new BigDecimal(100); + + public static final String G_NO_ITEM = "noItem"; + public static final String G_YEAR = "year"; + public static final String G_ITEM = "ITEM"; + + /** + * 参数转换 + * + * @param param + * @param po + */ +// public static void poToQueryParam(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po) { +// param.setSalaryStartMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryStartMonth())); +// param.setSalaryEndMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryEndMonth())); +// +// // todo 待优化 +// String key = "id"; +// param.setTaxAgent(JSON.parseArray(po.getTaxAgentSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setIncomeCategory(JSON.parseArray(po.getIncomeCategorySetting(), Map.class).stream().map(m -> Integer.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setSubCompany(JSON.parseArray(po.getSubCompanySetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setDepart(JSON.parseArray(po.getDepartSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setGrade(JSON.parseArray(po.getGradeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setPosition(JSON.parseArray(po.getPositionSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setStatus(JSON.parseArray(po.getStatusSetting(), Map.class).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); +// param.setEmployee(JSON.parseArray(po.getEmployeeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setHiredate(JSON.parseArray(po.getHiredateSetting(), LocalDate.class)); +// param.setLeavedate(JSON.parseArray(po.getLeavedateSetting(), LocalDate.class)); +// } + + /** + * 参数转换获取上一期 + * + * @param param + * @param dimension + * @return + */ + public static SalaryStatisticsReportDataQueryParam lastParamConvert(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsDimensionPO dimension) { + SalaryStatisticsReportDataQueryParam lastParam = new SalaryStatisticsReportDataQueryParam(); + BeanUtils.copyProperties(param, lastParam); + // 薪资所属月 + if (SalaryStatisticsDimensionConstant.DM_SALARY_MONTH.equals(dimension.getDimCode())) { + lastParam.setSalaryStartMonth(ReportTimeUtil.getLastYearMonth(param.getSalaryStartMonth())); + lastParam.setSalaryEndMonth(ReportTimeUtil.getLastYearMonth(param.getSalaryEndMonth())); + // 年份 + } else if (SalaryStatisticsDimensionConstant.DM_YEAR.equals(dimension.getDimCode())) { + lastParam.setSalaryStartMonth(ReportTimeUtil.getSameYearMonth(param.getSalaryStartMonth())); + lastParam.setSalaryEndMonth(ReportTimeUtil.getSameYearMonth(param.getSalaryEndMonth())); + // 半年度 + } else if (SalaryStatisticsDimensionConstant.DM_HALF_YEAR.equals(dimension.getDimCode())) { + lastParam.setSalaryStartMonth(ReportTimeUtil.getPlusYearMonth(param.getSalaryStartMonth(), -6)); + lastParam.setSalaryEndMonth(ReportTimeUtil.getPlusYearMonth(param.getSalaryEndMonth(), -6)); + // 季度 + } else if (SalaryStatisticsDimensionConstant.DM_QUARTER.equals(dimension.getDimCode())) { + lastParam.setSalaryStartMonth(ReportTimeUtil.getPlusYearMonth(param.getSalaryStartMonth(), -3)); + lastParam.setSalaryEndMonth(ReportTimeUtil.getPlusYearMonth(param.getSalaryEndMonth(), -3)); + } else { + Map timeDiff = ReportTimeUtil.getLastRange(param.getSalaryStartMonth(), param.getSalaryEndMonth()); + lastParam.setSalaryStartMonth(timeDiff.get("startMonth")); + lastParam.setSalaryEndMonth(timeDiff.get("endMonth")); + } + return lastParam; + } + + public static SalaryStatisticsReportDataQueryParam sameParamConvert(SalaryStatisticsReportDataQueryParam param) { + SalaryStatisticsReportDataQueryParam sameParam = new SalaryStatisticsReportDataQueryParam(); + BeanUtils.copyProperties(param, sameParam); + sameParam.setSalaryStartMonth(ReportTimeUtil.getSameYearMonth(param.getSalaryStartMonth())); + sameParam.setSalaryEndMonth(ReportTimeUtil.getSameYearMonth(param.getSalaryEndMonth())); + return sameParam; + } + + /** + * 计算项目 + * + * @param list + * @param lastList + * @param salaryAcctResultValueMap + * @param salaryStatisticsItemList + * @return + */ + public static Map calculateItem(List list, List lastList, List sameList, Map> salaryAcctResultValueMap, List salaryStatisticsItemList) { + List> nowDetail = po2map(list, salaryAcctResultValueMap); + List> lastDetail = po2map(lastList, salaryAcctResultValueMap); + List> sameDetail = po2map(sameList, salaryAcctResultValueMap); + Map result = new HashMap<>(); + salaryStatisticsItemList.forEach(item -> { + // 1.计数规则数据处理 + calculate4Count(result, item, nowDetail, lastDetail, sameDetail); + // 2.求和规则数据处理 + calculate4Sum(result, item, nowDetail, lastDetail, sameDetail); + // 3.平均值规则数据处理 + calculate4Avg(result, item, nowDetail, lastDetail, sameDetail); + // 4.最大值规则数据处理 + calculate4Max(result, item, nowDetail, lastDetail, sameDetail); + // 5.最小值规则数据处理 + calculate4Min(result, item, nowDetail, lastDetail, sameDetail); + // 6.中位数规则数据处理 + calculate4Median(result, item, nowDetail, lastDetail, sameDetail); + }); + return result; + } + + private static void calculate4Count(Map result, SalaryStatisticsItemPO item, List> nowDetail, List> lastDetail, List> sameDetail) { + SalaryStatisticsItemRuleDTO countRule = JSON.parseObject(item.getCountRule(), SalaryStatisticsItemRuleDTO.class); + if (countRule == null || countRule.getTotalValue() != 1) { + return; + } + BigDecimal countDecimal = new BigDecimal(CollectionUtils.isNotEmpty(nowDetail) ? nowDetail.size() : 0); + // 本期 + if (countRule.getTotalValue() == 1) { + // 本期和占比赋值 + nowAndRatio(result, item, countRule, COUNT, countDecimal); + } + // 上期 + if (countRule.getM2mValue() == 1) { + BigDecimal lastCountDecimal = new BigDecimal(CollectionUtils.isNotEmpty(lastDetail) ? lastDetail.size() : 0); + // 上期和环比赋值 + lastM2m(result, item, countRule, COUNT, countDecimal, lastCountDecimal); + } + // 同期 + if (countRule.getY2yValue() == 1) { + BigDecimal sameCountDecimal = new BigDecimal(CollectionUtils.isNotEmpty(sameDetail) ? sameDetail.size() : 0); + // 同期和同比赋值 + sameY2y(result, item, countRule, COUNT, countDecimal, sameCountDecimal); + } + } + + + + private static void calculate4Sum(Map result, SalaryStatisticsItemPO item, List> nowDetail, List> lastDetail, List> sameDetail) { + SalaryStatisticsItemRuleDTO sumRule = JSON.parseObject(item.getSumRule(), SalaryStatisticsItemRuleDTO.class); + if (sumRule == null || sumRule.getTotalValue() != 1) { + return; + } + BigDecimal sumDecimal = new BigDecimal(ZERO); + if (sumRule.getTotalValue() == 1) { + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] itemValues = item.getItemValue().split(COMMA); + for (String itemId : itemValues) { + for (Map x : nowDetail) { + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { + sumDecimal = sumDecimal.add(new BigDecimal(x.get(itemId))); + } + } + } + } + nowAndRatio(result, item, sumRule, SUM, sumDecimal); + } + // 上期 + if (sumRule.getM2mValue() == 1) { + BigDecimal lastSumDecimal = new BigDecimal(ZERO); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : lastDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + lastSumDecimal = lastSumDecimal.add(new BigDecimal(y.get(itemId))); + } + } + } + } + lastM2m(result, item, sumRule, SUM, sumDecimal, lastSumDecimal); + } + // 同期 + if (sumRule.getY2yValue() == 1) { + BigDecimal sameSumDecimal = new BigDecimal(ZERO); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : sameDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + sameSumDecimal = sameSumDecimal.add(new BigDecimal(y.get(itemId))); + } + } + } + } + sameY2y(result, item, sumRule, SUM, sumDecimal, sameSumDecimal); + } + } + + private static void calculate4Avg(Map result, SalaryStatisticsItemPO item, List> nowDetail, List> lastDetail, List> sameDetail) { + SalaryStatisticsItemRuleDTO avgRule = JSON.parseObject(item.getAvgRule(), SalaryStatisticsItemRuleDTO.class); + if (avgRule == null || avgRule.getTotalValue() != 1) { + return; + } + BigDecimal avgDecimal = new BigDecimal(ZERO); + // 本期 + if (avgRule.getTotalValue() == 1) { + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] itemValues = item.getItemValue().split(COMMA); + for (String itemId : itemValues) { + for (Map x : nowDetail) { + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { + avgDecimal = avgDecimal.add(new BigDecimal(x.get(itemId))); + } + } + } + } + avgDecimal = avgDecimal.divide(new BigDecimal(CollectionUtils.isEmpty(nowDetail) ? 1 : nowDetail.size()), 2, RoundingMode.HALF_UP); + nowAndRatio(result, item, avgRule, AVG, avgDecimal); + } + // 上期 + if (avgRule.getM2mValue() == 1) { + BigDecimal lastAvgDecimal = new BigDecimal(ZERO); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : lastDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + lastAvgDecimal = lastAvgDecimal.add(new BigDecimal(y.get(itemId))); + } + } + } + } + lastAvgDecimal = lastAvgDecimal.divide(new BigDecimal(CollectionUtils.isEmpty(lastDetail) ? 1 : lastDetail.size()), 2, RoundingMode.HALF_UP); + lastM2m(result, item, avgRule, AVG, avgDecimal, lastAvgDecimal); + } + // 同期 + if (avgRule.getY2yValue() == 1) { + BigDecimal sameAvgDecimal = new BigDecimal(ZERO); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : sameDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + sameAvgDecimal = sameAvgDecimal.add(new BigDecimal(y.get(itemId))); + } + } + } + } + sameAvgDecimal = sameAvgDecimal.divide(new BigDecimal(CollectionUtils.isEmpty(sameDetail) ? 1 : sameDetail.size()), 2, RoundingMode.HALF_UP); + sameY2y(result, item, avgRule, AVG, avgDecimal, sameAvgDecimal); + } + } + + private static void calculate4Max(Map result, SalaryStatisticsItemPO item, List> nowDetail, List> lastDetail, List> sameDetail) { + SalaryStatisticsItemRuleDTO maxRule = JSON.parseObject(item.getMaxRule(), SalaryStatisticsItemRuleDTO.class); + if (maxRule == null || maxRule.getTotalValue() != 1) { + return; + } + BigDecimal maxDecimal = new BigDecimal(ZERO); + // 本期 + if (maxRule.getTotalValue() == 1) { + List decimalList = Lists.newArrayList(); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] itemValues = item.getItemValue().split(COMMA); + for (String itemId : itemValues) { + for (Map x : nowDetail) { + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { + decimalList.add(new BigDecimal(x.get(itemId))); + } + } + } + } + // 本期合计 + maxDecimal = max(decimalList); + nowAndRatio(result, item, maxRule, MAX, maxDecimal); + } + // 上期 + if (maxRule.getM2mValue() == 1) { + List decimalList = Lists.newArrayList(); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : lastDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + decimalList.add(new BigDecimal(y.get(itemId))); + } + } + } + } + BigDecimal lastMaxDecimal = max(decimalList); + lastM2m(result, item, maxRule, MAX, maxDecimal, lastMaxDecimal); + } + // 同期 + if (maxRule.getY2yValue() == 1) { + List decimalList = Lists.newArrayList(); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : sameDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + decimalList.add(new BigDecimal(y.get(itemId))); + } + } + } + } + BigDecimal sameMaxDecimal = max(decimalList); + sameY2y(result, item, maxRule, MAX, maxDecimal, sameMaxDecimal); + } + } + + private static void calculate4Min(Map result, SalaryStatisticsItemPO item, List> nowDetail, List> lastDetail, List> sameDetail) { + SalaryStatisticsItemRuleDTO minRule = JSON.parseObject(item.getMinRule(), SalaryStatisticsItemRuleDTO.class); + if (minRule == null || minRule.getTotalValue() != 1) { + return; + } + BigDecimal minDecimal = new BigDecimal(ZERO); + // 本期 + if (minRule.getTotalValue() == 1) { + List decimalList = Lists.newArrayList(); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] itemValues = item.getItemValue().split(COMMA); + for (String itemId : itemValues) { + for (Map x : nowDetail) { + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { + decimalList.add(new BigDecimal(x.get(itemId))); + } + } + } + } + // 本期合计 + minDecimal = min(decimalList); + nowAndRatio(result, item, minRule, MIN, minDecimal); + } + // 上期 + if (minRule.getM2mValue() == 1) { + List decimalList = Lists.newArrayList(); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : lastDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + decimalList.add(new BigDecimal(y.get(itemId))); + } + } + } + } + BigDecimal lastMinDecimal = min(decimalList); + lastM2m(result, item, minRule, MIN, minDecimal, lastMinDecimal); + } + // 同期 + if (minRule.getY2yValue() == 1) { + List decimalList = Lists.newArrayList(); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : sameDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + decimalList.add(new BigDecimal(y.get(itemId))); + } + } + } + } + BigDecimal sameMinDecimal = min(decimalList); + sameY2y(result, item, minRule, MIN, minDecimal, sameMinDecimal); + } + } + + private static void calculate4Median(Map result, SalaryStatisticsItemPO item, List> nowDetail, List> lastDetail, List> sameDetail) { + SalaryStatisticsItemRuleDTO medianRule = JSON.parseObject(item.getMedianRule(), SalaryStatisticsItemRuleDTO.class); + if (medianRule == null || medianRule.getTotalValue() != 1) { + return; + } + BigDecimal medianDecimal = new BigDecimal(ZERO); + // 本期 + if (medianRule.getTotalValue() == 1) { + List decimalList = Lists.newArrayList(); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] itemValues = item.getItemValue().split(COMMA); + for (String itemId : itemValues) { + for (Map x : nowDetail) { + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { + decimalList.add(new BigDecimal(x.get(itemId))); + } + } + } + } + // 本期合计 + medianDecimal = median(decimalList); + nowAndRatio(result, item, medianRule, MEDIAN, medianDecimal); + } + // 上期 + if (medianRule.getM2mValue() == 1) { + List decimalList = Lists.newArrayList(); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : lastDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + decimalList.add(new BigDecimal(y.get(itemId))); + } + } + } + } + BigDecimal lastMedianDecimal = median(decimalList); + lastM2m(result, item, medianRule, MEDIAN, medianDecimal, lastMedianDecimal); + } + // 同期 + if (medianRule.getY2yValue() == 1) { + List decimalList = Lists.newArrayList(); + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] lastItemValues = item.getItemValue().split(COMMA); + for (String itemId : lastItemValues) { + for (Map y : sameDetail) { + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { + decimalList.add(new BigDecimal(y.get(itemId))); + } + } + } + } + BigDecimal sameMedianDecimal = median(decimalList); + sameY2y(result, item, medianRule, MEDIAN, medianDecimal, sameMedianDecimal); + } + } + + /** + * 本期和占比赋值 + * + * @param result + * @param item + * @param rule + * @param ruleKey + * @param sumDecimal + */ + private static void nowAndRatio(Map result, SalaryStatisticsItemPO item, SalaryStatisticsItemRuleDTO rule, String ruleKey, BigDecimal sumDecimal) { + String keyPrefix = item.getId().toString() + UD +ruleKey; + // 本期合计 + result.put(keyPrefix + K_NOW, ReportDataUtil.thousandthConvert(unitTypeConvert(sumDecimal, item.getUnitType()))); + // 占比:和本期合计一样的值,便于计算 + if (rule.getRatioValue() == 1) { + result.put(keyPrefix + K_RATIO, result.get(keyPrefix + K_NOW)); + } + } + + /** + * 环比赋值 + * + * @param result + * @param item + * @param rule + * @param ruleKey + * @param nowValue + * @param lastValue + */ + private static void lastM2m(Map result, SalaryStatisticsItemPO item, SalaryStatisticsItemRuleDTO rule, String ruleKey, BigDecimal nowValue, BigDecimal lastValue) { + String keyPrefix = item.getId().toString() + UD +ruleKey; + // 上期合计 + result.put(keyPrefix + P_LAST, ReportDataUtil.thousandthConvert(unitTypeConvert(lastValue, item.getUnitType()))); + // 合计环比差值 + result.put(keyPrefix + P_M2M_D_VALUE, ReportDataUtil.thousandthConvert(unitTypeConvert(nowValue.subtract(lastValue), item.getUnitType()))); + // 合计环比增幅 + result.put(keyPrefix + P_M2M_INCREASE, radio(nowValue, lastValue)); + // 合计环比上限 + result.put(keyPrefix + P_M2M_UPPER_LIMIT, rule.getM2mUpperLimit().toString() + PERCENT); + // 合计环比下限 + result.put(keyPrefix + P_M2M_LOWER_LIMIT, rule.getM2mLowerLimit().toString() + PERCENT); + } + + /** + * 同比赋值 + * + * @param result + * @param item + * @param rule + * @param ruleKey + * @param nowValue + * @param sameValue + */ + private static void sameY2y(Map result, SalaryStatisticsItemPO item, SalaryStatisticsItemRuleDTO rule, String ruleKey, BigDecimal nowValue, BigDecimal sameValue) { + String keyPrefix = item.getId().toString() + UD +ruleKey; + // 同期合计 + result.put(keyPrefix + P_SAME, ReportDataUtil.thousandthConvert(unitTypeConvert(sameValue, item.getUnitType()))); + // 合计同比差值 + result.put(keyPrefix + P_Y2Y_D_VALUE, ReportDataUtil.thousandthConvert(unitTypeConvert(nowValue.subtract(sameValue), item.getUnitType()))); + // 合计同比增幅 + result.put(keyPrefix + P_Y2Y_INCREASE, radio(nowValue, sameValue)); + // 合计同比上限 + result.put(keyPrefix + P_Y2Y_UPPER_LIMIT, rule.getY2yUpperLimit() == null ? "" : rule.getY2yUpperLimit().toString() + PERCENT); + // 合计同比下限 + result.put(keyPrefix + P_Y2Y_LOWER_LIMIT, rule.getY2yLowerLimit() == null ? "" : rule.getY2yLowerLimit().toString() + PERCENT); + } + + /** + * 最大值 + * + * @param list + * @return + */ + public static BigDecimal max(List list) { + if(CollectionUtils.isEmpty(list)) return new BigDecimal(D_ZERO); +// BigDecimal max = Collections.max(list); + + BigDecimal sum = list.get(0); + for (int i = 1; i < list.size(); i++) { + sum = sum.max(list.get(i)); + } + return sum; + } + + /** + * 最小值 + * + * @param list + * @return + */ + public static BigDecimal min(List list) { + if(CollectionUtils.isEmpty(list)) return new BigDecimal(D_ZERO); +// BigDecimal min = Collections.min(list); + BigDecimal sum = list.get(0); + for (int i = 1; i < list.size(); i++) { + sum = sum.min(list.get(i)); + } + return sum; + } + + /** + * 中位数 + * + * @param list + * @return + */ + public static BigDecimal median(List list) { + if(CollectionUtils.isEmpty(list)) return new BigDecimal(D_ZERO); + Collections.sort(list); + int size = list.size(); + if (size % 2 == 1) { + return list.get((size - 1) / 2); + } else { + return (list.get(size/2-1).add(list.get(size/2))).divide(new BigDecimal(2), 2, RoundingMode.HALF_UP); + } + } + + public static List> po2map(List list, Map> salaryAcctResultValueMap) { + return list.stream().map(sa -> salaryAcctResultValueMap.get(sa.getId())).collect(Collectors.toList()); + } + + public static String unitTypeConvert(BigDecimal bigDecimal, Integer unitType) { + switch (unitType) { + case 3: + return bigDecimal.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP).toPlainString(); + case 4: + return bigDecimal.divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).toPlainString(); + default: + return bigDecimal.toPlainString(); + } + } + + public static String radio(BigDecimal origin, BigDecimal last) { + if (ReportDataUtil.zeroJudge(last)) { + return "--"; + } + BigDecimal subtract = origin.subtract(last).multiply(HUNDRED); + BigDecimal divide = subtract.divide(last, 2, RoundingMode.HALF_UP); + return divide.toPlainString() + PERCENT; + } + + /** + * 定量-组距式分组list分割 + * 说明: + * 1.如果是年:每个人的年份值在这个区间内;如果没有所属字段:各个字段值在区间内;如果有所属字敦:则该所属字段在区间内的数据 + * 2.区间内的话,就把id搞出来 + * 3.符合id的list筛选出来返回 + * @param groupSpacing + * @param groupBelong + * @param dimCode + * @param list + * @param yearMap + * @param salaryAcctResultValueMap + * @param salaryStatisticsItemList + * @return + */ + public static List listAcctEmpByRationGroupSpacing(SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing groupSpacing, String groupBelong, String dimCode, List list, Map yearMap, Map> salaryAcctResultValueMap, List salaryStatisticsItemList) { + Set ids = Sets.newHashSet(); + + for (SalaryAcctEmployeePO sa : list) { + salaryStatisticsItemList.forEach(item -> { + BigDecimal sumDecimal = handle4GroupValue(groupBelong, dimCode, sa, yearMap, salaryAcctResultValueMap, item); + boolean isRight = ((!groupSpacing.isIncludeStart() && sumDecimal.compareTo(new BigDecimal(groupSpacing.getStartValue())) > 0) + || (groupSpacing.isIncludeStart() && sumDecimal.compareTo(new BigDecimal(groupSpacing.getStartValue())) >= 0)) + && ((!groupSpacing.isIncludeEnd() && sumDecimal.compareTo(new BigDecimal(groupSpacing.getEndValue())) < 0) + || (groupSpacing.isIncludeEnd() && sumDecimal.compareTo(new BigDecimal(groupSpacing.getEndValue())) <= 0)); + if (isRight) { + ids.add(sa.getId()); + } + }); + } + + return list.stream().filter(i -> ids.contains(i.getId())).collect(Collectors.toList()); + } + + private static BigDecimal handle4GroupValue(String groupBelong, String dimCode, SalaryAcctEmployeePO sa, Map yearMap, Map> salaryAcctResultValueMap, SalaryStatisticsItemPO item) { + BigDecimal sumDecimal = new BigDecimal(ZERO); + if (G_NO_ITEM.equals(groupBelong)) { + if (StringUtils.isNotEmpty(item.getItemValue())) { + String[] itemValues = item.getItemValue().split(COMMA); + for (String itemId : itemValues) { + if (salaryAcctResultValueMap.get(sa.getId()) != null && StringUtils.isNotBlank(salaryAcctResultValueMap.get(sa.getId()).get(itemId))) { + sumDecimal = sumDecimal.add(new BigDecimal(salaryAcctResultValueMap.get(sa.getId()).get(itemId))); + } + } + } + } else if (G_ITEM.equals(groupBelong)) { + if (salaryAcctResultValueMap.get(sa.getId()) != null && StringUtils.isNotBlank(salaryAcctResultValueMap.get(sa.getId()).get(dimCode))) { + sumDecimal = sumDecimal.add(new BigDecimal(salaryAcctResultValueMap.get(sa.getId()).get(dimCode))); + } + } else if (G_YEAR.equals(groupBelong)) { + if (StringUtils.isNotBlank(yearMap.get(sa.getEmployeeId()))) { + sumDecimal = new BigDecimal(yearMap.get(sa.getEmployeeId())); + } + } + return sumDecimal; + } + + /** + * 定量-单项式分组list分割 + * + * @param groupIndividual + * @param groupBelong + * @param dimCode + * @param list + * @param yearMap + * @param salaryAcctResultValueMap + * @param salaryStatisticsItemList + * @return + */ + public static List listAcctEmpByRationGroupIndividual(SalaryStatisticsDimensionSaveParam.Setting4RationGroupIndividual groupIndividual, String groupBelong, String dimCode, List list, Map yearMap, Map> salaryAcctResultValueMap, List salaryStatisticsItemList) { + Set ids = Sets.newHashSet(); + + for (SalaryAcctEmployeePO sa : list) { + salaryStatisticsItemList.forEach(item -> { + BigDecimal sumDecimal = handle4GroupValue(groupBelong, dimCode, sa, yearMap, salaryAcctResultValueMap, item); + + if (sumDecimal.compareTo(new BigDecimal(groupIndividual.getValue())) == 0) { + ids.add(sa.getId()); + } + }); + } + + return list.stream().filter(i -> ids.contains(i.getId())).collect(Collectors.toList()); + } + + public static Map checkLoad(List salaryStatisticsItemList) { + boolean isNow = false; + boolean isLast = false; + boolean isSame = false; + for (SalaryStatisticsItemPO item : salaryStatisticsItemList) { + SalaryStatisticsItemRuleDTO countRule = JSON.parseObject(item.getCountRule(), SalaryStatisticsItemRuleDTO.class); + SalaryStatisticsItemRuleDTO sumRule = JSON.parseObject(item.getSumRule(), SalaryStatisticsItemRuleDTO.class); + SalaryStatisticsItemRuleDTO avgRule = JSON.parseObject(item.getAvgRule(), SalaryStatisticsItemRuleDTO.class); + SalaryStatisticsItemRuleDTO maxRule = JSON.parseObject(item.getMaxRule(), SalaryStatisticsItemRuleDTO.class); + SalaryStatisticsItemRuleDTO minRule = JSON.parseObject(item.getMinRule(), SalaryStatisticsItemRuleDTO.class); + SalaryStatisticsItemRuleDTO medianRule = JSON.parseObject(item.getMedianRule(), SalaryStatisticsItemRuleDTO.class); + + if ((countRule != null && countRule.getTotalValue() == 1) || (sumRule != null && sumRule.getTotalValue() == 1) || (avgRule != null && avgRule.getTotalValue() == 1) || (maxRule != null && maxRule.getTotalValue() == 1) || (minRule != null && minRule.getTotalValue() == 1) || (medianRule != null && medianRule.getTotalValue() == 1)) { + isNow = true; + } + if ((countRule != null && countRule.getM2mValue() == 1) || (sumRule != null && sumRule.getM2mValue() == 1) || (avgRule != null && avgRule.getM2mValue() == 1) || (maxRule != null && maxRule.getM2mValue() == 1) || (minRule != null && minRule.getM2mValue() == 1) || (medianRule != null && medianRule.getM2mValue() == 1)) { + isLast = true; + } + if ((countRule != null && countRule.getY2yValue() == 1) || (sumRule != null && sumRule.getY2yValue() == 1) || (avgRule != null && avgRule.getY2yValue() == 1) || (maxRule != null && maxRule.getY2yValue() == 1) || (minRule != null && minRule.getY2yValue() == 1) || (medianRule != null && medianRule.getY2yValue() == 1)) { + isSame = true; + } + } + Map map = Maps.newHashMap(); + map.put("isNow", isNow); + map.put("isLast", isLast); + map.put("isSame", isSame); + return map; + } + + /** + * 构建合计 + * + * @param page + * @param salaryStatisticsItemList + * @param employeeId + * @param tenantKey + */ + public static Map buildTotal(PageInfo> page, List salaryStatisticsItemList, Long employeeId, String tenantKey) { + Map salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, k -> k.getId() + "-" + employeeId); + + List> records = page.getList(); + if (CollectionUtils.isNotEmpty(records)) { + Set keys = records.get(0).keySet(); + Map map = new HashMap<>(); + map.put("dimension", SalaryI18nUtil.getI18nLabel( 93278, "合计")); + Map itemPOMap = new HashMap<>(); + keys.forEach(key -> { + if (key.contains(COUNT+K_NOW) || key.contains(COUNT+K_LAST) || key.contains(COUNT+K_SAME) + || key.contains(SUM+K_NOW) || key.contains(SUM+K_LAST) || key.contains(SUM+K_SAME) + || key.contains(AVG+K_NOW) || key.contains(AVG+K_LAST) || key.contains(AVG+K_SAME) + || key.contains(MAX+K_NOW) || key.contains(MAX+K_LAST) || key.contains(MAX+K_SAME) + || key.contains(MIN+K_NOW) || key.contains(MIN+K_LAST) || key.contains(MIN+K_SAME) + || key.contains(MEDIAN+K_NOW) || key.contains(MEDIAN+K_LAST) || key.contains(MEDIAN+K_SAME)) { + String keyStr = key.split(UD)[0]; + SalaryStatisticsItemPO salaryStatisticsItem = salaryStatisticsItemMap.get(Long.valueOf(keyStr) + "-" + employeeId); + itemPOMap.put(salaryStatisticsItem.getId(), salaryStatisticsItem); + // 累加 + BigDecimal countNow = new BigDecimal(ZERO); + for (Map kv : records) { + String temp = String.valueOf(kv.get(key)).replace(COMMA, ""); + countNow = countNow.add(new BigDecimal(temp)); + } + map.put(key, ReportDataUtil.thousandthConvert(unitTypeConvert(countNow, UnitTypeEnum.YUAN.getItem()))); + } + // 有占比的话 + if (key.contains(K_RATIO)) { + map.put(key, "100%"); + } + }); + Set keySet = new HashSet<>(map.keySet()); + List ruleKeys = Arrays.asList(COUNT, SUM, AVG, MAX, MIN, MEDIAN); + String keyPrefix; + for (String key : keySet) { + if (key.equals("dimension") || key.contains(K_RATIO)) { + continue; + } + for (String rule : ruleKeys) { + String idStr = key.split(UD)[0]; + keyPrefix = idStr + UD + rule; + SalaryStatisticsItemPO salaryStatisticsItem = itemPOMap.get(Long.valueOf(idStr)); + String countNowValue = Optional.ofNullable(map.get(keyPrefix + K_NOW)).orElse(D_ZERO).toString().replace(COMMA, ""); + BigDecimal countNow = new BigDecimal(countNowValue); + String countLastValue = Optional.ofNullable(map.get(keyPrefix + K_LAST)).orElse(D_ZERO).toString().replace(COMMA, ""); + BigDecimal countLast = new BigDecimal(countLastValue); + map.put(keyPrefix + P_M2M_INCREASE, radio(countNow, countLast)); + map.put(keyPrefix + P_M2M_D_VALUE, ReportDataUtil.thousandthConvert(unitTypeConvert(countNow.subtract(countLast), UnitTypeEnum.YUAN.getItem()))); + map.put(keyPrefix + P_M2M_LOWER_LIMIT, ""); + map.put(keyPrefix + P_M2M_UPPER_LIMIT, ""); + String countSameValue = Optional.ofNullable(map.get(keyPrefix + K_SAME)).orElse(D_ZERO).toString().replace(COMMA, ""); + BigDecimal countSame = new BigDecimal(countSameValue); + map.put(keyPrefix + P_Y2Y_INCREASE, radio(countNow, countSame)); + map.put(keyPrefix + P_Y2Y_D_VALUE, ReportDataUtil.thousandthConvert(unitTypeConvert(countNow.subtract(countSame), UnitTypeEnum.YUAN.getItem()))); + map.put(keyPrefix + P_Y2Y_LOWER_LIMIT, ""); + map.put(keyPrefix + P_Y2Y_UPPER_LIMIT, ""); + } + } + // 占比计算 + for (Map record : records) { + keys.forEach(key -> { + if (key.contains(K_RATIO)) { + String total = String.valueOf(map.get(key.replace(K_RATIO, K_NOW))).replace(COMMA, ""); + String temp = String.valueOf(record.get(key)).replace(COMMA, ""); + record.put(key, total.equals(D_ZERO) ? D_ZERO + PERCENT : (new BigDecimal(temp).multiply(HUNDRED).divide(new BigDecimal(total), 2, RoundingMode.HALF_UP)).toPlainString() + PERCENT); + } + }); + } + return map; +// records.add(map); + } + return Maps.newHashMap(); + } + + /** + * 构建报表动态列 + * + * @param dimensionName + * @param salaryStatisticsItemList + * @param employeeId + * @param tenantKey + * @return + */ +// public static List buildReportColumns(String dimensionName, List salaryStatisticsItemList, Long employeeId, String tenantKey) { +// List result = new ArrayList<>(); +// result.add(new SubTableRankColumn(dimensionName, "dimension", "150", null, null, WeaAlignEnum.CENTER.getStringVal(), "left")); +// Map itemMap = salaryStatisticsItemList.stream().collect(Collectors.toMap(SalaryStatisticsItemPO::getId, Function.identity())); +// Map itemIdNameMap = salaryStatisticsItemList.stream().collect(LinkedHashMap::new, (map, item) -> map.put(item.getId(), item.getItemName()), LinkedHashMap::putAll); +// itemIdNameMap.forEach((k, v) -> { +// SubTableRankColumn weaTableColumn = new SubTableRankColumn(v, k.toString(), "300", null, null, WeaAlignEnum.CENTER.getStringVal()); +// SalaryStatisticsItemPO itemPO = itemMap.get(k); +// List children = new ArrayList<>(); +// // 1.合计规则children +// SalaryStatisticsItemRuleDTO countRule = JSON.parseObject(itemPO.getCountRule(), SalaryStatisticsItemRuleDTO.class); +// if (countRule != null && 1 == countRule.getTotalValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157127, "本周期(计数)"), k + UD + COUNT + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (countRule != null && 1 == countRule.getRatioValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174288, "本周期占比(计数)"), k + UD + COUNT + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (countRule != null && 1 == countRule.getM2mValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157128, "上周期(计数)"), k + UD + COUNT + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157129, "计数环比差值"), k + UD + COUNT + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157130, "计数环比增幅"), k + UD + COUNT + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (countRule != null && 1 == countRule.getY2yValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180672, "同比周期(计数)"), k + UD + COUNT + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174391, "计数同比差值"), k + UD + COUNT + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174392, "计数同比增幅"), k + UD + COUNT + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// // 2.求和规则children +// SalaryStatisticsItemRuleDTO totalRule = JSON.parseObject(itemPO.getSumRule(), SalaryStatisticsItemRuleDTO.class); +// if (totalRule != null && 1 == totalRule.getTotalValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157145, "本周期(求和)"), k + UD + SUM + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (totalRule != null && 1 == totalRule.getRatioValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174289, "本周期占比(求和)"), k + UD + SUM + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (totalRule != null && 1 == totalRule.getM2mValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157146, "上周期(求和)"), k + UD + SUM + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157147, "求和环比差值"), k + UD + SUM + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157148, "求和环比增幅"), k + UD + SUM + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (totalRule != null && 1 == totalRule.getY2yValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180673, "同比周期(求和)"), k + UD + SUM + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174388, "求和同比差值"), k + UD + SUM + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174389, "求和同比增幅"), k + UD + SUM + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// // 3.平均值规则children +// SalaryStatisticsItemRuleDTO avgRule = JSON.parseObject(itemPO.getAvgRule(), SalaryStatisticsItemRuleDTO.class); +// if (avgRule != null && 1 == avgRule.getTotalValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174258, "本周期(平均值)"), k + UD + AVG + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (avgRule != null && 1 == avgRule.getRatioValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174290, "本周期占比(平均值)"), k + UD + AVG + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (avgRule != null && 1 == avgRule.getM2mValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174257, "上周期(平均值)"), k + UD + AVG + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174256, "平均值环比差值"), k + UD + AVG + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174255, "平均值环比增幅"), k + UD + AVG + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (avgRule != null && 1 == avgRule.getY2yValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180674, "同比周期(平均值)"), k + UD + AVG + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174385, "平均值同比差值"), k + UD + AVG + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174386, "平均值同比增幅"), k + UD + AVG + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// // 4.最大值规则children +// SalaryStatisticsItemRuleDTO maxRule = JSON.parseObject(itemPO.getMaxRule(), SalaryStatisticsItemRuleDTO.class); +// if (maxRule != null && 1 == maxRule.getTotalValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174254, "本周期(最大值)"), k + UD + MAX + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (maxRule != null && 1 == maxRule.getRatioValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174291, "本周期占比(最大值)"), k + UD + MAX + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (maxRule != null && 1 == maxRule.getM2mValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174253, "上周期(最大值)"), k + UD + MAX + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174252, "最大值环比差值"), k + UD + MAX + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174251, "最大值环比增幅"), k + UD + MAX + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (maxRule != null && 1 == maxRule.getY2yValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180675, "同比周期(最大值)"), k + UD + MAX + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174382, "最大值同比差值"), k + UD + MAX + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174383, "最大值同比增幅"), k + UD + MAX + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// // 5.最小值规则children +// SalaryStatisticsItemRuleDTO minRule = JSON.parseObject(itemPO.getMinRule(), SalaryStatisticsItemRuleDTO.class); +// if (minRule != null && 1 == minRule.getTotalValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174250, "本周期(最小值)"), k + UD + MIN + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (minRule != null && 1 == minRule.getRatioValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174292, "本周期占比(最小值)"), k + UD + MIN + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (minRule != null && 1 == minRule.getM2mValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174249, "上周期(最小值)"), k + UD + MIN + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174248, "最小值环比差值"), k + UD + MIN + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174247, "最小值环比增幅"), k + UD + MIN + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (minRule != null && 1 == minRule.getY2yValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180676, "同比周期(最小值)"), k + UD + MIN + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174379, "最小值同比差值"), k + UD + MIN + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174380, "最小值同比增幅"), k + UD + MIN + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// // 6.中位数规则children +// SalaryStatisticsItemRuleDTO medianRule = JSON.parseObject(itemPO.getMedianRule(), SalaryStatisticsItemRuleDTO.class); +// if (medianRule != null && 1 == medianRule.getTotalValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174246, "本周期(中位数)"),k + UD + MEDIAN + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (medianRule != null && 1 == medianRule.getRatioValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174293, "本周期占比(中位数)"), k + UD + MEDIAN + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (medianRule != null && 1 == medianRule.getM2mValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174245, "上周期(中位数)"), k + UD + MEDIAN + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174244, "中位数环比差值"), k + UD + MEDIAN + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174243, "中位数环比增幅"), k + UD + MEDIAN + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// if (medianRule != null && 1 == medianRule.getY2yValue()) { +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180677, "同比周期(中位数)"), k + UD + MEDIAN + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174376, "中位数同比差值"), k + UD + MEDIAN + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174377, "中位数同比增幅"), k + UD + MEDIAN + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); +// } +// weaTableColumn.setChildren(children); +// result.add(weaTableColumn); +// }); +// return result; +// } + +// public static ExportCommonParam buildExportParam(String dimName, List weaTableColumns, List> records) { +// List columns = com.google.common.collect.Lists.newArrayList(); +// weaTableColumns.forEach(column -> { +// SubTableRankColumn subTableRankColumn = (SubTableRankColumn) column; +// ExportColumn exportColumn = new ExportColumn(); +// exportColumn.setKeyIndex(subTableRankColumn.getDataIndex()); +// exportColumn.setValue(subTableRankColumn.getTitle()); +// if (CollectionUtils.isNotEmpty(subTableRankColumn.getChildren())) { +// List subColumns = com.google.common.collect.Lists.newArrayList(); +// for (SubTableRankColumn sub : subTableRankColumn.getChildren()) { +// ExportColumn subColumn = new ExportColumn(); +// subColumn.setKeyIndex(sub.getDataIndex()); +// subColumn.setValue(sub.getTitle()); +// subColumns.add(subColumn); +// } +// exportColumn.setChildren(subColumns); +// } +// columns.add(exportColumn); +// }); +// ExportCommonParam exportParam = new ExportCommonParam(); +// exportParam.setDimensionName(dimName); +// exportParam.setColumns(columns); +// exportParam.setData(records); +// +// return exportParam; +// } +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java new file mode 100644 index 000000000..f2161262d --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java @@ -0,0 +1,33 @@ +package com.engine.salary.report.entity.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 薪酬统计维度表单 + * @Author: wangxiangzhong + * @Date: 2022/12/15 14:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计维度表单") +public class SalaryStatisticsDimensionFormDTO { + + @ApiModelProperty("主键id") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("统计维度基础表单") + private Object baseForm; + + @ApiModelProperty("分组设置") + private Object groupSetting; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java new file mode 100644 index 000000000..821d459c0 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java @@ -0,0 +1,44 @@ +package com.engine.salary.report.entity.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 薪酬统计维度列表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计维度列表") +public class SalaryStatisticsDimensionListDTO { + + @ApiModelProperty("主键id") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("统计维度") + private String dimName; + + @ApiModelProperty("描述") + private String remark; + + @ApiModelProperty("维度类型") + private String dimType; + + @ApiModelProperty("是否默认") + @JsonIgnore + private Integer isDefault; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java new file mode 100644 index 000000000..a270fa70c --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java @@ -0,0 +1,56 @@ +package com.engine.salary.report.entity.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: 分析图数据展示范围设置 + * @Author: wangxiangzhong + * @Date: 2023/1/31 14:48 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"报表查询入参") +public class SalaryStatisticsEchartsDTO { + @ApiModelProperty("分析图配置表id") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("报表id") + @JsonSerialize(using = ToStringSerializer.class) + private Long reportId; + + @ApiModelProperty("报表类型") + private Integer chartsType; + + @ApiModelProperty("统计项目") + private List itemValues; + + @ApiModelProperty("统计列") + private String itemColValue; + + @ApiModelProperty("维度统计范围") + private Integer dimensionRange; + + @ApiModelProperty("排序统计项目") + private String itemSortValue; + + @ApiModelProperty("排序列") + private String itemColSortValue; + + @ApiModelProperty("排序类型") + private Integer sortType; + + @ApiModelProperty("排序取数值") + private Integer sortNum; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java new file mode 100644 index 000000000..29e96341a --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java @@ -0,0 +1,35 @@ +package com.engine.salary.report.entity.dto; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: 薪酬统计员工明细核算结果 + * @Author: wangxiangzhong + * @Date: 2022/12/16 17:17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计员工明细核算结果") +public class SalaryStatisticsEmployeeDetailResultDTO { + + @ApiModelProperty("核算人员") + private List salaryAcctEmployeeList; + + @ApiModelProperty("核算结果") + private List salaryAcctResultValueList; + + @ApiModelProperty("薪资项目") + private List salaryItemList; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java new file mode 100644 index 000000000..60b8cdc91 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java @@ -0,0 +1,51 @@ +package com.engine.salary.report.entity.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 薪酬统计员工列表 + * @Author: wangxiangzhong + * @Date: 2022/12/16 17:17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计员工列表") +public class SalaryStatisticsEmployeeListDTO { + + @ApiModelProperty("主键id") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("姓名") + private String name; + + @ApiModelProperty("分部") + private String subCompany; + + @ApiModelProperty("部门") + private String department; + + @ApiModelProperty("岗位") + private String position; + + @ApiModelProperty("员工状态") + private String status; + + @ApiModelProperty("工号") + private String jobNum; + + @ApiModelProperty("证件号码") + private String idNo; + + @ApiModelProperty("人员类型") + private Integer employeeType; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java new file mode 100644 index 000000000..56d397f42 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java @@ -0,0 +1,35 @@ +package com.engine.salary.report.entity.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +/** + * @Description: 薪酬统计自定义统计项表单 + * @Author: wangxiangzhong + * @Date: 2022/12/15 14:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计自定义统计项表单") +public class SalaryStatisticsItemFormDTO { + + @ApiModelProperty("主键id") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("基础表单") + private Object baseForm; + + @ApiModelProperty("统计规则") + private Map ruleData; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java new file mode 100644 index 000000000..602d2a361 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java @@ -0,0 +1,47 @@ +package com.engine.salary.report.entity.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @Description: 薪酬统计报表自定义统计项目规则 + * @Author: wangxiangzhong + * @Date: 2022/12/29 16:35 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计报表自定义统计项目规则") +public class SalaryStatisticsItemRuleDTO { + + @ApiModelProperty("是否有合计列") + private Integer totalValue; + + @ApiModelProperty("是否有占比列") + private Integer ratioValue; + + @ApiModelProperty("是否有环比列") + private Integer m2mValue; + + @ApiModelProperty("合计环比上限") + private BigDecimal m2mUpperLimit; + + @ApiModelProperty("合计环比下限") + private BigDecimal m2mLowerLimit; + + @ApiModelProperty("是否有同比列") + private Integer y2yValue; + + @ApiModelProperty("合计同比上限") + private BigDecimal y2yUpperLimit; + + @ApiModelProperty("合计同比下限") + private BigDecimal y2yLowerLimit; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java new file mode 100644 index 000000000..614182496 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java @@ -0,0 +1,46 @@ +package com.engine.salary.report.entity.dto; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: 薪酬统计报表数据 + * @Author: wangxiangzhong + * @Date: 2022/12/15 14:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计报表数据") +public class SalaryStatisticsReportDataDTO { + + @ApiModelProperty("本期数据") + private List list; + + @ApiModelProperty("上期数据") + private List lastList; + + @ApiModelProperty("同期数据") + private List sameList; + + @ApiModelProperty("统计项目") + private List salaryStatisticsItemList; + + @ApiModelProperty("当前登录人id") + @JsonSerialize(using = ToStringSerializer.class) + private Long employeeId; + + @ApiModelProperty("租户key") + private String tenantKey; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java new file mode 100644 index 000000000..dd8fbff31 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java @@ -0,0 +1,31 @@ +package com.engine.salary.report.entity.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: 薪酬统计报表表单 + * @Author: wangxiangzhong + * @Date: 2022/12/15 14:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计报表表单") +public class SalaryStatisticsReportFormDTO { + + @ApiModelProperty("报表名称") + private String reportName; + + @ApiModelProperty("统计维度") + private String dimension; + + private List statsDimOptions; +} diff --git a/src/com/engine/salary/report/entity/dto/SubEmployeeTableDTO.java b/src/com/engine/salary/report/entity/dto/SubEmployeeTableDTO.java new file mode 100644 index 000000000..2780664b5 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SubEmployeeTableDTO.java @@ -0,0 +1,41 @@ +package com.engine.salary.report.entity.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/8 + * @Version: v1.0 + */ +@Data +@Accessors(chain = true) +//人员信息过滤中间类") +public class SubEmployeeTableDTO implements Serializable { + + private static final long serialVersionUID = -7204043277857506702L; + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + private String name; + + private String subCompany; + + private String department; + + private String position; + + private String status; + + private String idNo; + + private String jobNum; + + private Integer employeeType; +} diff --git a/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java b/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java new file mode 100644 index 000000000..ee6eab45e --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java @@ -0,0 +1,54 @@ +package com.engine.salary.report.entity.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2023/1/12 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"报表查询入参") +public class SubTableChartsDTO { + + @ApiModelProperty("分析图配置表id") + private Long id; + + @ApiModelProperty("报表id") + private Long tableId; + + @ApiModelProperty("报表类型") + private Integer chartsType; + + @ApiModelProperty("统计项目") + private List itemValues; + + @ApiModelProperty("统计列") + private String itemColValue; + + @ApiModelProperty("维度统计范围") + private Integer dimensionRange; + + @ApiModelProperty("排序统计项目") + private String itemSortValue; + + @ApiModelProperty("排序列") + private String itemColSortValue; + + @ApiModelProperty("排序类型") + private Integer sortType; + + @ApiModelProperty("排序取数值") + private Integer sortNum; +} diff --git a/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java b/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java new file mode 100644 index 000000000..4fa6db410 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java @@ -0,0 +1,31 @@ +package com.engine.salary.report.entity.dto; + +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/18 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"管理员/总管理员查看个税扣缴义务人") +public class TaxAgentViewDTO { + + @ApiModelProperty("是否能够查看操作全部个税扣缴义务人") + private Boolean isEnableAll; + + @ApiModelProperty("可以查看操作的个税扣缴义务人列表") + private List taxAgentList; +} diff --git a/src/com/engine/salary/report/entity/param/BaseQueryParam.java b/src/com/engine/salary/report/entity/param/BaseQueryParam.java new file mode 100644 index 000000000..463da7911 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/BaseQueryParam.java @@ -0,0 +1,28 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 分页参数 + * @Author: zhangheng + * @Date: 2022/12/06 17:48 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +//"分页参数") +public class BaseQueryParam { + + @ApiModelProperty("当前页码") + private Integer current = 1; + + @ApiModelProperty("每页数据条数") + private Integer pageSize = 10; + + @ApiModelProperty("总条数") + private Integer total = 0; +} diff --git a/src/com/engine/salary/report/entity/param/ExportColumn.java b/src/com/engine/salary/report/entity/param/ExportColumn.java new file mode 100644 index 000000000..edecda3e0 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/ExportColumn.java @@ -0,0 +1,27 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/9 + * @Version: v1.0 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +//"表头") +public class ExportColumn { + + private String keyIndex; + + private String value; + + private List children; +} diff --git a/src/com/engine/salary/report/entity/param/ExportCommonParam.java b/src/com/engine/salary/report/entity/param/ExportCommonParam.java new file mode 100644 index 000000000..9c8c31ea6 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/ExportCommonParam.java @@ -0,0 +1,41 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/9 + * @Version: v1.0 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +//"通用层叠表导出") +public class ExportCommonParam { + + @ApiModelProperty("columns") + private List columns; + + @ApiModelProperty("data") + private List> data; + + @ApiModelProperty("excel名称") + private String sheetName; + + @ApiModelProperty("维度名称") + private String dimensionName; + + @ApiModelProperty("操作员") + private String userName; + + @ApiModelProperty("加密") + private String sharePassword; +} diff --git a/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java new file mode 100644 index 000000000..52e8cbd6c --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java @@ -0,0 +1,33 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.YearMonth; +import java.util.List; + +/** + * @Description: 薪酬统计员工明细查询参数 + * @Author: wangxiangzhong + * @Date: 2022/12/16 16:44 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪资核算员工查询参数") +public class SalaryAcctEmployeeQueryParam { + + @ApiModelProperty("关键字") + private String keyword; + + @ApiModelProperty("年份") + private Integer year; + + @ApiModelProperty("薪资所属月") + private List salaryMonth; +} \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java new file mode 100644 index 000000000..6633c236a --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java @@ -0,0 +1,44 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.Collection; + +/** + * @description: 人员查询条件 + * @author: xiajun + * @modified By: xiajun + * @date: 2022/5/10 15:12 + * @version:v1.0 + */ +@Data +@Accessors(chain = true) +public class SalaryEmployeeQueryParam { + + @ApiModelProperty("人员名称") + private String usernameLike; + + @ApiModelProperty("部门") + private Collection departmentIds; + + @ApiModelProperty("岗位") + private Collection positionIds; + + @ApiModelProperty("状态") + private String personnelStatus; + + @ApiModelProperty("工号") + private String jobNumLike; + + public boolean isEmpty(){ + return StringUtils.isEmpty(usernameLike) + && CollectionUtils.isEmpty(departmentIds) + && CollectionUtils.isEmpty(positionIds) + && StringUtils.isEmpty(personnelStatus) + && StringUtils.isEmpty(jobNumLike); + } +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java new file mode 100644 index 000000000..39b59626d --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java @@ -0,0 +1,25 @@ +package com.engine.salary.report.entity.param; + +import com.engine.salary.common.BaseQueryParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 薪酬统计维度查询参数 + * @Author: wangxiangzhong + * @Date: 2022/12/15 11:45 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计维度查询参数") +public class SalaryStatisticsDimensionQueryParam extends BaseQueryParam { + + @ApiModelProperty("名称") + private String dimName; +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java new file mode 100644 index 000000000..97b49b7b0 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java @@ -0,0 +1,130 @@ +package com.engine.salary.report.entity.param; + +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.report.enums.SalaryStatisticsDimensionTypeEnum; +import com.engine.salary.util.SalaryI18nUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; +import java.util.Objects; + +/** + * @Description: 薪酬统计维度保存参数 + * @Author: wangxiangzhong + * @Date: 2022/12/16 9:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计维度保存参数") +public class SalaryStatisticsDimensionSaveParam { + + @ApiModelProperty("薪酬统计维度主键id") + private Long id; + + @ApiModelProperty("薪酬统计维度类型") + private SalaryStatisticsDimensionTypeEnum dimType; + + @ApiModelProperty("薪酬统计维度名称") + private String dimName; + + @ApiModelProperty("薪酬统计维度编码-》用于组距和单项式的所属字段") + private String dimCode; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("薪酬统计维度定性设置保存参数") + private Setting4Qualitative setting4Qualitative; + + @ApiModelProperty("薪酬统计维度定量-组距式分组设置保存参数") + private List setting4RationGroupSpacing; + + @ApiModelProperty("薪酬统计维度定量-单项式分组设置保存参数") + private List setting4RationGroupIndividual; + + public static void checkParam(SalaryStatisticsDimensionSaveParam saveParam) { + if (StringUtils.isEmpty(saveParam.getDimName())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161289, "统计维度名称必填")); + } + saveParam.setDimName(saveParam.getDimName().trim()); + if (Objects.isNull(saveParam.getDimType())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161290, "统计维度类型必传")); + } + if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.equals(saveParam.getDimType())) { + if (Objects.isNull(saveParam.getSetting4Qualitative())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161291, "统计维度必选")); + } + if (Objects.isNull(saveParam.getSetting4Qualitative().getId())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161292, "统计维度关联参数错误")); + } + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.equals(saveParam.getDimType())) { + if (CollectionUtils.isEmpty(saveParam.getSetting4RationGroupSpacing())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161293, "分组设置不能为空")); + } + saveParam.getSetting4RationGroupSpacing().forEach(s -> { + if (Objects.isNull(s.getId()) || StringUtils.isEmpty(s.getStartValue()) || StringUtils.isEmpty(s.getEndValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161294, "分组设置参数错误")); + } + }); + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.equals(saveParam.getDimType())) { + if (CollectionUtils.isEmpty(saveParam.getSetting4RationGroupIndividual())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161293, "分组设置不能为空")); + } + saveParam.getSetting4RationGroupIndividual().forEach(s -> { + if (Objects.isNull(s.getId()) || StringUtils.isEmpty(s.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161294, "分组设置参数错误")); + } + }); + } + } + + @Data + //"薪酬统计维度定性设置保存参数") + public static class Setting4Qualitative { + + @ApiModelProperty("关联id") + private String id; + + @ApiModelProperty("统计维度名称") + private String name; + } + + @Data + //"薪酬统计维度定量-组距式分组设置保存参数") + public static class Setting4RationGroupSpacing { + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("起始是否包含") + private boolean includeStart; + + @ApiModelProperty("起始值") + private String startValue; + + @ApiModelProperty("结束是否包含") + private boolean includeEnd; + + @ApiModelProperty("结束值") + private String endValue; + } + + @Data + //"薪酬统计维度定量-单项式分组设置保存参数") + public static class Setting4RationGroupIndividual { + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("值") + private String value; + } +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java new file mode 100644 index 000000000..c7ac8633f --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java @@ -0,0 +1,42 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.YearMonth; +import java.util.List; + +/** + * @Description: 薪酬统计员工详情查询参数 + * @Author: wangxiangzhong + * @Date: 2022/12/16 16:44 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计员工详情查询参数") +public class SalaryStatisticsEmployeeDetailQueryParam extends BaseQueryParam { + + @ApiModelProperty("主键id") + private List ids; + + @ApiModelProperty("人员表的主键id") + private Long employeeId; + + @ApiModelProperty("收入所得类型") + private Integer incomeCategory; + + @ApiModelProperty("个税扣缴义务人") + private Long taxAgentId; + + @ApiModelProperty("年份") + private Integer year; + + @ApiModelProperty("薪资所属月") + private List salaryMonth; +} \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java new file mode 100644 index 000000000..6c27ff099 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java @@ -0,0 +1,37 @@ +package com.engine.salary.report.entity.param; + +import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.YearMonth; +import java.util.List; + +/** + * @Description: 薪酬统计员工明细查询参数 + * @Author: wangxiangzhong + * @Date: 2022/12/16 16:44 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计员工明细查询参数") +public class SalaryStatisticsEmployeeQueryParam extends BaseQueryParam { + + @ApiModelProperty("关键字") + private String keyword; + + @ApiModelProperty("年份") + private Integer year; + + @ApiModelProperty("薪资所属月") + private List salaryMonth; + + @ApiModelProperty("人员类型,ORGANIZATION:内部人员 |EXT_EMPLOYEE:外部人员") + private EmployeeTypeEnum employeeType; +} \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java new file mode 100644 index 000000000..b4743e67d --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java @@ -0,0 +1,56 @@ +package com.engine.salary.report.entity.param; + +import com.engine.salary.report.entity.dto.SalaryStatisticsItemRuleDTO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: 薪酬统计报表自定义统计项目保存参数 + * @Author: wangxiangzhong + * @Date: 2022/12/21 9:42 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计报表自定义统计项目保存参数") +public class SalaryStatisticsItemSaveParam { + @ApiModelProperty("统计项目id") + private Long id; + + @ApiModelProperty("报表id") + private Long statReportId; + + @ApiModelProperty("统计项目") + private List itemValue; + + @ApiModelProperty("统计项名称") + private String itemName; + + @ApiModelProperty("计数规则") + private SalaryStatisticsItemRuleDTO countRule; + + @ApiModelProperty("求和规则") + private SalaryStatisticsItemRuleDTO sumRule; + + @ApiModelProperty("平均值规则") + private SalaryStatisticsItemRuleDTO avgRule; + + @ApiModelProperty("最大值规则") + private SalaryStatisticsItemRuleDTO maxRule; + + @ApiModelProperty("最小值规则") + private SalaryStatisticsItemRuleDTO minRule; + + @ApiModelProperty("中位数规则") + private SalaryStatisticsItemRuleDTO medianRule; + + @ApiModelProperty("统计单位") + private Integer unitType; +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java new file mode 100644 index 000000000..194edb78c --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -0,0 +1,81 @@ +package com.engine.salary.report.entity.param; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.List; + +/** + * @Description: 薪酬统计报表数据查询参数 + * @Author: wangxiangzhong + * @Date: 2022/12/16 9:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计报表数据查询参数") +public class SalaryStatisticsReportDataQueryParam extends BaseQueryParam { + @ApiModelProperty("报表id") + private Long id; + + @ApiModelProperty("统计维度") + private Long dimensionId; + + @JsonIgnore + @ApiModelProperty("薪资所属月-开始月") + private String salaryStartMonth; + + @JsonIgnore + @ApiModelProperty("薪资所属月-终止月") + private String salaryEndMonth; + + @JsonIgnore + @ApiModelProperty("个税扣缴义务人配置") + private List taxAgent; + + @JsonIgnore + @ApiModelProperty("收入所得项目配置") + private List incomeCategory; + + @JsonIgnore + @ApiModelProperty("分部配置") + private List subCompany; + + @JsonIgnore + @ApiModelProperty("部门配置") + private List depart; + + @JsonIgnore + @ApiModelProperty("职级配置") + private List grade; + + @JsonIgnore + @ApiModelProperty("岗位配置") + private List position; + + @JsonIgnore + @ApiModelProperty("人员状态配置") + private List status; + + @JsonIgnore + @ApiModelProperty("人员") + private List employee; + + @JsonIgnore + @ApiModelProperty("入职日期") + private List hiredate; + + @JsonIgnore + @ApiModelProperty("离职日期") + private List leavedate; + + @ApiModelProperty("统计单位") + private Integer unitType; +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java new file mode 100644 index 000000000..87d4548c1 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java @@ -0,0 +1,24 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 薪资统计报表查询参数 + * @Author: wangxiangzhong + * @Date: 2023/1/11 9:54 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪资统计报表查询参数") +public class SalaryStatisticsReportQueryParam extends BaseQueryParam { + + @ApiModelProperty("报表名称") + private String reportName; +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java new file mode 100644 index 000000000..ae15f161e --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java @@ -0,0 +1,47 @@ +package com.engine.salary.report.entity.param; + +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.util.SalaryI18nUtil; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; + +/** + * @Description: 薪酬统计报表保存参数 + * @Author: wangxiangzhong + * @Date: 2022/12/16 9:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"薪酬统计报表保存参数") +public class SalaryStatisticsReportSaveParam { + + @ApiModelProperty("薪酬统计报表主键id") + private Long id; + + @ApiModelProperty("薪酬统计报表名称") + private String reportName; + + @ApiModelProperty("统计维度id") + private List dimensionIds; + + + public static void checkParam(SalaryStatisticsReportSaveParam saveParam, Long currentEmployeeId, String currentTenantKey) { + if (StringUtils.isEmpty(saveParam.getReportName())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 161842, "统计报表名称必填")); + } + saveParam.setReportName(saveParam.getReportName().trim()); + if (CollectionUtils.isEmpty(saveParam.getDimensionIds())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 161843, "统计维度必传")); + } + } +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsSearchConditionSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsSearchConditionSaveParam.java new file mode 100644 index 000000000..e0a48893a --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsSearchConditionSaveParam.java @@ -0,0 +1,69 @@ +package com.engine.salary.report.entity.param; + +import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.time.YearMonth; +import java.util.List; +import java.util.Map; + +/** + * @Description: 薪资报表统计条件保存参数 + * @Author: wangxiangzhong + * @Date: 2022/12/28 14:25 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +//"薪资报表统计条件保存参数") +public class SalaryStatisticsSearchConditionSaveParam { + @ApiModelProperty("报表id") + private Long id; + + @ApiModelProperty("统计维度") + private Long dimension; + + @ApiModelProperty("薪资所属月-开始月") + private YearMonth salaryStartMonth; + + @ApiModelProperty("薪资所属月-终止月") + private YearMonth salaryEndMonth; + + @ApiModelProperty("个税扣缴义务人配置") + private List> taxAgent; + + @ApiModelProperty("收入所得项目配置") + private List> incomeCategory; + + @ApiModelProperty("分部配置") + private List> subCompany; + + @ApiModelProperty("部门配置") + private List> department; + + @ApiModelProperty("职级配置") + private List> grade; + + @ApiModelProperty("岗位配置") + private List> position; + + @ApiModelProperty("人员状态配置") + private List> status; + + @ApiModelProperty("人员") + private List> employee; + + @ApiModelProperty("入职日期") + private List hiredate; + + @ApiModelProperty("离职日期") + private List leavedate; + + @ApiModelProperty("统计项列表") + private List items; +} diff --git a/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java new file mode 100644 index 000000000..1abf3e2c3 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java @@ -0,0 +1,72 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/1 + * @Version: v1.0 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +//"报表数据查询入参") +public class SubTableDataQueryParam extends BaseQueryParam { + @ApiModelProperty("报表id") + private Long id; + + @ApiModelProperty("个税扣缴义务人配置") + private List payOrg; + + @ApiModelProperty("缴纳组织配置") + private List payAgency; + + @ApiModelProperty("分部配置") + private List subCompany; + + @ApiModelProperty("部门配置") + private List depart; + + @ApiModelProperty("职级配置") + private List grade; + + @ApiModelProperty("岗位配置") + private List position; + + @ApiModelProperty("人员状态配置") + private List status; + + @ApiModelProperty("人员类型配置") + private Integer employeeType; + + @ApiModelProperty("开始月") + private String startMonth; + + @ApiModelProperty("人员") + private List employee; + + @ApiModelProperty("缴纳类型") + private List paymentType; + + @ApiModelProperty("终止月") + private String endMonth; + + @ApiModelProperty("统计单位") + private Integer unitType; + + @ApiModelProperty("统计维度") + private String dimension; + + @ApiModelProperty("统计维度名称") + private String dimensionName; + + @ApiModelProperty("是否导出人员维度数据") + private Boolean empExport; +} diff --git a/src/com/engine/salary/report/entity/param/SubTableItemParam.java b/src/com/engine/salary/report/entity/param/SubTableItemParam.java new file mode 100644 index 000000000..bf1918b22 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SubTableItemParam.java @@ -0,0 +1,41 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/10/31 + * @Version: v1.0 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +//"报表查询入参") +public class SubTableItemParam { + + @ApiModelProperty("福利项id") + private Long id; + + @ApiModelProperty("报表id") + private Long tableId; + + @ApiModelProperty("统计项目") + private String itemValue; + + @ApiModelProperty("统计项名称") + private String itemName; + + @ApiModelProperty("求和规则") + private String totalRule; + + @ApiModelProperty("计数规则") + private String countRule; + + @ApiModelProperty("统计单位") + private Integer unitType; +} diff --git a/src/com/engine/salary/report/entity/param/SubTableParam.java b/src/com/engine/salary/report/entity/param/SubTableParam.java new file mode 100644 index 000000000..1b8c896d9 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SubTableParam.java @@ -0,0 +1,33 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/10/31 + * @Version: v1.0 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +//"报表查询入参") +public class SubTableParam { + @ApiModelProperty("报表id") + private Long id; + + @ApiModelProperty("统计维度") + private String dimension; + + @ApiModelProperty("报表名称") + private String subTableName; + + @ApiModelProperty("报表类型") + private Integer tableType; + + +} diff --git a/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java b/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java new file mode 100644 index 000000000..3bd234ae0 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java @@ -0,0 +1,66 @@ +package com.engine.salary.report.entity.param; + +import com.engine.salary.report.entity.po.SubTableItemPO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/1 + * @Version: v1.0 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +//"保存高级搜索配置") +public class SubTableSearchConditionParam { + + @ApiModelProperty("报表id") + private Long id; + + @ApiModelProperty("个税扣缴义务人配置") + private List> paymentOrganization; + + @ApiModelProperty("缴纳组织配置") + private List> paymentAgency; + + @ApiModelProperty("分部配置") + private List> subCompany; + + @ApiModelProperty("部门配置") + private List> department; + + @ApiModelProperty("职级配置") + private List> grade; + + @ApiModelProperty("岗位配置") + private List> position; + + @ApiModelProperty("人员状态配置") + private List> status; + + @ApiModelProperty("人员类型配置") + private Integer type; + + @ApiModelProperty("开始月") + private String startMonth; + + @ApiModelProperty("终止月") + private String endMonth; + + @ApiModelProperty("人员") + private List> employee; + + @ApiModelProperty("缴纳类型") + private List> paymentType; + + @ApiModelProperty("统计项列表") + private List items; +} diff --git a/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java new file mode 100644 index 000000000..de67a6bd6 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java @@ -0,0 +1,28 @@ +package com.engine.salary.report.entity.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; + +/** + * @Description: 个税扣缴义务人查询参数 + * @Author: wangxiangzhong + * @Date: 2021/10/29 15:03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"个税扣缴义务人查询参数") +public class TaxAgentQueryParam extends BaseQueryParam { + + private Collection ids; + + @ApiModelProperty("个税扣缴义务人名称") + private String name; +} diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsDimensionPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsDimensionPO.java new file mode 100644 index 000000000..dd3d4dd03 --- /dev/null +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsDimensionPO.java @@ -0,0 +1,92 @@ +package com.engine.salary.report.entity.po; + +import com.engine.salary.report.enums.SalaryStatisticsDimensionTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Date; + +/** + * @Description: 薪酬统计维度表 + * @Author: wangxiangzhong + * @Date: 2022/12/15 11:23 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//hrsa_salary_stats_dim") +public class SalaryStatisticsDimensionPO implements Serializable { + + private static final long serialVersionUID = 5180094786861638413L; + /** + * 主键id + */ + private Long id; + + /** + * 名称 + */ + private String dimName; + + /** + * 统计维度类型 + * @see SalaryStatisticsDimensionTypeEnum + */ + private String dimType; + + /** + * 备注 + */ + private String remark; + + /** + * 设置内容 + */ + private String setting; + + /** + * 是否默认:1代表默认 + */ + private Integer isDefault; + + /** + * 统计维度编码 + */ + private String dimCode; + + /** + * 租户key + */ + private String tenantKey; + + /** + * 创建人id + */ + private Long creator; + + private Long labelId; + + /** + * 是否删除 + */ + private Integer deleteType; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + + private Collection ids; + private String dimNameLike; +} diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java new file mode 100644 index 000000000..ca8b53fc7 --- /dev/null +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java @@ -0,0 +1,160 @@ +package com.engine.salary.report.entity.po; + +import com.engine.salary.report.enums.UnitTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @Description: + * @Author: wangxiangzhong + * @CreateDate: 2022/12/20 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//hrsa_salary_statistics_item") +//薪酬报表统计子表自定义统计项") +public class SalaryStatisticsItemPO implements Serializable { + + private static final long serialVersionUID = 5335849418826222822L; + + //主键id") + private Long id; + + //统计报表id") + private Long statReportId; + + //统计项名称") + private String itemName; + + //统计项集合") + private String itemValue; + + /** + * { + * "totalValue":"1", 是否有合计列 + * "ratioValue":"1",是否有占比列 + * "m2mValue":"1",是否有环比列 + * "y2yValue":"1",是否有同比列 + * "m2mUpperLimit:",合计环比上限 + * "m2mLowerLimit",合计环比下限 + * "y2yUpperLimit:",合计同比上限 + * "y2yLowerLimit",合计同比下限 + * } + * jsonToString + */ + //计数规则") + private String countRule; + + /** + * { + * "totalValue":"1", 是否有合计列 + * "ratioValue":"1",是否有占比列 + * "m2mValue":"1",是否有环比列 + * "y2yValue":"1",是否有同比列 + * "m2mUpperLimit:",合计环比上限 + * "m2mLowerLimit",合计环比下限 + * "y2yUpperLimit:",合计同比上限 + * "y2yLowerLimit",合计同比下限 + * } + * jsonToString + */ + //求和规则") + private String sumRule; + + /** + * { + * "totalValue":"1", 是否有合计列 + * "ratioValue":"1",是否有占比列 + * "m2mValue":"1",是否有环比列 + * "y2yValue":"1",是否有同比列 + * "m2mUpperLimit:",合计环比上限 + * "m2mLowerLimit",合计环比下限 + * "y2yUpperLimit:",合计同比上限 + * "y2yLowerLimit",合计同比下限 + * } + * jsonToString + */ + //平均值规则") + private String avgRule; + + /** + * { + * "totalValue":"1", 是否有合计列 + * "ratioValue":"1",是否有占比列 + * "m2mValue":"1",是否有环比列 + * "y2yValue":"1",是否有同比列 + * "m2mUpperLimit:",合计环比上限 + * "m2mLowerLimit",合计环比下限 + * "y2yUpperLimit:",合计同比上限 + * "y2yLowerLimit",合计同比下限 + * } + * jsonToString + */ + //最大值规则") + private String maxRule; + + /** + * { + * "totalValue":"1", 是否有合计列 + * "ratioValue":"1",是否有占比列 + * "m2mValue":"1",是否有环比列 + * "y2yValue":"1",是否有同比列 + * "m2mUpperLimit:",合计环比上限 + * "m2mLowerLimit",合计环比下限 + * "y2yUpperLimit:",合计同比上限 + * "y2yLowerLimit",合计同比下限 + * } + * jsonToString + */ + //最小值规则") + private String minRule; + + /** + * { + * "totalValue":"1", 是否有合计列 + * "ratioValue":"1",是否有占比列 + * "m2mValue":"1",是否有环比列 + * "y2yValue":"1",是否有同比列 + * "m2mUpperLimit:",合计环比上限 + * "m2mLowerLimit",合计环比下限 + * "y2yUpperLimit:",合计同比上限 + * "y2yLowerLimit",合计同比下限 + * } + * jsonToString + */ + //中位数规则") + private String medianRule; + + //顺序") + private Integer indexValue; + + /** + * 统计单位 + * @see UnitTypeEnum + */ + //统计单位") + private Integer unitType; + + //创建时间") + private LocalDateTime createTime; + + //更新时间") + private LocalDateTime updateTime; + + //创建人") + private Long creator; + + //是否删除") + private Integer deleteType; + + //租户key") + private String tenantKey; +} diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java new file mode 100644 index 000000000..d66a7b489 --- /dev/null +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java @@ -0,0 +1,85 @@ +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.time.LocalDate; +import java.util.Date; + +/** + * @Description: 薪酬统计报表 + * @Author: wangxiangzhong + * @Date: 2022/12/15 11:23 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//hrsa_salary_stats_report") +public class SalaryStatisticsReportPO implements Serializable { + + private static final long serialVersionUID = 6526480959578343197L; + + //主键id") + private Long id; + + //报表名称") + private String reportName; + + //统计维度") + private String dimension; + + //薪资所属月-起始") + private LocalDate salaryStartMonth; + + //薪资所属月-截止") + private LocalDate salaryEndMonth; + + //个税扣缴义务人配置") + private String taxAgentSetting; + + //收入所得项目配置") + private String incomeCategorySetting; + + //分部配置") + private String subCompanySetting; + + //部门配置") + private String departSetting; + + //职级配置") + private String gradeSetting; + + //岗位配置") + private String positionSetting; + + //人员状态配置") + private String statusSetting; + + //人员配置") + private String employeeSetting; + + //入职日期配置") + private String hiredateSetting; + + //离职日期配置") + private String leavedateSetting; + + //租户key", ignore = true) + private String tenantKey; + + //创建人id", ignore = true) + private Long creator; + + //是否删除", ignore = true) + private Integer deleteType; + + //创建时间", ignore = true) + private Date createTime; + + //更新时间", ignore = true) + private Date updateTime; +} diff --git a/src/com/engine/salary/report/entity/po/SubTableItemPO.java b/src/com/engine/salary/report/entity/po/SubTableItemPO.java new file mode 100644 index 000000000..26a5c309f --- /dev/null +++ b/src/com/engine/salary/report/entity/po/SubTableItemPO.java @@ -0,0 +1,80 @@ +package com.engine.salary.report.entity.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/10/31 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"hrsa_sub_table_item") +//社保福利统计子表统计项") +public class SubTableItemPO { + + //主键id") + private Long id; + + //创建时间") + private LocalDateTime createTime; + + //更新时间") + private LocalDateTime updateTime; + + //创建人") + private Long creator; + + //是否删除") + private Integer deleteType; + + //租户key") + private String tenantKey; + + //数据表id") + private Long tableId; + + //统计项名称") + private String itemName; + + //统计项集合") + private String itemValue; + + /** + * { + * "totalValue":"",是否有合计列 + * "m2mValue":,是否有合计环比列 + * "upperLimit:",合计环比上限 + * "lowerLimit",合计环比下限 + * } + * jsonToString + */ + //合计规则") + private String totalRule; + + /** + * { + * "totalValue":"",是否有合计列 + * "m2mValue":,是否有合计环比列 + * "upperLimit:",合计环比上限 + * "lowerLimit",合计环比下限 + * } + * jsonToString + */ + //计数规则") + private String countRule; + + //顺序") + private Integer indexValue; + + //统计单位") + private Integer unitType; +} diff --git a/src/com/engine/salary/report/enums/DataTypeEnum.java b/src/com/engine/salary/report/enums/DataTypeEnum.java new file mode 100644 index 000000000..47dd42272 --- /dev/null +++ b/src/com/engine/salary/report/enums/DataTypeEnum.java @@ -0,0 +1,31 @@ +package com.engine.salary.report.enums; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2021/11/19 14:18 + * @Version: v1.0 + */ +public enum DataTypeEnum { + + CUSTOM(0, "自定义"), + + SYSTEM(1, "系统"); + + private Integer value; + + private String desc; + + DataTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + public Integer getValue() { + return value; + } + + public String getDesc() { + return desc; + } +} diff --git a/src/com/engine/salary/report/enums/DeleteTypeEnum.java b/src/com/engine/salary/report/enums/DeleteTypeEnum.java new file mode 100644 index 000000000..45b1ac94e --- /dev/null +++ b/src/com/engine/salary/report/enums/DeleteTypeEnum.java @@ -0,0 +1,33 @@ +package com.engine.salary.report.enums; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2021/11/19 14:20 + * @Version: v1.0 + */ +public enum DeleteTypeEnum { + + NOT_DELETED(0, "未删除"), + + DELETED(1, "已删除"), + + PHYSICAL_DELETED(3, "物理删除"); + + private Integer value; + + private String desc; + + DeleteTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + public Integer getValue() { + return value; + } + + public String getDesc() { + return desc; + } +} diff --git a/src/com/engine/salary/report/enums/DimensionEnum.java b/src/com/engine/salary/report/enums/DimensionEnum.java new file mode 100644 index 000000000..ff09c474e --- /dev/null +++ b/src/com/engine/salary/report/enums/DimensionEnum.java @@ -0,0 +1,44 @@ +package com.engine.salary.report.enums; + +import com.engine.salary.enums.BaseEnum; + +public enum DimensionEnum implements BaseEnum { + BILL_MONTH("billMonth", 92146, "账单月份"), + PAYMENT_ORGANIZATION("paymentOrganization", 86184, "个税扣缴义务人"), + PAYMENT_AGENCY("paymentAgency", 93270, "缴纳组织"), + SUB_COMPANY("subCompany", 107369, "分部"), + DEPARTMENT("department", 86185, "部门"), + POSITION("position", 90633, "岗位"), + GRADE("grade", 98623, "职级"), + STATUS("status", 109332, "人事状态"), + TYPE("type", 151914, "人员类型"), + EMPLOYEE("employee", 100133, "人员"), + YEAR("year", 157163, "年度"), + QUARTER("quarter", 157162, "季度"); + + private String value; + private Integer labelId; + private String defaultValue; + + DimensionEnum(String value, Integer labelId, String defaultValue) { + this.value = value; + this.labelId = labelId; + this.defaultValue = defaultValue; + } + + + @Override + public Object getValue() { + return value; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultValue; + } +} diff --git a/src/com/engine/salary/report/enums/EmployeeTypeEnum.java b/src/com/engine/salary/report/enums/EmployeeTypeEnum.java new file mode 100644 index 000000000..4c5d0cb1b --- /dev/null +++ b/src/com/engine/salary/report/enums/EmployeeTypeEnum.java @@ -0,0 +1,52 @@ +package com.engine.salary.report.enums; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 人员类型 + */ +public enum EmployeeTypeEnum implements BaseEnum { + + ORGANIZATION(0, "组织架构", 109125), + EXT_EMPLOYEE(1, "非系统人员", 119127), + NOT_MATCH(2, "无匹配人员类型", 0), + ; + + private final int value; + + private final String defaultLabel; + + private final int labelId; + + EmployeeTypeEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + public static EmployeeTypeEnum parseByValue(Integer value) { + for (EmployeeTypeEnum typeEnum : EmployeeTypeEnum.values()) { + if (Objects.equals(typeEnum.getValue(), value)) { + return typeEnum; + } + } + return null; + } +} diff --git a/src/com/engine/salary/report/enums/ExtEmployeeTypeEnum.java b/src/com/engine/salary/report/enums/ExtEmployeeTypeEnum.java new file mode 100644 index 000000000..355b9fde4 --- /dev/null +++ b/src/com/engine/salary/report/enums/ExtEmployeeTypeEnum.java @@ -0,0 +1,24 @@ +package com.engine.salary.report.enums; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/4/14 17:28 + * @Version: v1.0 + */ +public enum ExtEmployeeTypeEnum { + NO(1, "不是挂靠人员"), + YES(2, "是挂靠人员"); + + private Integer value; + private String commit; + + ExtEmployeeTypeEnum(Integer value, String commit) { + this.value = value; + this.commit = commit; + } + + public Integer getValue() { + return value; + } +} diff --git a/src/com/engine/salary/report/enums/IncomeCategoryEnum.java b/src/com/engine/salary/report/enums/IncomeCategoryEnum.java new file mode 100644 index 000000000..981f4aa78 --- /dev/null +++ b/src/com/engine/salary/report/enums/IncomeCategoryEnum.java @@ -0,0 +1,86 @@ +package com.engine.salary.report.enums; + +import com.engine.salary.enums.BaseEnum; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * @description: 应税项目 + * @author: xiajun + * @modified By: xiajun + * @date: Created in 12/18/21 3:20 PM + * @version:v1.0 + */ +public enum IncomeCategoryEnum implements BaseEnum { + + WAGES_AND_SALARIES(1, "正常工资薪金", 160487), + REMUNERATION_FOR_LABOR(4, "一般劳务报酬所得", 160488), + ONETIME_ANNUAL_BONUS(2,"全年一次性奖金收入", 160489), + COMPENSATION_FOR_RETIRE(107,"内退一次性补偿金",0), + COMPENSATION_FOR_DISMISS(108,"解除劳动合同一次性补偿金", 0), + INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109,"个人股权激励收入",0), + ANNUITY_RECEIPT(110,"年金领取",0), + INCOME_FOR_INSURANCE_SALESMAN(402,"保险营销员佣金收入",0), + INCOME_FOR_SECURITIES_BROKER(403,"证券经纪人佣金收入",0), + REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489,"其他连续劳务报酬所得",0), + REMUNERATION_FOR_OTHER_LABOR(499,"其他非连续劳务报酬所得",0), + REMUNERATION_FOR_AUTHOR(500,"稿酬所得",0), + ROYALTIES(600,"特许权使用费所得",0), + ; + + private int value; + + private String defaultLabel; + + private int labelId; + + IncomeCategoryEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + public static IncomeCategoryEnum parseByValue(int value) { + for (IncomeCategoryEnum incomeCategoryEnum : IncomeCategoryEnum.values()) { + if (Objects.equals(incomeCategoryEnum.getValue(), value)) { + return incomeCategoryEnum; + } + } + return null; + } + + public static List parseByValue(Collection values) { + if (CollectionUtils.isEmpty(values)) { + return Collections.emptyList(); + } + List incomeCategoryEnums = Lists.newArrayListWithExpectedSize(values.size()); + for (Integer value : values) { + for (IncomeCategoryEnum incomeCategoryEnum : IncomeCategoryEnum.values()) { + if (Objects.equals(incomeCategoryEnum.getValue(), value)) { + incomeCategoryEnums.add(incomeCategoryEnum); + } + } + } + return incomeCategoryEnums; + } +} diff --git a/src/com/engine/salary/report/enums/OperateTypeEnum.java b/src/com/engine/salary/report/enums/OperateTypeEnum.java new file mode 100644 index 000000000..6026dd861 --- /dev/null +++ b/src/com/engine/salary/report/enums/OperateTypeEnum.java @@ -0,0 +1,30 @@ +package com.engine.salary.report.enums; + +/** + * @Description: 操作类型 + * @Author: wangxiangzhong + * @Date: 2021/11/1 13:17 + */ +public enum OperateTypeEnum { + + ADD("1", "新增"), + UPDATE("2", "更新"), + DELETE("4", "删除"); + + private String value; + + private String label; + + OperateTypeEnum(String value, String label) { + this.value = value; + this.label = label; + } + + public String getValue() { + return value; + } + + public String getLabel() { + return label; + } +} diff --git a/src/com/engine/salary/report/enums/PaymentScopeEnum.java b/src/com/engine/salary/report/enums/PaymentScopeEnum.java new file mode 100644 index 000000000..ee129ba95 --- /dev/null +++ b/src/com/engine/salary/report/enums/PaymentScopeEnum.java @@ -0,0 +1,34 @@ +package com.engine.salary.report.enums; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2021/11/15 14:54 + * @Version: v1.0 + */ +public enum PaymentScopeEnum { + SCOPE_COMPANY(1, "公司", 87158), + SCOPE_PERSON(2, "个人", 87159); + + private Integer value; + private String defaultLable; + private Integer labelId; + + PaymentScopeEnum(Integer value, String defaultLable, Integer labelId) { + this.value = value; + this.defaultLable = defaultLable; + this.labelId = labelId; + } + + public Integer getValue() { + return this.value; + } + + public Integer getLabelId() { + return this.labelId; + } + + public String getDefaultLabel() { + return this.defaultLable; + } +} diff --git a/src/com/engine/salary/report/enums/PaymentStatusEnum.java b/src/com/engine/salary/report/enums/PaymentStatusEnum.java new file mode 100644 index 000000000..b701bb642 --- /dev/null +++ b/src/com/engine/salary/report/enums/PaymentStatusEnum.java @@ -0,0 +1,41 @@ +package com.engine.salary.report.enums; + + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2021/12/6 9:32 + * @Version: v1.0 + */ +public enum PaymentStatusEnum { + + COMMON(0, "正常缴纳", 92265), + REPAIR(1, "补缴", 92266), + PAYMENT(2, "代缴", 121755), + RECESSION(3, "退差", 134057), + BALANCE(4, "补差", 139823); + + private Integer value; + + private String defaultLable; + + private Integer labelId; + + PaymentStatusEnum(Integer value, String defaultLable, Integer labelId) { + this.value = value; + this.defaultLable = defaultLable; + this.labelId = labelId; + } + + public Integer getValue() { + return this.value; + } + + public Integer getLabelId() { + return this.labelId; + } + + public String getDefaultLabel() { + return this.defaultLable; + } +} diff --git a/src/com/engine/salary/report/enums/SalaryDataTypeEnum.java b/src/com/engine/salary/report/enums/SalaryDataTypeEnum.java new file mode 100644 index 000000000..c7e41af81 --- /dev/null +++ b/src/com/engine/salary/report/enums/SalaryDataTypeEnum.java @@ -0,0 +1,54 @@ +package com.engine.salary.report.enums; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * @description: 薪资项目的字段类型 + * @author: xiajun + * @modified By: xiajun + * @date: 2022/3/10 17:16 + * @version:v1.0 + */ +public enum SalaryDataTypeEnum implements BaseEnum { + STRING("string", "字符", 105093), + NUMBER("number", "数值", 87625), + ; + + private String value; + + private String defaultLabel; + + private int labelId; + + SalaryDataTypeEnum(String value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public String getValue() { + return this.value; + } + + @Override + public Integer getLabelId() { + return this.labelId; + } + + @Override + public String getDefaultLabel() { + return this.defaultLabel; + } + + public static SalaryDataTypeEnum parseByValue(String value) { + for (SalaryDataTypeEnum salaryDataTypeEnum : SalaryDataTypeEnum.values()) { + if (Objects.equals(salaryDataTypeEnum.getValue(), value)) { + return salaryDataTypeEnum; + } + } + return null; + } +} diff --git a/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java b/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java new file mode 100644 index 000000000..91ec04a2c --- /dev/null +++ b/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java @@ -0,0 +1,46 @@ +package com.engine.salary.report.enums; + +import com.engine.salary.util.SalaryI18nUtil; + +import java.util.Arrays; +import java.util.Optional; + +/** + * @Description: 薪酬统计维度类型 + * @Author: wangxiangzhong + * @Date: 2022/12/15 11:28 + */ +public enum SalaryStatisticsDimensionTypeEnum { + QUALITATIVE("QUALITATIVE", "定性", 161086), + RATION_GROUP_SPACING("RATION_GROUP_SPACING", "定量-组距式分组", 161087), + RATION_GROUP_INDIVIDUAL("RATION_GROUP_INDIVIDUAL", "定量-单项式分组", 161088); + + private String value; + + private String defaultLabel; + + private int labelId; + + SalaryStatisticsDimensionTypeEnum(String value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + public String getValue() { + return value; + } + + public String getDefaultLabel() { + return defaultLabel; + } + + public int getLabelId() { + return labelId; + } + + public static String getDefaultLabelByValue(String value) { + Optional optionalDimensionType = Arrays.stream(SalaryStatisticsDimensionTypeEnum.values()).filter(r -> r.getValue().equals(value)).findFirst(); + return optionalDimensionType.isPresent() ? SalaryI18nUtil.getI18nLabel( optionalDimensionType.get().getLabelId(), optionalDimensionType.get().getDefaultLabel()) : ""; + } +} diff --git a/src/com/engine/salary/report/enums/SalarySystemTypeEnum.java b/src/com/engine/salary/report/enums/SalarySystemTypeEnum.java new file mode 100644 index 000000000..a9e25eb7a --- /dev/null +++ b/src/com/engine/salary/report/enums/SalarySystemTypeEnum.java @@ -0,0 +1,56 @@ +package com.engine.salary.report.enums; + + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * @description: 税率表表单类型 + * @author: xiajun + * @modified By: xiajun + * @date: Created in 10/19/21 4:05 PM + * @version:v1.0 + */ +public enum SalarySystemTypeEnum implements BaseEnum { + + CUSTOM(0, "自定义表单", 83993), + SYSTEM(1, "系统表单", 83994), + ; + + private int value; + + private String defaultLabel; + + private int labelId; + + SalarySystemTypeEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + public static SalarySystemTypeEnum parseByValue(int value) { + for (SalarySystemTypeEnum typeEnum : SalarySystemTypeEnum.values()) { + if (Objects.equals(typeEnum.getValue(), value)) { + return typeEnum; + } + } + return null; + } +} diff --git a/src/com/engine/salary/report/enums/TableTypeEnum.java b/src/com/engine/salary/report/enums/TableTypeEnum.java new file mode 100644 index 000000000..f36dada57 --- /dev/null +++ b/src/com/engine/salary/report/enums/TableTypeEnum.java @@ -0,0 +1,18 @@ +package com.engine.salary.report.enums; + +public enum TableTypeEnum { + REPORT(0, "报表"), + OVERVIEW(1, "总览"); + + private Integer value; + private String desc; + + TableTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + public Integer getValue() { + return value; + } +} diff --git a/src/com/engine/salary/report/enums/TaxAgentPermissionConstant.java b/src/com/engine/salary/report/enums/TaxAgentPermissionConstant.java new file mode 100644 index 000000000..7699272b3 --- /dev/null +++ b/src/com/engine/salary/report/enums/TaxAgentPermissionConstant.java @@ -0,0 +1,24 @@ +package com.engine.salary.report.enums; + +/** + * @Description: 个税扣缴义务人分权 + * @Author: wangxiangzhong + * @Date: 2022/5/2 10:09 + */ +public class TaxAgentPermissionConstant { + + /** + * 菜单编码 + */ + public static final String MENU_CODE = "TaxAgent"; + + /** + * 权限编码-默认权限项 + */ + public static final String ITEM_CODE_DEFAULT = "TaxAgent.default"; + + /** + * 权限编码-分权开关 + */ + public static final String ITEM_CODE_DEVOLUTION = "TaxAgent.devolution"; +} diff --git a/src/com/engine/salary/report/enums/TaxAgentRoleTypeEnum.java b/src/com/engine/salary/report/enums/TaxAgentRoleTypeEnum.java new file mode 100644 index 000000000..8c08f5f99 --- /dev/null +++ b/src/com/engine/salary/report/enums/TaxAgentRoleTypeEnum.java @@ -0,0 +1,31 @@ +package com.engine.salary.report.enums; + +/** + * @Description: 个税扣缴义务人角色类型 + * @Author: wangxiangzhong + * @Date: 2022-04-22 14:37 + */ +public enum TaxAgentRoleTypeEnum { + + CHIEF(0, "总管理员"), + ADMIN(1, "管理员"), + SUBADMIN(2, "分管理员"), + NONE(3, "其他"); + + private int value; + + private String defaultLabel; + + TaxAgentRoleTypeEnum(int value, String defaultLabel) { + this.value = value; + this.defaultLabel = defaultLabel; + } + + public int getValue() { + return value; + } + + public String getDefaultLabel() { + return defaultLabel; + } +} diff --git a/src/com/engine/salary/report/enums/UnitTypeEnum.java b/src/com/engine/salary/report/enums/UnitTypeEnum.java new file mode 100644 index 000000000..3e49eb123 --- /dev/null +++ b/src/com/engine/salary/report/enums/UnitTypeEnum.java @@ -0,0 +1,33 @@ +package com.engine.salary.report.enums; + +public enum UnitTypeEnum { + REN(1, 157087, "人"), + YUAN(2, 152739, "元"), + QIAN(3, 157088, "千"), + BAIWAN(4, 152745, "百万"); + + + private Integer item; + + private Integer labelId; + + private String defaultValue; + + UnitTypeEnum(Integer item, Integer labelId, String defaultValue) { + this.item = item; + this.labelId = labelId; + this.defaultValue = defaultValue; + } + + public Integer getItem() { + return item; + } + + public Integer getLabelId() { + return labelId; + } + + public String getDefaultValue() { + return defaultValue; + } +} diff --git a/src/com/engine/salary/report/enums/WeaBrowserTypeEnum.java b/src/com/engine/salary/report/enums/WeaBrowserTypeEnum.java new file mode 100644 index 000000000..03aa61ae5 --- /dev/null +++ b/src/com/engine/salary/report/enums/WeaBrowserTypeEnum.java @@ -0,0 +1,37 @@ +package com.engine.salary.report.enums; + +public enum WeaBrowserTypeEnum { + + PAYMENT_ORGANIZATION("paymentOrganizationFieldBrowser", "个税扣缴义务人"), + PAYMENT_AGENCY("paymentAgencyFieldBrowser", "缴纳组织"), + SUB_COMPANY("subcompanyFieldBrowser", "分部"), + DEPARTMENT("departmentFieldBrowser", "部门"), + GRADE("gradeFieldBrowser", "职级"), + POSITION("positionFieldBrowser", "岗位"), + STATUS("statusFieldBrowser", "人事状态"), + + EMPLOYEE("employeeFieldBrowser", "人员"), + ITEM("subTableItemFieldBrowser", "统计项目"), + + TAX_AGENT("TaxAgentBrowser", "个税扣缴义务人"), + USER_STATUS("UserStatusBrowser", "人事状态"), + INCOME_CATEGORY("IncomeCategoryBrowser", "收入所得项目"), + SALARY_ITEM("salaryItemBrowser", "薪资项目"); + + WeaBrowserTypeEnum(String type, String desc) { + this.browserType = type; + this.desc = desc; + } + + private final String browserType; + private final String desc; + + + public String getBrowserType() { + return browserType; + } + + public String getDesc() { + return desc; + } +} diff --git a/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java b/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java new file mode 100644 index 000000000..1e8a83e64 --- /dev/null +++ b/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java @@ -0,0 +1,64 @@ +package com.engine.salary.report.service; + +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; +import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; +import com.engine.salary.util.page.PageInfo; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * @Description: 薪酬统计维度 + * @Author: wangxiangzhong + * @Date: 2022/12/15 14:09 + */ +public interface SalaryStatisticsDimensionService { + + /** + * 初始化 + * + * @param currentEmployeeId + */ + void init(Long currentEmployeeId); + + /** + * 获取单个薪酬统计维度 + * + * @param id + * @return + */ + SalaryStatisticsDimensionPO getById(Long id); + + /** + * 获取租户下的所有统计维度 + * + * @return + */ + List listAll(); + + /** + * 获取薪酬统计维度分页列表 + * + * @param queryParam + * @return + */ + PageInfo listPage(SalaryStatisticsDimensionQueryParam queryParam); + + /** + * 保存薪酬统计维度 + * + * @param saveParam + * @return + */ + String save(SalaryStatisticsDimensionSaveParam saveParam); + + /** + * 删除薪酬统计维度 + * + * @param ids + * @return + */ + Map delete(Collection ids); +} diff --git a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java new file mode 100644 index 000000000..3563441df --- /dev/null +++ b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java @@ -0,0 +1,78 @@ +package com.engine.salary.report.service; + +/** + * @Description: 薪酬统计报表 + * @Author: wangxiangzhong + * @Date: 2022/12/15 14:09 + */ +public interface SalaryStatisticsReportService { + +// /** +// * 获取所有薪酬报表 +// * +// * @return +// */ +// List listAll(); +// +// /** +// * 获取薪酬报表列表 +// * +// * @param currentEmployeeId +// * @param currentTenantKey +// * @return +// */ +// List list(Long currentEmployeeId, String currentTenantKey); +// +// /** +// * 获取单个薪酬统计报表 +// * +// * @param id +// * @param currentTenantKey +// * @return +// */ +// SalaryStatisticsReportPO getById(Long id, String currentTenantKey); +// +// /** +// * 保存薪酬统计报表 +// * +// * @param saveParam +// * @param currentEmployeeId +// * @param currentTenantKey +// * @return +// */ +// String save(SalaryStatisticsReportSaveParam saveParam, Long currentEmployeeId, String currentTenantKey); +// +// /** +// * 删除薪酬统计报表 +// * +// * @param ids +// * @param currentEmployeeId +// * @param currentTenantKey +// * @return +// */ +// Map delete(Collection ids, Long currentEmployeeId, String currentTenantKey); +// +// /** +// * 保存统计范围 +// * +// * @param param +// * @param currentEmployeeId +// * @param currentTenantKey +// * @return +// */ +// String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param); +// +// /** +// * 构建报表分页统计记录 +// * +// * +// * @param dimension +// * @param param +// * @param salaryStatisticsReport +// * @param salaryStatisticsItemList +// * @param employeeId +// * @param tenantKey +// * @return +// */ +// PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO salaryStatisticsReport, List salaryStatisticsItemList, Long employeeId, String tenantKey); +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java new file mode 100644 index 000000000..50b793261 --- /dev/null +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java @@ -0,0 +1,237 @@ +package com.engine.salary.report.service.impl; + +import com.alibaba.fastjson.JSON; +import com.engine.core.impl.Service; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.report.SalaryStatisticsDimensionMapper; +import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; +import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; +import com.engine.salary.report.enums.SalaryStatisticsDimensionTypeEnum; +import com.engine.salary.report.service.SalaryStatisticsDimensionService; +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 org.apache.commons.lang3.math.NumberUtils; +import org.springframework.beans.BeanUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 薪酬统计维度 + * @Author: wangxiangzhong + * @Date: 2022/12/15 14:09 + */ +public class SalaryStatisticsDimensionServiceImpl extends Service implements SalaryStatisticsDimensionService { + + private SalaryStatisticsDimensionMapper getSalaryStatisticsDimensionMapper() { + return MapperProxyFactory.getProxy(SalaryStatisticsDimensionMapper.class); + } + +// private SalaryStatisticsReportService salaryStatisticsReportService(User user) { +// return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); +// } + /** + * 初始化默认维度 + */ + @Override + public void init(Long currentEmployeeId) { + List defaultList = getSalaryStatisticsDimensionMapper().listSome(SalaryStatisticsDimensionPO.builder().isDefault(NumberUtils.INTEGER_ONE).build()); + + if (CollectionUtils.isEmpty(defaultList)) { + List defaultDimensionNames = Arrays.asList( + SalaryI18nUtil.getI18nLabel(87614, "薪资所属月"), + SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), + SalaryI18nUtil.getI18nLabel(145212, "收入所得类型"), + SalaryI18nUtil.getI18nLabel(107369, "分部"), + SalaryI18nUtil.getI18nLabel(86185, "部门"), + SalaryI18nUtil.getI18nLabel(90633, "岗位"), + SalaryI18nUtil.getI18nLabel(98623, "职级"), + SalaryI18nUtil.getI18nLabel(109332, "人事状态"), + SalaryI18nUtil.getI18nLabel(151914, "人员类型"), + SalaryI18nUtil.getI18nLabel(100133, "人员"), + SalaryI18nUtil.getI18nLabel(157163, "年度"), + SalaryI18nUtil.getI18nLabel(173199, "半年度"), + SalaryI18nUtil.getI18nLabel(157162, "季度") + ); + List defaultDimensionCodes = Arrays.asList( + SalaryStatisticsDimensionConstant.DM_SALARY_MONTH, + SalaryStatisticsDimensionConstant.DM_TAX_AGENT, + SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY, + SalaryStatisticsDimensionConstant.DM_SUB_COMPANY, + SalaryStatisticsDimensionConstant.DM_DEPARTMENT, + SalaryStatisticsDimensionConstant.DM_POSITION, + SalaryStatisticsDimensionConstant.DM_GRADE, + SalaryStatisticsDimensionConstant.DM_HRM_STATUS, + SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE, + SalaryStatisticsDimensionConstant.DM_EMPLOYEE, + SalaryStatisticsDimensionConstant.DM_YEAR, + SalaryStatisticsDimensionConstant.DM_HALF_YEAR, + SalaryStatisticsDimensionConstant.DM_QUARTER + ); + + List dimensionDefaultNews = Lists.newArrayList(); + Date now = new Date(); + for (String dm : defaultDimensionNames) { + dimensionDefaultNews.add(SalaryStatisticsDimensionPO.builder() + .id(IdGenerator.generate()) + .dimName(dm) + .dimType(SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue()) + .setting("") + .remark(dm) + .isDefault(NumberUtils.INTEGER_ONE) + .dimCode(defaultDimensionCodes.get(defaultDimensionNames.indexOf(dm))) + .createTime(now) + .creator(currentEmployeeId) + .updateTime(now) + .deleteType(0) + .tenantKey("") + .build()); + } + dimensionDefaultNews.forEach(getSalaryStatisticsDimensionMapper()::insertIgnoreNull); + } + } + + @Override + public SalaryStatisticsDimensionPO getById(Long id) { + return getSalaryStatisticsDimensionMapper().getById(id); + } + + @Override + public List listAll() { + return getSalaryStatisticsDimensionMapper().listAll(); + } + + @Override + public PageInfo listPage(SalaryStatisticsDimensionQueryParam queryParam) { + + // 查询 + List salaryStatisticsDimensionPOS = getSalaryStatisticsDimensionMapper().listSome(SalaryStatisticsDimensionPO.builder().dimName(queryParam.getDimName()).build()); + // 分页参数 + PageInfo page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryStatisticsDimensionPOS, SalaryStatisticsDimensionPO.class); + + return page; + } + + /** + * 根据名称模糊查询 + * + * @param fieldName + * @return + */ + private List listByName(String fieldName) { + return getSalaryStatisticsDimensionMapper().listSome(SalaryStatisticsDimensionPO.builder().dimName(fieldName).build()); + } + + @Override + public String save(SalaryStatisticsDimensionSaveParam saveParam) { + SalaryStatisticsDimensionSaveParam.checkParam(saveParam); + + String setting = ""; + String dimCode = ""; + if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.equals(saveParam.getDimType())) { + setting = JSON.toJSONString(saveParam.getSetting4Qualitative()); + dimCode = saveParam.getSetting4Qualitative().getId(); + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.equals(saveParam.getDimType())) { + setting = JSON.toJSONString(saveParam.getSetting4RationGroupSpacing()); + dimCode = saveParam.getDimCode(); + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.equals(saveParam.getDimType())) { + setting = JSON.toJSONString(saveParam.getSetting4RationGroupIndividual()); + dimCode = saveParam.getDimCode(); + } + Date now = new Date(); + if (saveParam.getId() != null) { + SalaryStatisticsDimensionPO po = this.getById(saveParam.getId()); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); + } + List list = listByName(saveParam.getDimName()); + boolean nameExist = list.stream().anyMatch(e -> !Objects.equals(e.getId(), saveParam.getId())); + if (nameExist) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98080, "名称不允许重复")); + } + SalaryStatisticsDimensionPO poNew = new SalaryStatisticsDimensionPO(); + BeanUtils.copyProperties(po, poNew); + poNew.setDimName(saveParam.getDimName()); + poNew.setDimType(saveParam.getDimType().getValue()); + poNew.setDimCode(dimCode); + poNew.setSetting(setting); + poNew.setRemark(saveParam.getRemark()); + this.getSalaryStatisticsDimensionMapper().updateIgnoreNull(poNew); + } else { + List list = listByName(saveParam.getDimName()); + if (CollectionUtils.isNotEmpty(list)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98080, "名称不允许重复")); + } + Long id = IdGenerator.generate(); + SalaryStatisticsDimensionPO poNew = SalaryStatisticsDimensionPO.builder() + .id(id) + .dimName(saveParam.getDimName()) + .dimType(saveParam.getDimType().getValue()) + .dimCode(dimCode) + .setting(setting) + .remark(saveParam.getRemark()) + .createTime(now) + .creator((long)user.getUID()) + .updateTime(now) + .deleteType(0) + .tenantKey("") + .build(); + this.getSalaryStatisticsDimensionMapper().insertIgnoreNull(poNew); + } + return StringUtils.EMPTY; + } + + @Override + public Map delete(Collection ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + int total = ids.size(); + List list = getSalaryStatisticsDimensionMapper().listSome(SalaryStatisticsDimensionPO.builder().ids(ids).build()); + boolean isDefault = list.stream().anyMatch(s -> NumberUtils.INTEGER_ONE.equals(s.getIsDefault())); + if (CollectionUtils.isEmpty(list) || isDefault) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + + // 被薪酬报表引用 +// List salaryStatisticsReports = salaryStatisticsReportService(user).listAll(); +// if (CollectionUtils.isNotEmpty(salaryStatisticsReports)) { +// list = list.stream() +// .filter(dim -> salaryStatisticsReports.stream().noneMatch(rp -> StringUtils.isNotEmpty(rp.getDimension()) && Arrays.asList(rp.getDimension().split(",")).contains(dim.getId().toString()))) +// .collect(Collectors.toList()); +// } + + int success = list.size(); + if (success > 0) { + List deleteIds = list.stream().map(SalaryStatisticsDimensionPO::getId).collect(Collectors.toList()); + getSalaryStatisticsDimensionMapper().batDelete(deleteIds); + } + + Map resultMap = new HashMap<>(2); + String resultMsg = SalaryI18nUtil.getI18nLabel(94620, "操作成功"); + String resultType = "success"; + // 单个设为定薪提示 + if (total > 1) { + resultMsg = SalaryI18nUtil.getI18nLabel(134807, "成功条数") + ": " + (success) + "; " + + SalaryI18nUtil.getI18nLabel(134808, "失败条数") + ": " + (total - success) + + ((total - success) > 0 ? ", " + SalaryI18nUtil.getI18nLabel(176149, "被薪资统计报表引用的不能删除") : ""); + if ((total - success) > 0) { + resultType = "info"; + } + } else if (total == 1 && success < 1) { + resultMsg = SalaryI18nUtil.getI18nLabel(176149, "被薪资统计报表引用的不能删除"); + resultType = "info"; + } + resultMap.put("type", resultType); + resultMap.put("msg", resultMsg); + return resultMap; + } +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java new file mode 100644 index 000000000..42ff15c2b --- /dev/null +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -0,0 +1,1706 @@ +//package com.engine.salary.report.service.impl; +// +//import com.alibaba.fastjson.JSON; +//import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +//import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; +//import com.engine.core.impl.Service; +//import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; +//import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; +//import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; +//import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; +//import com.engine.salary.report.service.SalaryStatisticsReportService; +//import com.engine.salary.util.SalaryAssert; +//import com.engine.salary.util.SalaryI18nUtil; +//import com.engine.salary.util.page.PageInfo; +//import com.google.common.base.Joiner; +//import com.google.common.collect.Lists; +//import com.google.common.collect.Maps; +//import com.google.common.collect.Sets; +//import com.weaver.common.component.table.page.Page; +//import com.weaver.common.distribution.genid.IdGenerator; +//import com.weaver.common.elog.dto.LoggerContext; +//import com.weaver.common.elog.util.LoggerTemplate; +//import com.weaver.common.hrm.cache.HrmDepartmentComInfo; +//import com.weaver.common.hrm.domain.employee.HrmStatus; +//import com.weaver.common.hrm.dto.jobcall.HrmJobCallParam; +//import com.weaver.common.hrm.entity.BrowserDataDto; +//import com.weaver.common.hrm.remote.jobcall.HrmJobCallRemoteService; +//import com.weaver.common.hrm.service.HrmCommonEmployeeService; +//import com.weaver.common.hrm.service.employee.HrmCommonHrmStatusService; +//import com.weaver.framework.rpc.annotation.RpcReference; +//import com.weaver.framework.util.JsonUtil; +//import com.weaver.salary.report.common.constant.SalaryStatisticsDimensionConstant; +//import com.weaver.salary.report.dao.SalaryStatisticsReportMapper; +//import com.weaver.salary.report.entity.bo.SalaryStatisticsReportBO; +//import com.weaver.salary.report.entity.dto.SalaryStatisticsReportDataDTO; +//import com.weaver.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; +//import com.weaver.salary.report.entity.param.SalaryStatisticsReportSaveParam; +//import com.weaver.salary.report.entity.po.*; +//import com.weaver.salary.report.enums.EmployeeTypeEnum; +//import com.weaver.salary.report.enums.IncomeCategoryEnum; +//import com.weaver.salary.report.enums.OperateTypeEnum; +//import com.weaver.salary.report.enums.SalaryStatisticsDimensionTypeEnum; +//import com.weaver.salary.report.exception.SalaryRunTimeException; +//import com.weaver.salary.report.service.*; +//import com.weaver.salary.report.util.*; +//import com.weaver.teams.api.user.Sex; +//import com.weaver.teams.domain.hr.SimpleUserInfo; +//import com.weaver.teams.domain.user.SimpleEmployee; +//import com.weaver.teams.hrapp.rest.RemoteUserInfoService; +//import org.apache.commons.collections4.CollectionUtils; +//import org.apache.commons.lang3.StringUtils; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.BeanUtils; +//import org.springframework.beans.factory.annotation.Autowired; +// +//import javax.annotation.Resource; +//import java.time.LocalDateTime; +//import java.util.*; +//import java.util.stream.Collectors; +// +///** +// * @Description: 薪酬统计报表 +// * @Author: wangxiangzhong +// * @Date: 2022/12/15 14:09 +// */ +//public class SalaryStatisticsReportServiceImpl extends Service implements SalaryStatisticsReportService { +// +// private static final Logger log = LoggerFactory.getLogger(SalaryStatisticsReportServiceImpl.class); +// +// public static final String DM = "dimension"; +// public static final String NOW_INFO = "nowInfoList"; +// public static final String LAST_INFO = "lastInfoList"; +// public static final String SAME_INFO = "sameInfoList"; +// +// @Resource +// private SalaryStatisticsReportMapper salaryStatisticsReportMapper; +// @Resource +// private SalaryStatisticsItemService salaryStatisticsItemService; +// @Resource +// private SalaryAcctEmployeeService salaryAcctEmployeeService; +// @Resource +// private SalaryAcctResultValueService salaryAcctResultValueService; +// @Resource +// private TaxAgentService taxAgentService; +// @Resource +// private ExtEmployeeService extEmployeeService; +// @Autowired +// private HrmCommonEmployeeService hrmCommonEmployeeService; +// @RpcReference +// private HrmJobCallRemoteService hrmJobCallRemoteService; +// @RpcReference +// private RemoteUserInfoService remoteUserInfoService; +// @Autowired +// private HrmCommonHrmStatusService hrmCommonHrmStatusService; +// @Resource(name = "salaryStatReportLoggerTemplate") +// private LoggerTemplate salaryStatReportLoggerTemplate; +// +// @Override +// public List listAll() { +// return new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) +// .select(SalaryStatisticsReportPO::getId, SalaryStatisticsReportPO::getReportName, SalaryStatisticsReportPO::getDimension) +// .eq(SalaryStatisticsReportPO::getDeleteType, 0) +// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) +// .list(); +// } +// +// @Override +// public List list(Long currentEmployeeId, String currentTenantKey) { +// return new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) +// .select(SalaryStatisticsReportPO::getId, SalaryStatisticsReportPO::getReportName, SalaryStatisticsReportPO::getDimension) +// .eq(SalaryStatisticsReportPO::getDeleteType, 0) +// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) +// .eq(SalaryStatisticsReportPO::getCreator, currentEmployeeId) +// .orderByAsc(SalaryStatisticsReportPO::getId) +// .list(); +// } +// +// @Override +// public SalaryStatisticsReportPO getById(Long id, String currentTenantKey) { +// return new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) +// .eq(SalaryStatisticsReportPO::getDeleteType, 0) +// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) +// .eq(SalaryStatisticsReportPO::getId, id) +// .one(); +// } +// +// /** +// * 根据名称模糊查询 +// * +// * @param fieldName +// * @param currentTenantKey +// * @return +// */ +// private List listByName(String fieldName, String currentTenantKey) { +// return new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) +// .eq(SalaryStatisticsReportPO::getDeleteType, 0) +// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) +// .eq(SalaryStatisticsReportPO::getReportName, fieldName) +// .list(); +// } +// +// @Override +// public String save(SalaryStatisticsReportSaveParam saveParam, Long currentEmployeeId, String currentTenantKey) { +// SalaryStatisticsReportSaveParam.checkParam(saveParam, currentEmployeeId, currentTenantKey); +// +// LocalDateTime now = LocalDateTime.now(); +// if (saveParam.getId() != null) { +// SalaryStatisticsReportPO po = this.getById(saveParam.getId(), currentTenantKey); +// if (po == null) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 161845, "薪酬统计报表不存在")); +// } +// List list = listByName(saveParam.getReportName(), currentTenantKey); +// boolean nameExist = CollectionUtils.emptyIfNull(list).stream().anyMatch(e -> !Objects.equals(e.getId(), saveParam.getId())); +// if (nameExist) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 98080, "名称不允许重复")); +// } +// SalaryStatisticsReportPO poNew = new SalaryStatisticsReportPO(); +// BeanUtils.copyProperties(po, poNew); +// poNew.setReportName(saveParam.getReportName()); +// poNew.setDimension(Joiner.on(",").join(saveParam.getDimensionIds())); +// this.salaryStatisticsReportMapper.updateById(poNew); +// +// // 记录日志 +// LoggerContext loggerContext = new LoggerContext<>(); +// loggerContext.setTargetId(String.valueOf(poNew.getId())); +// loggerContext.setTargetName(poNew.getReportName()); +// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 152565, "更新报表")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 152565, "更新报表")); +// salaryStatReportLoggerTemplate.write(loggerContext); +// } else { +// List list = listByName(saveParam.getReportName(), currentTenantKey); +// if (CollectionUtils.isNotEmpty(list)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 98080, "名称不允许重复")); +// } +// Long id = IdGenerator.generate(); +// SalaryStatisticsReportPO poNew = SalaryStatisticsReportPO.builder() +// .id(id) +// .reportName(saveParam.getReportName()) +// .dimension(Joiner.on(",").join(saveParam.getDimensionIds())) +// .createTime(now) +// .creator(currentEmployeeId) +// .updateTime(now) +// .deleteType(0) +// .tenantKey(currentTenantKey) +// .build(); +// this.salaryStatisticsReportMapper.insert(poNew); +// +// // 记录日志 +// LoggerContext loggerContext = new LoggerContext<>(); +// loggerContext.setTargetId(String.valueOf(poNew.getId())); +// loggerContext.setTargetName(poNew.getReportName()); +// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 152561, "新增报表")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 152561, "新增报表")); +// salaryStatReportLoggerTemplate.write(loggerContext); +// } +// return StringUtils.EMPTY; +// } +// +// @Override +// public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param) { +// SalaryAssert.notNull(param.getId(), SalaryI18nUtil.getI18nLabel(// 152562, "报表id不能为空")); +// if (Objects.isNull(param.getSalaryStartMonth()) || Objects.isNull(param.getSalaryEndMonth())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(// 100294, "薪资所属月必传")); +// } +// if ((CollectionUtils.isNotEmpty(param.getTaxAgent()) && param.getTaxAgent().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getIncomeCategory()) && param.getIncomeCategory().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getSubCompany()) && param.getSubCompany().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getGrade()) && param.getGrade().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getPosition()) && param.getPosition().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getStatus()) && param.getStatus().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getEmployee()) && param.getEmployee().size() > 10) +// ) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(// 182014, "统计数据范围条件数量过多")); +// } +// +// SalaryStatisticsReportPO po = getById(param.getId()); +// SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(// 152563, "报表不存在")); +// po.setSalaryStartMonth(param.getSalaryStartMonth().atDay(1)); +// po.setSalaryEndMonth(param.getSalaryEndMonth().atDay(1)); +// +// po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); +// po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); +// po.setSubCompanySetting(JSON.toJSONString(param.getSubCompany())); +// po.setDepartSetting(JSON.toJSONString(param.getDepartment())); +// po.setGradeSetting(JSON.toJSONString(param.getGrade())); +// po.setPositionSetting(JSON.toJSONString(param.getPosition())); +// po.setStatusSetting(JSON.toJSONString(param.getStatus())); +// po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); +// po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); +// po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); +// this.salaryStatisticsReportMapper.updateById(po); +// +// // 获取自定义统计项目 +// List salaryStatisticsItemList = salaryStatisticsItemService.listByStatisticsReportId(po.getId(), employeeId, tenantKey); +// +// salaryStatisticsItemList.forEach(e -> CollectionUtils.emptyIfNull(param.getItems()).stream().filter(i -> i.getId().equals(e.getId())).findFirst().ifPresent(salaryStatisticsItem -> { +// e.setUnitType(salaryStatisticsItem.getUnitType()); +// e.setIndexValue(salaryStatisticsItem.getIndexValue()); +// })); +// this.salaryStatisticsItemService.saveOrUpdateBatch(salaryStatisticsItemList); +// +// // 记录日志 +// LoggerContext loggerContext = new LoggerContext<>(); +// loggerContext.setTargetId(String.valueOf(po.getId())); +// loggerContext.setTargetName(po.getReportName()); +// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(// 152565, "更新报表")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(// 152565, "更新报表")); +// salaryStatReportLoggerTemplate.write(loggerContext); +// return StringUtils.EMPTY; +// } +// +// @Override +// public Map delete(Collection ids, Long currentEmployeeId, String currentTenantKey) { +// if (CollectionUtils.isEmpty(ids)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 84026, "参数错误")); +// } +// int total = ids.size(); +// List list = new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) +// .eq(SalaryStatisticsReportPO::getDeleteType, 0) +// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) +// .in(SalaryStatisticsReportPO::getId, ids) +// .list(); +// +// int success = list.size(); +// if (success>0) { +// List deleteIds = list.stream().map(SalaryStatisticsReportPO::getId).collect(Collectors.toList()); +// new LambdaUpdateChainWrapper<>(salaryStatisticsReportMapper) +// .eq(SalaryStatisticsReportPO::getDeleteType, 0) +// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) +// .in(SalaryStatisticsReportPO::getId, deleteIds) +// .set(SalaryStatisticsReportPO::getDeleteType, 1) +// .update(); +// +// list.forEach(e -> { +// // 记录日志 +// LoggerContext loggerContext = new LoggerContext<>(); +// loggerContext.setTargetId(String.valueOf(e.getId())); +// loggerContext.setTargetName(e.getReportName()); +// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 153162, "删除报表")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 153162, "删除报表")); +// salaryStatReportLoggerTemplate.write(loggerContext); +// }); +// } +// +// Map resultMap = new HashMap<>(2); +// String resultMsg = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 94620, "操作成功"); +// String resultType = "success"; +// // 单个设为定薪提示 +// if (total > 1) { +// resultMsg = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 134807, "成功条数") + ": "+ (success) + "; " +// + SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 134808, "失败条数") + ": "+ (total - success); +// if ((total - success) > 0) { +// resultType = "info"; +// } +// } else if (total == 1 && success < 1) { +// resultType = "info"; +// } +// resultMap.put("type", resultType); +// resultMap.put("msg", resultMsg); +// return resultMap; +// } +// +// @Override +// public PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po, List salaryStatisticsItemList, Long employeeId, String tenantKey) { +// Map checkMap = SalaryStatisticsReportBO.checkLoad(salaryStatisticsItemList); +// // 如果一个都没有,直接返回 +// if (!checkMap.get("isNow")) { +// return new Page<>(); +// } +// // 参数转换 +// SalaryStatisticsReportBO.poToQueryParam(param, po); +// +// // 获取本期报表分权后的核算人员 +// List list = salaryAcctEmployeeService.listBySalaryStatisticsReportParam(param, employeeId, tenantKey); +// SalaryStatisticsReportDataQueryParam lastParam = SalaryStatisticsReportBO.lastParamConvert(param, dimension); +// // 获取上期报表分权后的核算人员 +// List lastList = checkMap.get("isLast") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(lastParam, employeeId, tenantKey) : Lists.newArrayList(); +// SalaryStatisticsReportDataQueryParam sameParam = SalaryStatisticsReportBO.sameParamConvert(param); +// // 获取去年同期报表分权后的核算人员 +// List sameList = checkMap.get("isSame") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(sameParam, employeeId, tenantKey) : Lists.newArrayList(); +// +// SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder() +// .list(list) +// .lastList(lastList) +// .sameList(sameList) +// .salaryStatisticsItemList(salaryStatisticsItemList) +// .employeeId(employeeId) +// .tenantKey(tenantKey) +// .build(); +// +// List allList = Lists.newArrayList(); +// allList.addAll(list); +// allList.addAll(lastList); +// allList.addAll(sameList); +// Set salaryAcctEmployeeIds = allList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toSet()); +// List salaryAcctResultValues = salaryAcctResultValueService.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds, tenantKey); +// Map> salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultValuePO::getSalaryAcctEmployeeId, SalaryAcctResultValuePO::getResultValue); +// +// // 根据统计维度进行计算 +// return calculateReportRecordsByDimension(dimension, param, salaryStatisticsReportData, salaryAcctResultValueMap); +// } +// +// private Page> calculateReportRecordsByDimension(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// // 定性 +// if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(dimension.getDimType())) { +// switch (dimension.getDimCode()) { +// case SalaryStatisticsDimensionConstant.DM_SALARY_MONTH: +// return buildSalaryMonthRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_TAX_AGENT: +// return buildTaxAgentRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY: +// return buildIncomeCategoryRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_SUB_COMPANY: +// return buildSubComRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_DEPARTMENT: +// return buildDepartRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_POSITION: +// return buildPositionRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_GRADE: +// return buildGradeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: +// return buildStatusRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: +// return buildTypeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_EMPLOYEE: +// return buildEmployeeRecords(param, data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_QUARTER: +// return buildQuarterRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_HALF_YEAR: +// return buildHalfYearRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_YEAR: +// return buildYearRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_SEX: +// return buildSexRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_JOB_CALL: +// return buildJobCallRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_SUPERIOR: +// return buildSuperiorRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: +// return buildMaritalStatusRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_EDUCATION: +// return buildEducationRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_DEGREE: +// return buildDegreeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_NATION: +// return buildNationRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE: +// return buildHouseholdTypeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS: +// return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_AGE: +// return buildAgeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: +// return buildWorkYearRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: +// return buildCompanyYearRecords(data, salaryAcctResultValueMap); +// default: +// return new Page<>(); +// } +// // 定量-组距式分组 +// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { +// return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); +// // 定量-单项式分组 +// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { +// return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); +// } +// return new Page<>(); +// } +// +// private Page> buildSalaryMonthRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); +// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); +// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); +// List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); +// salaryMonthList.forEach(k -> { +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// result.setRecords(records); +// return result; +// } +// +// private Page> buildTaxAgentRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); +// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); +// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); +// +// List taxAgentList = taxAgentService.listAll(data.getTenantKey()); +// Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); +// +// listMap.forEach((k, v) -> { +// Map temp = new HashMap<>(); +// temp.put(DM, taxAgentMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); +// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); +// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); +// +// List incomeCategoryList = listMap.keySet().stream().sorted().collect(Collectors.toList()); +// incomeCategoryList.forEach(k -> { +// IncomeCategoryEnum incomeCategory = IncomeCategoryEnum.parseByValue(Integer.parseInt(k)); +// if (Objects.nonNull(incomeCategory)) { +// Map temp = new HashMap<>(); +// temp.put(DM, SalaryI18nUtil.getI18nLabel(incomeCategory.getLabelId(), incomeCategory.getDefaultLabel())); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// } +// }); +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildSubComRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, data.getTenantKey()); +// Map lastComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(lastEmployeeIds, data.getTenantKey()); +// Map sameComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(sameEmployeeIds, data.getTenantKey()); +// +// Set subComIds = new HashSet<>(); +// Map empIdSubComMap = new HashMap<>(); +// Map subComIdNameMap = new HashMap<>(); +// Map lastEmpIdSubComMap = new HashMap<>(); +// Map sameEmpIdSubComMap = new HashMap<>(); +// comInfoMap.forEach((k, v) -> { +// subComIdNameMap.put(v.getId(), v.getName()); +// empIdSubComMap.put(k, v.getId()); +// subComIds.add(v.getId()); +// }); +// lastComInfoMap.forEach((k, v) -> { +// lastEmpIdSubComMap.put(k, v.getId()); +// }); +// sameComInfoMap.forEach((k, v) -> { +// sameEmpIdSubComMap.put(k, v.getId()); +// }); +// +// subComIds.forEach(subComId -> { +// List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); +// List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); +// List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, subComIdNameMap.get(subComId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildDepartRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set departIds = new HashSet<>(); +// Map empIdDepartIdMap = new HashMap<>(); +// Map lastEmpIdDepartIdMap = new HashMap<>(); +// Map sameEmpIdDepartIdMap = new HashMap<>(); +// Map departIdNameMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { +// departIdNameMap.put(employee.getDepartment().getId(), employee.getDepartment().getName()); +// departIds.add(employee.getDepartment().getId()); +// empIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { +// lastEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { +// sameEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); +// } +// }); +// +// departIds.forEach(departId -> { +// List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); +// List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); +// List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, departIdNameMap.get(departId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildPositionRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set positionIds = new HashSet<>(); +// Map empIdPositionIdMap = new HashMap<>(); +// Map lastEmpIdPositionIdMap = new HashMap<>(); +// Map sameEmpIdPositionIdMap = new HashMap<>(); +// Map positionIdNameMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getPosition() != null && employee.getPosition().getId() != null) { +// positionIdNameMap.put(employee.getPosition().getId(), employee.getPosition().getName()); +// positionIds.add(employee.getPosition().getId()); +// empIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getPosition() != null && employee.getPosition().getId() != null) { +// lastEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getPosition() != null && employee.getPosition().getId() != null) { +// sameEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); +// } +// }); +// +// positionIds.forEach(positionId -> { +// List positionEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); +// List lastPositionEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); +// List samePositionEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, positionIdNameMap.get(positionId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(positionEmployeePOS, lastPositionEmployeePOS, samePositionEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildGradeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set gradeIds = new HashSet<>(); +// Map empIdGradeIdMap = new HashMap<>(); +// Map lastEmpIdGradeIdMap = new HashMap<>(); +// Map sameEmpIdGradeIdMap = new HashMap<>(); +// Map gradeIdNameMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getGrade() != null && employee.getGrade().getId() != null) { +// gradeIdNameMap.put(employee.getGrade().getId(), employee.getGrade().getName()); +// gradeIds.add(employee.getGrade().getId()); +// empIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getGrade() != null && employee.getGrade().getId() != null) { +// lastEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getGrade() != null && employee.getGrade().getId() != null) { +// sameEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); +// } +// }); +// +// gradeIds.forEach(gradeId -> { +// List gradeEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); +// List lastGradeEmployeePos = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); +// List sameGradeEmployeePos = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, gradeIdNameMap.get(gradeId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(gradeEmployeePOS, lastGradeEmployeePos, sameGradeEmployeePos, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// Map statusIdNameMap = hrmCommonHrmStatusService.list(data.getTenantKey()).stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(HrmStatus::getCodeId))), ArrayList::new)).stream().collect(Collectors.toMap(HrmStatus::getCodeId, HrmStatus::getName)); +// +// Set statusIds = new HashSet<>(); +// Map empIdStatusIdMap = new HashMap<>(); +// Map lastEmpIdStatusIdMap = new HashMap<>(); +// Map sameEmpIdStatusIdMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { +// statusIds.add(Long.valueOf(employee.getPersonnelStatus())); +// empIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { +// lastEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { +// sameEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); +// } +// }); +// +// statusIds.forEach(statusId -> { +// List statusEmployeePOS = data.getList().stream().filter(po -> com.google.common.base.Objects.equal(empIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); +// List lastStatusEmployeePOS = data.getLastList().stream().filter(po -> com.google.common.base.Objects.equal(lastEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); +// List sameStatusEmployeePOS = data.getSameList().stream().filter(po -> com.google.common.base.Objects.equal(sameEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, statusIdNameMap.get(statusId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(statusEmployeePOS, lastStatusEmployeePOS, sameStatusEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// Map> typeEmployeeListMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); +// Map> lastTypeEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); +// Map> sameTypeEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); +// +// typeEmployeeListMap.forEach((k, v) -> { +// Map temp = new HashMap<>(); +// temp.put(DM, Objects.equals(k, EmployeeTypeEnum.ORGANIZATION.getValue()) ? SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 110538, "内部人员") : SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 119127, "非系统人员")); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastTypeEmployeeListMap.get(k), sameTypeEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildEmployeeRecords(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// Page> result = new Page<>(param.getCurrent(), param.getPageSize(), employeeIds.size(), true); +// List> records = new ArrayList<>(); +// +// List pageEmployeeIds = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), employeeIds); +// List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); +// Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); +// Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); +// Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); +// Map employeeByIdMap = hrmCommonEmployeeService.getEmployeeByIds(accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()).stream().collect(Collectors.toMap(SimpleEmployee::getEmployeeId, SimpleEmployee::getUsername)); +// +// List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); +// Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); +// +// employeeListMap.forEach((k, v) -> { +// Map temp = new HashMap<>(); +// temp.put(DM, Objects.nonNull(employeeByIdMap.get(k)) ? employeeByIdMap.get(k) : employeeExtByIdMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildQuarterRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// Set quarterSet = Sets.newHashSet(); +// data.getList().forEach(sa ->quarterSet.add(ReportTimeUtil.getQuarter(sa.getSalaryMonth()))); +// List quarters = Lists.newArrayList(quarterSet).stream().sorted().collect(Collectors.toList()); +// Collections.reverse(quarters); +// +// quarters.forEach(k -> { +// List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(sa.getSalaryMonth()))).collect(Collectors.toList()); +// List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 3)))).collect(Collectors.toList()); +// List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildHalfYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// Set halfYearSet = Sets.newHashSet(); +// data.getList().forEach(sa ->halfYearSet.add(ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))); +// List halfYears = Lists.newArrayList(halfYearSet).stream().sorted().collect(Collectors.toList()); +// Collections.reverse(halfYears); +// +// halfYears.forEach(k -> { +// List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))).collect(Collectors.toList()); +// List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 6)))).collect(Collectors.toList()); +// List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// Set yearSet = Sets.newHashSet(); +// data.getList().forEach(sa -> yearSet.add(ReportTimeUtil.getYear(sa.getSalaryMonth()))); +// List years = Lists.newArrayList(yearSet).stream().sorted().collect(Collectors.toList()); +// Collections.reverse(years); +// +// years.forEach(k -> { +// List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); +// List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); +// List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildSexRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// Map sexMap = Arrays.stream(Sex.values()).collect(Collectors.toMap(Sex::getName, Sex::getDescription)); +// +// Map empIdSexIdMap = new HashMap<>(); +// Map lastEmpIdSexIdMap = new HashMap<>(); +// Map sameEmpIdSexIdMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getSex() != null) { +// empIdSexIdMap.put(employee.getId(), employee.getSex().getName()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getSex() != null) { +// lastEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getSex() != null) { +// sameEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); +// } +// }); +// +// sexMap.forEach((k, v) -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, v); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildJobCallRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set jobCallIds = Sets.newHashSet(); +// Map empIdJobCallIdMap = new HashMap<>(); +// Map lastEmpIdJobCallIdMap = new HashMap<>(); +// Map sameEmpIdJobCallIdMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getJobCall() != null) { +// empIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); +// jobCallIds.add(employee.getJobCall()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getJobCall() != null) { +// lastEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getJobCall() != null) { +// sameEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); +// } +// }); +// +// HrmJobCallParam jobCallParam = new HrmJobCallParam(); +// jobCallParam.setIds(Lists.newArrayList(jobCallIds)); +// jobCallParam.setEmployeeId(data.getEmployeeId()); +// jobCallParam.setTenantKey(data.getTenantKey()); +// List jobCallList = CollectionUtils.isEmpty(jobCallIds) ? Lists.newArrayList() : hrmJobCallRemoteService.getJobCallBrowserByIds(jobCallParam); +// Map jobCallIdMap = jobCallList.stream().collect(Collectors.toMap(BrowserDataDto::getId, BrowserDataDto::getName)); +// +// jobCallIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, jobCallIdMap.get(k.toString())); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildSuperiorRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set superiorIds = new HashSet<>(); +// Map empIdSuperiorIdMap = new HashMap<>(); +// Map lastEmpIdSuperiorIdMap = new HashMap<>(); +// Map sameEmpIdSuperiorIdMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { +// empIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); +// superiorIds.add(employee.getSuperior().getId()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { +// lastEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { +// sameEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); +// } +// }); +// +// List superiorList = CollectionUtils.isEmpty(superiorIds) ? Lists.newArrayList() : hrmCommonEmployeeService.getEmployeeByIds(Lists.newArrayList(superiorIds), data.getTenantKey()); +// Map superiorMap = superiorList.stream().collect(Collectors.toMap(SimpleEmployee::getId, SimpleEmployee::getUsername)); +// +// superiorIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, superiorMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildMaritalStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set maritalStatusIds = new HashSet<>(); +// +// Map empIdMaritalStatusMap = new HashMap<>(); +// Map lastEmpIdMaritalStatusMap = new HashMap<>(); +// Map sameEmpIdMaritalStatusMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { +// maritalStatusIds.add(employee.getMaritalStatus()); +// empIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { +// lastEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { +// sameEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); +// } +// }); +// Map maritalStatusMap = Maps.newHashMap(); +// maritalStatusMap.put("married", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174138, "已婚")); +// maritalStatusMap.put("unmarried", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174139, "未婚")); +// maritalStatusMap.put("divorced", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174140, "离异")); +// +// maritalStatusIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, maritalStatusMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// +// List simpleUserInfoList; +// List lastSimpleUserInfoList; +// List sameSimpleUserInfoList; +// Map> map = Maps.newHashMap(); +// try { +// simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); +// lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); +// sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); +// } catch (Exception e) { +// log.info("获取员工个人信息失败: {}", e.getMessage()); +// return map; +// } +// map.put(NOW_INFO, simpleUserInfoList); +// map.put(LAST_INFO, lastSimpleUserInfoList); +// map.put(SAME_INFO, sameSimpleUserInfoList); +// return map; +// } +// +// private Page> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set educationIds = new HashSet<>(); +// Map educationMap = Maps.newHashMap(); +// +// Map empIdEducationMap = new HashMap<>(); +// Map lastEmpIdEducationMap = new HashMap<>(); +// Map sameEmpIdEducationMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getEducation() != null && employee.getEducation().getId() != null) { +// educationIds.add(employee.getEducation().getId()); +// empIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); +// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getEducation() != null && employee.getEducation().getId() != null) { +// lastEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); +// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getEducation() != null && employee.getEducation().getId() != null) { +// sameEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); +// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); +// } +// }); +// +// educationIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, educationMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set degreeIds = new HashSet<>(); +// Map degreeMap = Maps.newHashMap(); +// +// Map empIdDegreeMap = new HashMap<>(); +// Map lastEmpIdDegreeMap = new HashMap<>(); +// Map sameEmpIdDegreeMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getDegree() != null && employee.getDegree().getId() != null) { +// degreeIds.add(employee.getDegree().getId()); +// empIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); +// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getDegree() != null && employee.getDegree().getId() != null) { +// lastEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); +// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getDegree() != null && employee.getDegree().getId() != null) { +// sameEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); +// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); +// } +// }); +// +// degreeIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, degreeMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set nationIds = new HashSet<>(); +// Map nationMap = Maps.newHashMap(); +// +// Map empIdNationMap = new HashMap<>(); +// Map lastEmpIdNationMap = new HashMap<>(); +// Map sameEmpIdNationMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getNation() != null && employee.getNation().getId() != null) { +// nationIds.add(employee.getNation().getId()); +// empIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); +// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getNation() != null && employee.getNation().getId() != null) { +// lastEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); +// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getNation() != null && employee.getNation().getId() != null) { +// sameEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); +// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); +// } +// }); +// +// nationIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, nationMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set householdTypeIds = new HashSet<>(); +// Map householdTypeMap = Maps.newHashMap(); +// +// Map empIdHouseholdTypeMap = new HashMap<>(); +// Map lastEmpIdHouseholdTypeMap = new HashMap<>(); +// Map sameEmpIdHouseholdTypeMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { +// householdTypeIds.add(employee.getHouseholdType().getId()); +// empIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); +// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { +// lastEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); +// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { +// sameEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); +// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); +// } +// }); +// +// householdTypeIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, householdTypeMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set politicsStatusIds = new HashSet<>(); +// Map politicsStatusMap = Maps.newHashMap(); +// +// Map empIdPoliticsStatusMap = new HashMap<>(); +// Map lastEmpIdPoliticsStatusMap = new HashMap<>(); +// Map sameEmpIdPoliticsStatusMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { +// politicsStatusIds.add(employee.getPoliticsStatus().getId()); +// empIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); +// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { +// lastEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); +// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { +// sameEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); +// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); +// } +// }); +// +// politicsStatusIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, politicsStatusMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// private Page> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set ageSet = new HashSet<>(); +// +// Map empIdAgeMap = new HashMap<>(); +// Map lastEmpIdAgeMap = new HashMap<>(); +// Map sameEmpIdAgeMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getAge() != null) { +// ageSet.add(employee.getAge()); +// empIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getAge() != null) { +// lastEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getAge() != null) { +// sameEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); +// } +// }); +// +// List ages = Lists.newArrayList(ageSet); +// ages = ages.stream().sorted().collect(Collectors.toList()); +// +// ages.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set workYearSet = new HashSet<>(); +// +// Map empIdWorkYearMap = new HashMap<>(); +// Map lastEmpIdWorkYearMap = new HashMap<>(); +// Map sameEmpIdWorkYearMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getWorkYear() != null) { +// workYearSet.add(employee.getWorkYear()); +// empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getWorkYear() != null) { +// lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getWorkYear() != null) { +// sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); +// } +// }); +// List workYears = Lists.newArrayList(workYearSet); +// workYears = workYears.stream().sorted().collect(Collectors.toList()); +// +// workYears.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set companyYearSet = new HashSet<>(); +// +// Map empIdCompanyYearMap = new HashMap<>(); +// Map lastEmpIdCompanyYearMap = new HashMap<>(); +// Map sameEmpIdCompanyYearMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { +// companyYearSet.add(employee.getCompanyYear()); +// empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { +// lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { +// sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// +// List companyYears = Lists.newArrayList(companyYearSet); +// companyYears = companyYears.stream().sorted().collect(Collectors.toList()); +// +// companyYears.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// // 分组设置 +// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); +// +// +// result.setRecords(records); +// return result; +// } +// +// private Page> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// // 分组设置 +// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); +// +// Map empIdYearMap = new HashMap<>(); +// Map lastEmpIdYearMap = new HashMap<>(); +// Map sameEmpIdYearMap = new HashMap<>(); +// +// String groupBelong; +// if (StringUtils.isEmpty(dimension.getDimCode())) { +// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { +// groupBelong = SalaryStatisticsReportBO.G_YEAR; +// // 年份数据 +// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); +// } else { +// groupBelong = SalaryStatisticsReportBO.G_ITEM; +// } +// groups.forEach(k -> { +// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setRecords(records); +// return result; +// } +// +// private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return; +// } +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { +// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { +// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { +// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { +// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { +// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { +// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { +// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { +// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { +// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// } +// +// private Page> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// Page> result = new Page<>(); +// List> records = new ArrayList<>(); +// +// // 分组设置 +// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupIndividual.class); +// Map empIdYearMap = new HashMap<>(); +// Map lastEmpIdYearMap = new HashMap<>(); +// Map sameEmpIdYearMap = new HashMap<>(); +// +// String groupBelong; +// if (StringUtils.isEmpty(dimension.getDimCode())) { +// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { +// groupBelong = SalaryStatisticsReportBO.G_YEAR; +// +// // 年份数据 +// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); +// } else { +// groupBelong = SalaryStatisticsReportBO.G_ITEM; +// } +// +// groups.forEach(k -> { +// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k.getValue()); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setRecords(records); +// return result; +// } +//} diff --git a/src/com/engine/salary/report/util/ReportDataUtil.java b/src/com/engine/salary/report/util/ReportDataUtil.java new file mode 100644 index 000000000..55a9bb769 --- /dev/null +++ b/src/com/engine/salary/report/util/ReportDataUtil.java @@ -0,0 +1,39 @@ +package com.engine.salary.report.util; + +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.regex.Pattern; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/9 + * @Version: v1.0 + */ +public class ReportDataUtil { + + private static final DecimalFormat decimalFormat = new DecimalFormat("#,##0.00"); + + private static final DecimalFormat decimalFormatSp = new DecimalFormat("#,##0.000"); + + public static String thousandthConvert(String originString) { + if (StringUtils.isNotEmpty(originString)) { + if (originString.contains(".") && (originString.split("\\.")[1]).length() == 3) { + return decimalFormatSp.format(Double.valueOf(originString)); + } + return decimalFormat.format(Double.valueOf(originString)); + } + return "0.00"; + } + + public static boolean zeroJudge(BigDecimal bigDecimal) { + return Pattern.compile("[0|.]*").matcher(bigDecimal.toPlainString()).matches(); + } + + public static boolean zeroJudge(String data) { + return Pattern.compile("[0|.]*").matcher(data).matches(); + } + +} diff --git a/src/com/engine/salary/report/util/ReportEnumUtil.java b/src/com/engine/salary/report/util/ReportEnumUtil.java new file mode 100644 index 000000000..4c3a290bd --- /dev/null +++ b/src/com/engine/salary/report/util/ReportEnumUtil.java @@ -0,0 +1,36 @@ +package com.engine.salary.report.util; + +import com.engine.salary.report.enums.DimensionEnum; +import com.engine.salary.report.enums.UnitTypeEnum; +import com.engine.salary.util.SalaryI18nUtil; + +import java.util.*; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/1 + * @Version: v1.0 + */ +public class ReportEnumUtil { + + public static Map unitTypeMap() { + Map unitTypeMap = new HashMap<>(); + Arrays.stream(UnitTypeEnum.values()).forEach(unitTypeEnum -> { + unitTypeMap.put(unitTypeEnum.getItem(), SalaryI18nUtil.getI18nLabel( unitTypeEnum.getLabelId(), unitTypeEnum.getDefaultValue())); + }); + return unitTypeMap; + } + + public static List> dimensionMap() { + List> result = new ArrayList<>(); + Arrays.stream(DimensionEnum.values()).forEach(dimensionEnum -> { + Map dimensionMap = new HashMap<>(); + dimensionMap.put("id", dimensionEnum.getValue().toString()); + dimensionMap.put("content", SalaryI18nUtil.getI18nLabel( dimensionEnum.getLabelId(), dimensionEnum.getDefaultLabel())); + result.add(dimensionMap); + }); + return result; + } + +} diff --git a/src/com/engine/salary/report/util/ReportTimeUtil.java b/src/com/engine/salary/report/util/ReportTimeUtil.java new file mode 100644 index 000000000..df7d82007 --- /dev/null +++ b/src/com/engine/salary/report/util/ReportTimeUtil.java @@ -0,0 +1,165 @@ +package com.engine.salary.report.util; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.time.*; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/8 + * @Version: v1.0 + */ +@Slf4j +public class ReportTimeUtil { + private static final DateTimeFormatter YEAR_MONTH = DateTimeFormatter.ofPattern("yyyy-MM"); + + public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + public static Map getLastRange(String startMonth, String endMonth) { + LocalDate start = LocalDate.parse(startMonth + "-01"); + LocalDate end = LocalDate.parse(endMonth + "-01"); + long between = ChronoUnit.MONTHS.between(start, end); + LocalDate lastEndMonth = start.plusMonths(-1); + LocalDate lastStartMonth = lastEndMonth.plusMonths(-between); + Map result = new HashMap<>(); + result.put("startMonth", YEAR_MONTH.format(lastStartMonth)); + result.put("endMonth", YEAR_MONTH.format(lastEndMonth)); + return result; + } + + public static String getQuarter(String billMonth) { + if (StringUtils.isBlank(billMonth)) { + return ""; + } + String[] split = billMonth.split("-"); + String year = split[0] + "年"; + String quarter = ""; + int month = Integer.parseInt(split[1]); + if (1 <= month && month <= 3) { + quarter = "1季度"; + } + if (4 <= month && month <= 6) { + quarter = "2季度"; + } + if (7 <= month && month <= 9) { + quarter = "3季度"; + } + if (10 <= month && month <= 12) { + quarter = "4季度"; + } + return year + quarter; + } + + public static String getHalfYear(String salaryMonth) { + if (StringUtils.isBlank(salaryMonth)) { + return ""; + } + String[] split = salaryMonth.split("-"); + String year = split[0] + "年-"; + String halfYear = ""; + int month = Integer.parseInt(split[1]); + if (1 <= month && month <= 6) { + halfYear = "上半年"; + } + if (7 <= month && month <= 12) { + halfYear = "下半年"; + } + return year + halfYear; + } + + public static String getYear(String billMonth) { + if (StringUtils.isEmpty(billMonth)) { + return ""; + } + String[] split = billMonth.split("-"); + return split[0] + "年"; + } + + public static String getFormatYearMonth(LocalDate localDate) { + if (localDate == null) { + return StringUtils.EMPTY; + } + try { + return localDate.format(YEAR_MONTH); + } catch (Exception e) { + log.warn("格式化月份错误", e); + return StringUtils.EMPTY; + } + } + + public static String getLastYear(String year) { + if (StringUtils.isEmpty(year)) { + return ""; + } + return (Integer.parseInt(year.replace("年", "")) - 1) + "年"; + } + + public static String getLastYearMonth(String yearMonth) { + return YEAR_MONTH.format(LocalDate.parse(yearMonth + "-01").plusMonths(-1)); + } + + public static String getSameYearMonth(String yearMonth) { + return YEAR_MONTH.format(LocalDate.parse(yearMonth + "-01").plusYears(-1)); + } + + public static String getPlusYearMonth(String yearMonth, long months) { + return YEAR_MONTH.format(LocalDate.parse(yearMonth + "-01").plusMonths(months)); + } + + public static String getLastQuarter(String quarter) { + if (StringUtils.isEmpty(quarter)) { + return ""; + } + String[] ym = quarter.split("年"); + String year = ym[0]; + String month = ym[1].split("季度")[0]; + if ("1".equals(month)) { + year = (Integer.parseInt(year) - 1) + ""; + return year + "年" + "4季度"; + } + return year + "年" + (Integer.parseInt(month) - 1) + "季度"; + } + + public static String[] getYearMonthRange(String startMonth, String endMonth) { + LocalDate start = LocalDate.parse(startMonth + "-01"); + LocalDate end = LocalDate.parse(endMonth + "-01"); + long between = ChronoUnit.MONTHS.between(start, end); + String[] result = new String[(int) between + 1]; + result[0] = startMonth; + for (int i = 1; i < between + 1; i++) { + start = start.plusMonths(1); + if (start.isBefore(end) || start.isEqual(end)) { + result[i] = YEAR_MONTH.format(start); + } + } + return result; + } + + public static String getFormatLocalDateTime(LocalDateTime localDateTime) { + if (localDateTime == null) { + return StringUtils.EMPTY; + } + try { + return localDateTime.format(DATE_TIME_FORMATTER); + } catch (Exception e) { + log.warn("格式化日期错误", e); + return StringUtils.EMPTY; + } + } + + public static LocalDate dateToLocalDate(Date date) { + if (date == null) { + return null; + } + Instant instant = date.toInstant(); + ZonedDateTime zone = instant.atZone(ZoneId.systemDefault()); + return zone.toLocalDate(); + } +} diff --git a/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java b/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java new file mode 100644 index 000000000..cd62346f7 --- /dev/null +++ b/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java @@ -0,0 +1,105 @@ +package com.engine.salary.report.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.report.entity.dto.SalaryStatisticsDimensionFormDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsDimensionListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; +import com.engine.salary.report.wrapper.SalaryStatisticsDimensionWrapper; +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.Collection; +import java.util.List; +import java.util.Map; + +/** + * @Description: 薪酬统计维度 + * @Author: wangxiangzhong + * @Date: 2022/12/15 11:40 + */ +public class SalaryStatisticsDimensionController { + + private SalaryStatisticsDimensionWrapper getSalaryStatisticsDimensionWrapper(User user) { + return ServiceUtil.getService(SalaryStatisticsDimensionWrapper.class, user); + } + + + /** + * 薪酬统计维度列表 + * + * @param queryParam + * @return + */ + @POST + @Path("/list") + @Produces(MediaType.APPLICATION_JSON) + public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsDimensionQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsDimensionWrapper(user)::list, queryParam); + } + + /** + * 获取薪酬统计维度表单 + * + * @return + */ + @GET + @Path("/getForm") + @Produces(MediaType.APPLICATION_JSON) + public String getForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id")Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsDimensionWrapper(user)::getFrom, id); + } + + + /** + * 保存薪酬统计维度 + * + * @param saveParam + * @return + */ + @POST + @Path("/save") + @Produces(MediaType.APPLICATION_JSON) + public String save(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsDimensionSaveParam saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsDimensionWrapper(user)::save, saveParam); + } + + /** + * 删除薪酬统计维度 + * + * @param ids + * @return + */ + @POST + @Path("/delete") + @Produces(MediaType.APPLICATION_JSON) + public String delete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody Collection ids) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>(user).run(getSalaryStatisticsDimensionWrapper(user)::delete, ids); + } + + /** + * 薪酬统计维度下拉列表 + * + * @return + */ + @GET + @Path("/selectList") + @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(getSalaryStatisticsDimensionWrapper(user)::selectList); + } + +} diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java new file mode 100644 index 000000000..d7a8d4540 --- /dev/null +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java @@ -0,0 +1,148 @@ +package com.engine.salary.report.wrapper; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.report.entity.dto.SalaryStatisticsDimensionFormDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsDimensionListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; +import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; +import com.engine.salary.report.enums.SalaryStatisticsDimensionTypeEnum; +import com.engine.salary.report.service.SalaryStatisticsDimensionService; +import com.engine.salary.report.service.impl.SalaryStatisticsDimensionServiceImpl; +import com.engine.salary.service.SalaryItemService; +import com.engine.salary.service.impl.SalaryItemServiceImpl; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Component; +import weaver.hrm.User; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 薪酬统计维度 + * @Author: wangxiangzhong + * @Date: 2022/12/15 13:46 + */ +@Component +public class SalaryStatisticsDimensionWrapper extends Service { + + + private SalaryStatisticsDimensionService salaryStatisticsDimensionService(User user) { + return ServiceUtil.getService(SalaryStatisticsDimensionServiceImpl.class, user); + } + + private SalaryItemService salaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + /** + * 薪酬统计维度列表 + * + * @param queryParam + * @return + */ + public PageInfo list(SalaryStatisticsDimensionQueryParam queryParam) { + PageInfo page = salaryStatisticsDimensionService(user).listPage(queryParam); + List list = page.getList(); + List dtoList= new ArrayList<>(); + if (CollectionUtils.isNotEmpty(list)) { + dtoList = list.stream().map(m -> SalaryStatisticsDimensionListDTO.builder() + .id(m.getId()) + .dimName(m.getDimName()) + .remark(m.getRemark()) + .dimType(SalaryStatisticsDimensionTypeEnum.getDefaultLabelByValue(m.getDimType())) + .isDefault(m.getIsDefault()) + .build()).collect(Collectors.toList()); + } + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), dtoList, SalaryStatisticsDimensionListDTO.class); + } + + /** + * 获取薪酬统计维度表单 + * + * @param id + * @return + */ + public SalaryStatisticsDimensionFormDTO getFrom(Long id) { + + Map baseForm = new HashMap<>(); + // 2.分组设置 + String groupSetting = "[]"; + if (id != null) { + + + SalaryStatisticsDimensionPO po = this.salaryStatisticsDimensionService(user).getById(id); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161116, "薪酬统计维度不存在")); + } + groupSetting = po.getSetting(); + Map result = JsonUtil.parseMap(po, Object.class); + if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(po.getDimType())) { + result.put("statsDim", po.getDimCode()); + } else { + result.put("groupDim", po.getDimCode()); + } + baseForm.put("data", result); + + /** + * 定量-组距式分组 + * [{"id":"1","includeStart":true,"startValue: "10086", "indludeEnd": true, "endValue:"19999"},{"id":"2","includeStart":true,"startValue":"10086","indludeEnd":true,"endValue":"19999"}] + * + * 定量-单项式分组 + * [{id:"3",value:"19999"},{id:"3",value:"19999"}] + */ + } else { + SalaryStatisticsDimensionPO po = SalaryStatisticsDimensionPO.builder() + .dimType(SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue()) + .build(); + baseForm.put("data", JsonUtil.parseMap(po, Object.class)); + } + + return SalaryStatisticsDimensionFormDTO.builder() + .id(id) + .baseForm(baseForm) + .groupSetting(groupSetting) + .build(); + } + + /** + * 保存薪酬统计维度 + * + * @param saveParam + * @return + */ + public String save(SalaryStatisticsDimensionSaveParam saveParam) { + return salaryStatisticsDimensionService(user).save(saveParam); + } + + /** + * 删除薪酬统计维度 + * + * @param ids + * @return + */ + public Map delete(Collection ids) { + return salaryStatisticsDimensionService(user).delete(ids); + } + + /** + * 薪酬统计维度下拉列表 + * + * @return + */ + public List> selectList() { + List salaryStatisticsDimensions = salaryStatisticsDimensionService(user).listAll(); + return salaryStatisticsDimensions.stream().map(m -> { + Map map = new HashMap<>(2); + map.put("id", String.valueOf(m.getId())); + map.put("content", m.getDimName()); + return map; + }).collect(Collectors.toList()); + } +} From 739904d48f0fe6ba0778d76a1e5179c1c3ee9e65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 10 Apr 2023 09:47:33 +0800 Subject: [PATCH 002/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/SalaryStatisticsReportController.java | 9 + .../report/SalaryStatisticsReportMapper.java | 71 + .../report/SalaryStatisticsReportMapper.xml | 445 +++ .../entity/bo/SalaryStatisticsReportBO.java | 35 +- .../SalaryStatisticsReportSaveParam.java | 3 +- .../entity/po/SalaryStatisticsReportPO.java | 10 + .../salary/report/enums/DeleteTypeEnum.java | 33 - .../SalaryStatisticsReportService.java | 146 +- .../SalaryStatisticsReportServiceImpl.java | 3336 ++++++++--------- .../web/SalaryStatisticsReportController.java | 134 + .../SalaryStatisticsReportWrapper.java | 386 ++ .../service/SalaryAcctEmployeeService.java | 22 +- .../impl/SalaryAcctEmployeeServiceImpl.java | 173 + 13 files changed, 2998 insertions(+), 1805 deletions(-) create mode 100644 src/com/api/salary/web/SalaryStatisticsReportController.java create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsReportMapper.java create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsReportMapper.xml delete mode 100644 src/com/engine/salary/report/enums/DeleteTypeEnum.java create mode 100644 src/com/engine/salary/report/web/SalaryStatisticsReportController.java create mode 100644 src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java diff --git a/src/com/api/salary/web/SalaryStatisticsReportController.java b/src/com/api/salary/web/SalaryStatisticsReportController.java new file mode 100644 index 000000000..70a08f7f9 --- /dev/null +++ b/src/com/api/salary/web/SalaryStatisticsReportController.java @@ -0,0 +1,9 @@ +package com.api.salary.web; + + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/report/statistics/report") +public class SalaryStatisticsReportController extends com.engine.salary.report.web.SalaryStatisticsReportController{ + +} diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsReportMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsReportMapper.java new file mode 100644 index 000000000..0a318ae78 --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsReportMapper.java @@ -0,0 +1,71 @@ +package com.engine.salary.mapper.report; + +import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface SalaryStatisticsReportMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryStatisticsReportPO SalaryStatisticsReportPO); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryStatisticsReportPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param SalaryStatisticsReportPO 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryStatisticsReportPO SalaryStatisticsReportPO); + + /** + * 修改,修改所有字段 + * + * @param SalaryStatisticsReportPO 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryStatisticsReportPO SalaryStatisticsReportPO); + + /** + * 修改,忽略null字段 + * + * @param SalaryStatisticsReportPO 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryStatisticsReportPO SalaryStatisticsReportPO); + + /** + * 删除记录 + * + * @param id 待删除的记录 + * @return 返回影响行数 + */ + int delete(Long id); + + /** + * 批量删除记录 + * @param ids 主键id集合 + * @return + */ + void deleteByIds(@Param("ids") Collection ids); +} diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsReportMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsReportMapper.xml new file mode 100644 index 000000000..2ba856784 --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsReportMapper.xml @@ -0,0 +1,445 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + t.create_time + , t.creator + , t.delete_type + , t.depart_setting + , t.dimension + , t.employee_setting + , t.grade_setting + , t.hiredate_setting + , t.id + , t.income_category_setting + , t.leavedate_setting + , t.position_setting + , t.remark + , t.report_name + , t.salary_end_month + , t.salary_start_month + , t.second_dimension + , t.sort_index + , t.sort_type + , t.status_setting + , t.sub_company_setting + , t.tax_agent_setting + , t.tenant_key + , t.update_time + + + + + + + + + + + + + + + INSERT INTO hrsa_salary_stats_report + + + + create_time, + + + creator, + + + delete_type, + + + depart_setting, + + + dimension, + + + employee_setting, + + + grade_setting, + + + hiredate_setting, + + + id, + + + income_category_setting, + + + leavedate_setting, + + + position_setting, + + + remark, + + + report_name, + + + salary_end_month, + + + salary_start_month, + + + second_dimension, + + + sort_index, + + + sort_type, + + + status_setting, + + + sub_company_setting, + + + tax_agent_setting, + + + tenant_key, + + + update_time, + + + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{departSetting}, + + + #{dimension}, + + + #{employeeSetting}, + + + #{gradeSetting}, + + + #{hiredateSetting}, + + + #{id}, + + + #{incomeCategorySetting}, + + + #{leavedateSetting}, + + + #{positionSetting}, + + + #{remark}, + + + #{reportName}, + + + #{salaryEndMonth}, + + + #{salaryStartMonth}, + + + #{secondDimension}, + + + #{sortIndex}, + + + #{sortType}, + + + #{statusSetting}, + + + #{subCompanySetting}, + + + #{taxAgentSetting}, + + + #{tenantKey}, + + + #{updateTime}, + + + + + + + UPDATE hrsa_salary_stats_report + + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + depart_setting=#{departSetting}, + dimension=#{dimension}, + employee_setting=#{employeeSetting}, + grade_setting=#{gradeSetting}, + hiredate_setting=#{hiredateSetting}, + income_category_setting=#{incomeCategorySetting}, + leavedate_setting=#{leavedateSetting}, + position_setting=#{positionSetting}, + remark=#{remark}, + report_name=#{reportName}, + salary_end_month=#{salaryEndMonth}, + salary_start_month=#{salaryStartMonth}, + second_dimension=#{secondDimension}, + sort_index=#{sortIndex}, + sort_type=#{sortType}, + status_setting=#{statusSetting}, + sub_company_setting=#{subCompanySetting}, + tax_agent_setting=#{taxAgentSetting}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_stats_report + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + depart_setting=#{departSetting}, + + + dimension=#{dimension}, + + + employee_setting=#{employeeSetting}, + + + grade_setting=#{gradeSetting}, + + + hiredate_setting=#{hiredateSetting}, + + + income_category_setting=#{incomeCategorySetting}, + + + leavedate_setting=#{leavedateSetting}, + + + position_setting=#{positionSetting}, + + + remark=#{remark}, + + + report_name=#{reportName}, + + + salary_end_month=#{salaryEndMonth}, + + + salary_start_month=#{salaryStartMonth}, + + + second_dimension=#{secondDimension}, + + + sort_index=#{sortIndex}, + + + sort_type=#{sortType}, + + + status_setting=#{statusSetting}, + + + sub_company_setting=#{subCompanySetting}, + + + tax_agent_setting=#{taxAgentSetting}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_stats_report + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + + UPDATE hrsa_salary_stats_report + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index 734c8c966..59adc16ad 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -8,6 +8,7 @@ import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; 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.enums.UnitTypeEnum; import com.engine.salary.report.util.ReportDataUtil; import com.engine.salary.report.util.ReportTimeUtil; @@ -81,23 +82,23 @@ public class SalaryStatisticsReportBO { * @param param * @param po */ -// public static void poToQueryParam(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po) { -// param.setSalaryStartMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryStartMonth())); -// param.setSalaryEndMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryEndMonth())); -// -// // todo 待优化 -// String key = "id"; -// param.setTaxAgent(JSON.parseArray(po.getTaxAgentSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setIncomeCategory(JSON.parseArray(po.getIncomeCategorySetting(), Map.class).stream().map(m -> Integer.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setSubCompany(JSON.parseArray(po.getSubCompanySetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setDepart(JSON.parseArray(po.getDepartSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setGrade(JSON.parseArray(po.getGradeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setPosition(JSON.parseArray(po.getPositionSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setStatus(JSON.parseArray(po.getStatusSetting(), Map.class).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); -// param.setEmployee(JSON.parseArray(po.getEmployeeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setHiredate(JSON.parseArray(po.getHiredateSetting(), LocalDate.class)); -// param.setLeavedate(JSON.parseArray(po.getLeavedateSetting(), LocalDate.class)); -// } + public static void poToQueryParam(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po) { + param.setSalaryStartMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryStartMonth())); + param.setSalaryEndMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryEndMonth())); + + // todo 待优化 + String key = "id"; + param.setTaxAgent(JSON.parseArray(po.getTaxAgentSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setIncomeCategory(JSON.parseArray(po.getIncomeCategorySetting(), Map.class).stream().map(m -> Integer.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setSubCompany(JSON.parseArray(po.getSubCompanySetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setDepart(JSON.parseArray(po.getDepartSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setGrade(JSON.parseArray(po.getGradeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setPosition(JSON.parseArray(po.getPositionSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setStatus(JSON.parseArray(po.getStatusSetting(), Map.class).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); + param.setEmployee(JSON.parseArray(po.getEmployeeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setHiredate(JSON.parseArray(po.getHiredateSetting(), LocalDate.class)); + param.setLeavedate(JSON.parseArray(po.getLeavedateSetting(), LocalDate.class)); + } /** * 参数转换获取上一期 diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java index ae15f161e..9cd380c79 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java @@ -2,7 +2,6 @@ package com.engine.salary.report.entity.param; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryI18nUtil; -import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; @@ -35,7 +34,7 @@ public class SalaryStatisticsReportSaveParam { private List dimensionIds; - public static void checkParam(SalaryStatisticsReportSaveParam saveParam, Long currentEmployeeId, String currentTenantKey) { + public static void checkParam(SalaryStatisticsReportSaveParam saveParam) { if (StringUtils.isEmpty(saveParam.getReportName())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 161842, "统计报表名称必填")); } diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java index d66a7b489..142d18623 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import java.io.Serializable; import java.time.LocalDate; +import java.util.Collection; import java.util.Date; /** @@ -29,6 +30,12 @@ public class SalaryStatisticsReportPO implements Serializable { //报表名称") private String reportName; + private String remark; + + private String secondDimension; + private String sortIndex; + private String sortType; + //统计维度") private String dimension; @@ -82,4 +89,7 @@ public class SalaryStatisticsReportPO implements Serializable { //更新时间", ignore = true) private Date updateTime; + + + Collection ids; } diff --git a/src/com/engine/salary/report/enums/DeleteTypeEnum.java b/src/com/engine/salary/report/enums/DeleteTypeEnum.java deleted file mode 100644 index 45b1ac94e..000000000 --- a/src/com/engine/salary/report/enums/DeleteTypeEnum.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.engine.salary.report.enums; - -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2021/11/19 14:20 - * @Version: v1.0 - */ -public enum DeleteTypeEnum { - - NOT_DELETED(0, "未删除"), - - DELETED(1, "已删除"), - - PHYSICAL_DELETED(3, "物理删除"); - - private Integer value; - - private String desc; - - DeleteTypeEnum(Integer value, String desc) { - this.value = value; - this.desc = desc; - } - - public Integer getValue() { - return value; - } - - public String getDesc() { - return desc; - } -} diff --git a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java index 3563441df..ae5f098a1 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java @@ -1,5 +1,17 @@ package com.engine.salary.report.service; +import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; +import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; +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.util.page.PageInfo; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + /** * @Description: 薪酬统计报表 * @Author: wangxiangzhong @@ -7,72 +19,70 @@ package com.engine.salary.report.service; */ public interface SalaryStatisticsReportService { -// /** -// * 获取所有薪酬报表 -// * -// * @return -// */ -// List listAll(); -// -// /** -// * 获取薪酬报表列表 -// * -// * @param currentEmployeeId -// * @param currentTenantKey -// * @return -// */ -// List list(Long currentEmployeeId, String currentTenantKey); -// -// /** -// * 获取单个薪酬统计报表 -// * -// * @param id -// * @param currentTenantKey -// * @return -// */ -// SalaryStatisticsReportPO getById(Long id, String currentTenantKey); -// -// /** -// * 保存薪酬统计报表 -// * -// * @param saveParam -// * @param currentEmployeeId -// * @param currentTenantKey -// * @return -// */ -// String save(SalaryStatisticsReportSaveParam saveParam, Long currentEmployeeId, String currentTenantKey); -// -// /** -// * 删除薪酬统计报表 -// * -// * @param ids -// * @param currentEmployeeId -// * @param currentTenantKey -// * @return -// */ -// Map delete(Collection ids, Long currentEmployeeId, String currentTenantKey); -// -// /** -// * 保存统计范围 -// * -// * @param param -// * @param currentEmployeeId -// * @param currentTenantKey -// * @return -// */ -// String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param); -// -// /** -// * 构建报表分页统计记录 -// * -// * -// * @param dimension -// * @param param -// * @param salaryStatisticsReport -// * @param salaryStatisticsItemList -// * @param employeeId -// * @param tenantKey -// * @return -// */ -// PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO salaryStatisticsReport, List salaryStatisticsItemList, Long employeeId, String tenantKey); + /** + * 获取所有薪酬报表 + * + * @return + */ + List listAll(); + + /** + * 获取薪酬报表列表 + * + * @param currentEmployeeId + * @param currentTenantKey + * @return + */ + List list(); + + /** + * 获取单个薪酬统计报表 + * + * @param id + * @param currentTenantKey + * @return + */ + SalaryStatisticsReportPO getById(Long id); + + /** + * 保存薪酬统计报表 + * + * @param saveParam + * @param currentEmployeeId + * @param currentTenantKey + * @return + */ + String save(SalaryStatisticsReportSaveParam saveParam ); + + /** + * 删除薪酬统计报表 + * + * @param ids + * @param currentEmployeeId + * @param currentTenantKey + * @return + */ + Map delete(Collection ids ); + + /** + * 保存统计范围 + * + * @param param + * @return + */ + String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param); + + /** + * 构建报表分页统计记录 + * + * + * @param dimension + * @param param + * @param salaryStatisticsReport + * @param salaryStatisticsItemList + * @param employeeId + * @param tenantKey + * @return + */ + PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO salaryStatisticsReport, List salaryStatisticsItemList, Long employeeId, String tenantKey); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 42ff15c2b..f0faeb69d 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -1,248 +1,230 @@ -//package com.engine.salary.report.service.impl; -// -//import com.alibaba.fastjson.JSON; -//import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -//import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; -//import com.engine.core.impl.Service; -//import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; -//import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; -//import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; -//import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; -//import com.engine.salary.report.service.SalaryStatisticsReportService; -//import com.engine.salary.util.SalaryAssert; -//import com.engine.salary.util.SalaryI18nUtil; -//import com.engine.salary.util.page.PageInfo; -//import com.google.common.base.Joiner; -//import com.google.common.collect.Lists; -//import com.google.common.collect.Maps; -//import com.google.common.collect.Sets; -//import com.weaver.common.component.table.page.Page; -//import com.weaver.common.distribution.genid.IdGenerator; -//import com.weaver.common.elog.dto.LoggerContext; -//import com.weaver.common.elog.util.LoggerTemplate; -//import com.weaver.common.hrm.cache.HrmDepartmentComInfo; -//import com.weaver.common.hrm.domain.employee.HrmStatus; -//import com.weaver.common.hrm.dto.jobcall.HrmJobCallParam; -//import com.weaver.common.hrm.entity.BrowserDataDto; -//import com.weaver.common.hrm.remote.jobcall.HrmJobCallRemoteService; -//import com.weaver.common.hrm.service.HrmCommonEmployeeService; -//import com.weaver.common.hrm.service.employee.HrmCommonHrmStatusService; -//import com.weaver.framework.rpc.annotation.RpcReference; -//import com.weaver.framework.util.JsonUtil; -//import com.weaver.salary.report.common.constant.SalaryStatisticsDimensionConstant; -//import com.weaver.salary.report.dao.SalaryStatisticsReportMapper; -//import com.weaver.salary.report.entity.bo.SalaryStatisticsReportBO; -//import com.weaver.salary.report.entity.dto.SalaryStatisticsReportDataDTO; -//import com.weaver.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; -//import com.weaver.salary.report.entity.param.SalaryStatisticsReportSaveParam; -//import com.weaver.salary.report.entity.po.*; -//import com.weaver.salary.report.enums.EmployeeTypeEnum; -//import com.weaver.salary.report.enums.IncomeCategoryEnum; -//import com.weaver.salary.report.enums.OperateTypeEnum; -//import com.weaver.salary.report.enums.SalaryStatisticsDimensionTypeEnum; -//import com.weaver.salary.report.exception.SalaryRunTimeException; -//import com.weaver.salary.report.service.*; -//import com.weaver.salary.report.util.*; -//import com.weaver.teams.api.user.Sex; -//import com.weaver.teams.domain.hr.SimpleUserInfo; -//import com.weaver.teams.domain.user.SimpleEmployee; -//import com.weaver.teams.hrapp.rest.RemoteUserInfoService; -//import org.apache.commons.collections4.CollectionUtils; -//import org.apache.commons.lang3.StringUtils; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.beans.BeanUtils; -//import org.springframework.beans.factory.annotation.Autowired; -// -//import javax.annotation.Resource; -//import java.time.LocalDateTime; -//import java.util.*; -//import java.util.stream.Collectors; -// -///** -// * @Description: 薪酬统计报表 -// * @Author: wangxiangzhong -// * @Date: 2022/12/15 14:09 -// */ -//public class SalaryStatisticsReportServiceImpl extends Service implements SalaryStatisticsReportService { -// -// private static final Logger log = LoggerFactory.getLogger(SalaryStatisticsReportServiceImpl.class); -// -// public static final String DM = "dimension"; -// public static final String NOW_INFO = "nowInfoList"; -// public static final String LAST_INFO = "lastInfoList"; -// public static final String SAME_INFO = "sameInfoList"; -// -// @Resource -// private SalaryStatisticsReportMapper salaryStatisticsReportMapper; -// @Resource -// private SalaryStatisticsItemService salaryStatisticsItemService; -// @Resource -// private SalaryAcctEmployeeService salaryAcctEmployeeService; -// @Resource -// private SalaryAcctResultValueService salaryAcctResultValueService; -// @Resource -// private TaxAgentService taxAgentService; -// @Resource -// private ExtEmployeeService extEmployeeService; -// @Autowired -// private HrmCommonEmployeeService hrmCommonEmployeeService; -// @RpcReference -// private HrmJobCallRemoteService hrmJobCallRemoteService; -// @RpcReference -// private RemoteUserInfoService remoteUserInfoService; -// @Autowired -// private HrmCommonHrmStatusService hrmCommonHrmStatusService; -// @Resource(name = "salaryStatReportLoggerTemplate") -// private LoggerTemplate salaryStatReportLoggerTemplate; -// -// @Override -// public List listAll() { -// return new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) -// .select(SalaryStatisticsReportPO::getId, SalaryStatisticsReportPO::getReportName, SalaryStatisticsReportPO::getDimension) -// .eq(SalaryStatisticsReportPO::getDeleteType, 0) -// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) -// .list(); -// } -// -// @Override -// public List list(Long currentEmployeeId, String currentTenantKey) { -// return new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) -// .select(SalaryStatisticsReportPO::getId, SalaryStatisticsReportPO::getReportName, SalaryStatisticsReportPO::getDimension) -// .eq(SalaryStatisticsReportPO::getDeleteType, 0) -// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) -// .eq(SalaryStatisticsReportPO::getCreator, currentEmployeeId) -// .orderByAsc(SalaryStatisticsReportPO::getId) -// .list(); -// } -// -// @Override -// public SalaryStatisticsReportPO getById(Long id, String currentTenantKey) { -// return new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) -// .eq(SalaryStatisticsReportPO::getDeleteType, 0) -// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) -// .eq(SalaryStatisticsReportPO::getId, id) -// .one(); -// } -// -// /** -// * 根据名称模糊查询 -// * -// * @param fieldName -// * @param currentTenantKey -// * @return -// */ -// private List listByName(String fieldName, String currentTenantKey) { -// return new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) -// .eq(SalaryStatisticsReportPO::getDeleteType, 0) -// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) -// .eq(SalaryStatisticsReportPO::getReportName, fieldName) -// .list(); -// } -// -// @Override -// public String save(SalaryStatisticsReportSaveParam saveParam, Long currentEmployeeId, String currentTenantKey) { -// SalaryStatisticsReportSaveParam.checkParam(saveParam, currentEmployeeId, currentTenantKey); -// -// LocalDateTime now = LocalDateTime.now(); -// if (saveParam.getId() != null) { -// SalaryStatisticsReportPO po = this.getById(saveParam.getId(), currentTenantKey); -// if (po == null) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 161845, "薪酬统计报表不存在")); -// } -// List list = listByName(saveParam.getReportName(), currentTenantKey); -// boolean nameExist = CollectionUtils.emptyIfNull(list).stream().anyMatch(e -> !Objects.equals(e.getId(), saveParam.getId())); -// if (nameExist) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 98080, "名称不允许重复")); -// } -// SalaryStatisticsReportPO poNew = new SalaryStatisticsReportPO(); -// BeanUtils.copyProperties(po, poNew); -// poNew.setReportName(saveParam.getReportName()); -// poNew.setDimension(Joiner.on(",").join(saveParam.getDimensionIds())); -// this.salaryStatisticsReportMapper.updateById(poNew); -// -// // 记录日志 +package com.engine.salary.report.service.impl; + +import com.alibaba.fastjson.JSON; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.report.SalaryStatisticsReportMapper; +import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; +import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; +import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; +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.SalaryStatisticsReportService; +import com.engine.salary.service.SalaryAcctEmployeeService; +import com.engine.salary.service.SalaryAcctResultService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.util.SalaryAssert; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.weaver.common.component.table.page.Page; +import com.weaver.common.elog.util.LoggerTemplate; +import com.weaver.common.hrm.cache.HrmDepartmentComInfo; +import com.weaver.common.hrm.domain.employee.HrmStatus; +import com.weaver.common.hrm.dto.jobcall.HrmJobCallParam; +import com.weaver.common.hrm.entity.BrowserDataDto; +import com.weaver.common.hrm.remote.jobcall.HrmJobCallRemoteService; +import com.weaver.common.hrm.service.HrmCommonEmployeeService; +import com.weaver.common.hrm.service.employee.HrmCommonHrmStatusService; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.framework.util.JsonUtil; +import com.weaver.salary.report.common.constant.SalaryStatisticsDimensionConstant; +import com.weaver.salary.report.entity.dto.SalaryStatisticsReportDataDTO; +import com.weaver.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; +import com.weaver.salary.report.entity.po.*; +import com.weaver.salary.report.enums.EmployeeTypeEnum; +import com.weaver.salary.report.enums.IncomeCategoryEnum; +import com.weaver.salary.report.enums.SalaryStatisticsDimensionTypeEnum; +import com.weaver.salary.report.service.*; +import com.weaver.salary.report.util.*; +import com.weaver.teams.api.user.Sex; +import com.weaver.teams.domain.hr.SimpleUserInfo; +import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.hrapp.rest.RemoteUserInfoService; +import dm.jdbc.util.IdGenerator; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 薪酬统计报表 + * @Author: wangxiangzhong + * @Date: 2022/12/15 14:09 + */ +public class SalaryStatisticsReportServiceImpl extends Service implements SalaryStatisticsReportService { + + private static final Logger log = LoggerFactory.getLogger(SalaryStatisticsReportServiceImpl.class); + + public static final String DM = "dimension"; + public static final String NOW_INFO = "nowInfoList"; + public static final String LAST_INFO = "lastInfoList"; + public static final String SAME_INFO = "sameInfoList"; + + @Resource + private SalaryStatisticsReportMapper salaryStatisticsReportMapper; + @Resource + private SalaryStatisticsItemService salaryStatisticsItemService; + @Resource + private SalaryAcctEmployeeService salaryAcctEmployeeService; + @Resource + private SalaryAcctResultService salaryAcctResultValueService; + @Resource + private TaxAgentService taxAgentService; + @Resource + private ExtEmployeeService extEmployeeService; + @Autowired + private HrmCommonEmployeeService hrmCommonEmployeeService; + @RpcReference + private HrmJobCallRemoteService hrmJobCallRemoteService; + @RpcReference + private RemoteUserInfoService remoteUserInfoService; + @Autowired + private HrmCommonHrmStatusService hrmCommonHrmStatusService; + @Resource(name = "salaryStatReportLoggerTemplate") + private LoggerTemplate salaryStatReportLoggerTemplate; + + @Override + public List listAll() { + return salaryStatisticsReportMapper.listAll(); + } + + @Override + public List list() { + return salaryStatisticsReportMapper.listSome(SalaryStatisticsReportPO.builder().creator((long)user.getUID()).build()); + } + + @Override + public SalaryStatisticsReportPO getById(Long id) { + return salaryStatisticsReportMapper.getById(id); + } + + /** + * 根据名称模糊查询 + * + * @param fieldName + * @return + */ + private List listByName(String fieldName) { + return salaryStatisticsReportMapper.listSome(SalaryStatisticsReportPO.builder().reportName(fieldName).build()); + } + + @Override + public String save(SalaryStatisticsReportSaveParam saveParam) { + SalaryStatisticsReportSaveParam.checkParam(saveParam); + + LocalDateTime now = LocalDateTime.now(); + if (saveParam.getId() != null) { + SalaryStatisticsReportPO po = this.getById(saveParam.getId()); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 161845, "薪酬统计报表不存在")); + } + List list = listByName(saveParam.getReportName()); + boolean nameExist = list.stream().anyMatch(e -> !Objects.equals(e.getId(), saveParam.getId())); + if (nameExist) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 98080, "名称不允许重复")); + } + SalaryStatisticsReportPO poNew = new SalaryStatisticsReportPO(); + BeanUtils.copyProperties(po, poNew); + poNew.setReportName(saveParam.getReportName()); + poNew.setDimension(Joiner.on(",").join(saveParam.getDimensionIds())); + this.salaryStatisticsReportMapper.updateIgnoreNull(poNew); + + // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); // loggerContext.setTargetId(String.valueOf(poNew.getId())); // loggerContext.setTargetName(poNew.getReportName()); // loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 152565, "更新报表")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 152565, "更新报表")); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 152565, "更新报表")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 152565, "更新报表")); // salaryStatReportLoggerTemplate.write(loggerContext); -// } else { -// List list = listByName(saveParam.getReportName(), currentTenantKey); -// if (CollectionUtils.isNotEmpty(list)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 98080, "名称不允许重复")); -// } -// Long id = IdGenerator.generate(); -// SalaryStatisticsReportPO poNew = SalaryStatisticsReportPO.builder() -// .id(id) -// .reportName(saveParam.getReportName()) -// .dimension(Joiner.on(",").join(saveParam.getDimensionIds())) -// .createTime(now) -// .creator(currentEmployeeId) -// .updateTime(now) -// .deleteType(0) -// .tenantKey(currentTenantKey) -// .build(); -// this.salaryStatisticsReportMapper.insert(poNew); -// -// // 记录日志 + } else { + List list = listByName(saveParam.getReportName()); + if (CollectionUtils.isNotEmpty(list)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 98080, "名称不允许重复")); + } + Long id = IdGenerator.generate(); + SalaryStatisticsReportPO poNew = SalaryStatisticsReportPO.builder() + .id(id) + .reportName(saveParam.getReportName()) + .dimension(Joiner.on(",").join(saveParam.getDimensionIds())) + .createTime(now) + .creator(user.getUID()) + .updateTime(now) + .deleteType(0) + .tenantKey("") + .build(); + salaryStatisticsReportMapper.insertIgnoreNull(poNew); + + // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); // loggerContext.setTargetId(String.valueOf(poNew.getId())); // loggerContext.setTargetName(poNew.getReportName()); // loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 152561, "新增报表")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 152561, "新增报表")); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 152561, "新增报表")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 152561, "新增报表")); // salaryStatReportLoggerTemplate.write(loggerContext); -// } -// return StringUtils.EMPTY; -// } -// -// @Override -// public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param) { -// SalaryAssert.notNull(param.getId(), SalaryI18nUtil.getI18nLabel(// 152562, "报表id不能为空")); -// if (Objects.isNull(param.getSalaryStartMonth()) || Objects.isNull(param.getSalaryEndMonth())) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(// 100294, "薪资所属月必传")); -// } -// if ((CollectionUtils.isNotEmpty(param.getTaxAgent()) && param.getTaxAgent().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getIncomeCategory()) && param.getIncomeCategory().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getSubCompany()) && param.getSubCompany().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getGrade()) && param.getGrade().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getPosition()) && param.getPosition().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getStatus()) && param.getStatus().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getEmployee()) && param.getEmployee().size() > 10) -// ) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(// 182014, "统计数据范围条件数量过多")); -// } -// -// SalaryStatisticsReportPO po = getById(param.getId()); -// SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(// 152563, "报表不存在")); -// po.setSalaryStartMonth(param.getSalaryStartMonth().atDay(1)); -// po.setSalaryEndMonth(param.getSalaryEndMonth().atDay(1)); -// -// po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); -// po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); -// po.setSubCompanySetting(JSON.toJSONString(param.getSubCompany())); -// po.setDepartSetting(JSON.toJSONString(param.getDepartment())); -// po.setGradeSetting(JSON.toJSONString(param.getGrade())); -// po.setPositionSetting(JSON.toJSONString(param.getPosition())); -// po.setStatusSetting(JSON.toJSONString(param.getStatus())); -// po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); -// po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); -// po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); -// this.salaryStatisticsReportMapper.updateById(po); -// -// // 获取自定义统计项目 -// List salaryStatisticsItemList = salaryStatisticsItemService.listByStatisticsReportId(po.getId(), employeeId, tenantKey); -// -// salaryStatisticsItemList.forEach(e -> CollectionUtils.emptyIfNull(param.getItems()).stream().filter(i -> i.getId().equals(e.getId())).findFirst().ifPresent(salaryStatisticsItem -> { -// e.setUnitType(salaryStatisticsItem.getUnitType()); -// e.setIndexValue(salaryStatisticsItem.getIndexValue()); -// })); -// this.salaryStatisticsItemService.saveOrUpdateBatch(salaryStatisticsItemList); -// -// // 记录日志 + } + return StringUtils.EMPTY; + } + + @Override + public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param) { + SalaryAssert.notNull(param.getId(), SalaryI18nUtil.getI18nLabel(152562, "报表id不能为空")); + if (Objects.isNull(param.getSalaryStartMonth()) || Objects.isNull(param.getSalaryEndMonth())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100294, "薪资所属月必传")); + } + if ((CollectionUtils.isNotEmpty(param.getTaxAgent()) && param.getTaxAgent().size() > 10) + || (CollectionUtils.isNotEmpty(param.getIncomeCategory()) && param.getIncomeCategory().size() > 10) + || (CollectionUtils.isNotEmpty(param.getSubCompany()) && param.getSubCompany().size() > 10) + || (CollectionUtils.isNotEmpty(param.getGrade()) && param.getGrade().size() > 10) + || (CollectionUtils.isNotEmpty(param.getPosition()) && param.getPosition().size() > 10) + || (CollectionUtils.isNotEmpty(param.getStatus()) && param.getStatus().size() > 10) + || (CollectionUtils.isNotEmpty(param.getEmployee()) && param.getEmployee().size() > 10) + ) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182014, "统计数据范围条件数量过多")); + } + + SalaryStatisticsReportPO po = getById(param.getId()); + SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); + po.setSalaryStartMonth(param.getSalaryStartMonth().atDay(1)); + po.setSalaryEndMonth(param.getSalaryEndMonth().atDay(1)); + + po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); + po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); + po.setSubCompanySetting(JSON.toJSONString(param.getSubCompany())); + po.setDepartSetting(JSON.toJSONString(param.getDepartment())); + po.setGradeSetting(JSON.toJSONString(param.getGrade())); + po.setPositionSetting(JSON.toJSONString(param.getPosition())); + po.setStatusSetting(JSON.toJSONString(param.getStatus())); + po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); + po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); + po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); + salaryStatisticsReportMapper.updateIgnoreNull(po); + + // 获取自定义统计项目 + List salaryStatisticsItemList = salaryStatisticsItemService.listByStatisticsReportId(po.getId()); + + salaryStatisticsItemList.forEach(e -> param.getItems().stream().filter(i -> i.getId().equals(e.getId())).findFirst().ifPresent(salaryStatisticsItem -> { + e.setUnitType(salaryStatisticsItem.getUnitType()); + e.setIndexValue(salaryStatisticsItem.getIndexValue()); + })); + this.salaryStatisticsItemService.saveOrUpdateBatch(salaryStatisticsItemList); + + // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); // loggerContext.setTargetId(String.valueOf(po.getId())); // loggerContext.setTargetName(po.getReportName()); @@ -250,1457 +232,1449 @@ // loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(// 152565, "更新报表")); // loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(// 152565, "更新报表")); // salaryStatReportLoggerTemplate.write(loggerContext); -// return StringUtils.EMPTY; -// } -// -// @Override -// public Map delete(Collection ids, Long currentEmployeeId, String currentTenantKey) { -// if (CollectionUtils.isEmpty(ids)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 84026, "参数错误")); -// } -// int total = ids.size(); -// List list = new LambdaQueryChainWrapper<>(salaryStatisticsReportMapper) -// .eq(SalaryStatisticsReportPO::getDeleteType, 0) -// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) -// .in(SalaryStatisticsReportPO::getId, ids) -// .list(); -// -// int success = list.size(); -// if (success>0) { -// List deleteIds = list.stream().map(SalaryStatisticsReportPO::getId).collect(Collectors.toList()); -// new LambdaUpdateChainWrapper<>(salaryStatisticsReportMapper) -// .eq(SalaryStatisticsReportPO::getDeleteType, 0) -// .eq(SalaryStatisticsReportPO::getTenantKey, currentTenantKey) -// .in(SalaryStatisticsReportPO::getId, deleteIds) -// .set(SalaryStatisticsReportPO::getDeleteType, 1) -// .update(); -// + return StringUtils.EMPTY; + } + + @Override + public Map delete(Collection ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 84026, "参数错误")); + } + int total = ids.size(); + List list = salaryStatisticsReportMapper.listSome(SalaryStatisticsReportPO.builder().ids(ids).build()); + + int success = list.size(); + if (success>0) { + List deleteIds = list.stream().map(SalaryStatisticsReportPO::getId).collect(Collectors.toList()); + salaryStatisticsReportMapper.deleteByIds(deleteIds); + + // list.forEach(e -> { // // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); // loggerContext.setTargetId(String.valueOf(e.getId())); // loggerContext.setTargetName(e.getReportName()); // loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); -// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 153162, "删除报表")); -// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 153162, "删除报表")); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 153162, "删除报表")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 153162, "删除报表")); // salaryStatReportLoggerTemplate.write(loggerContext); // }); -// } -// -// Map resultMap = new HashMap<>(2); -// String resultMsg = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 94620, "操作成功"); -// String resultType = "success"; -// // 单个设为定薪提示 -// if (total > 1) { -// resultMsg = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 134807, "成功条数") + ": "+ (success) + "; " -// + SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 134808, "失败条数") + ": "+ (total - success); -// if ((total - success) > 0) { -// resultType = "info"; -// } -// } else if (total == 1 && success < 1) { -// resultType = "info"; -// } -// resultMap.put("type", resultType); -// resultMap.put("msg", resultMsg); -// return resultMap; -// } -// -// @Override -// public PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po, List salaryStatisticsItemList, Long employeeId, String tenantKey) { -// Map checkMap = SalaryStatisticsReportBO.checkLoad(salaryStatisticsItemList); -// // 如果一个都没有,直接返回 -// if (!checkMap.get("isNow")) { -// return new Page<>(); -// } -// // 参数转换 -// SalaryStatisticsReportBO.poToQueryParam(param, po); -// -// // 获取本期报表分权后的核算人员 -// List list = salaryAcctEmployeeService.listBySalaryStatisticsReportParam(param, employeeId, tenantKey); -// SalaryStatisticsReportDataQueryParam lastParam = SalaryStatisticsReportBO.lastParamConvert(param, dimension); -// // 获取上期报表分权后的核算人员 -// List lastList = checkMap.get("isLast") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(lastParam, employeeId, tenantKey) : Lists.newArrayList(); -// SalaryStatisticsReportDataQueryParam sameParam = SalaryStatisticsReportBO.sameParamConvert(param); -// // 获取去年同期报表分权后的核算人员 -// List sameList = checkMap.get("isSame") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(sameParam, employeeId, tenantKey) : Lists.newArrayList(); -// -// SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder() -// .list(list) -// .lastList(lastList) -// .sameList(sameList) -// .salaryStatisticsItemList(salaryStatisticsItemList) -// .employeeId(employeeId) -// .tenantKey(tenantKey) -// .build(); -// -// List allList = Lists.newArrayList(); -// allList.addAll(list); -// allList.addAll(lastList); -// allList.addAll(sameList); -// Set salaryAcctEmployeeIds = allList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toSet()); -// List salaryAcctResultValues = salaryAcctResultValueService.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds, tenantKey); -// Map> salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultValuePO::getSalaryAcctEmployeeId, SalaryAcctResultValuePO::getResultValue); -// -// // 根据统计维度进行计算 -// return calculateReportRecordsByDimension(dimension, param, salaryStatisticsReportData, salaryAcctResultValueMap); -// } -// -// private Page> calculateReportRecordsByDimension(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// // 定性 -// if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(dimension.getDimType())) { -// switch (dimension.getDimCode()) { -// case SalaryStatisticsDimensionConstant.DM_SALARY_MONTH: -// return buildSalaryMonthRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_TAX_AGENT: -// return buildTaxAgentRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY: -// return buildIncomeCategoryRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_SUB_COMPANY: -// return buildSubComRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_DEPARTMENT: -// return buildDepartRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_POSITION: -// return buildPositionRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_GRADE: -// return buildGradeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: -// return buildStatusRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: -// return buildTypeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_EMPLOYEE: -// return buildEmployeeRecords(param, data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_QUARTER: -// return buildQuarterRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_HALF_YEAR: -// return buildHalfYearRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_YEAR: -// return buildYearRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_SEX: -// return buildSexRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_JOB_CALL: -// return buildJobCallRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_SUPERIOR: -// return buildSuperiorRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: -// return buildMaritalStatusRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_EDUCATION: -// return buildEducationRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_DEGREE: -// return buildDegreeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_NATION: -// return buildNationRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE: -// return buildHouseholdTypeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS: -// return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_AGE: -// return buildAgeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: -// return buildWorkYearRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: -// return buildCompanyYearRecords(data, salaryAcctResultValueMap); -// default: -// return new Page<>(); -// } -// // 定量-组距式分组 -// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { -// return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); -// // 定量-单项式分组 -// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { -// return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); -// } -// return new Page<>(); -// } -// -// private Page> buildSalaryMonthRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); -// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); -// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); -// List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); -// salaryMonthList.forEach(k -> { -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// result.setRecords(records); -// return result; -// } -// -// private Page> buildTaxAgentRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); -// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); -// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); -// -// List taxAgentList = taxAgentService.listAll(data.getTenantKey()); -// Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); -// -// listMap.forEach((k, v) -> { -// Map temp = new HashMap<>(); -// temp.put(DM, taxAgentMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); -// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); -// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); -// -// List incomeCategoryList = listMap.keySet().stream().sorted().collect(Collectors.toList()); -// incomeCategoryList.forEach(k -> { -// IncomeCategoryEnum incomeCategory = IncomeCategoryEnum.parseByValue(Integer.parseInt(k)); -// if (Objects.nonNull(incomeCategory)) { -// Map temp = new HashMap<>(); -// temp.put(DM, SalaryI18nUtil.getI18nLabel(incomeCategory.getLabelId(), incomeCategory.getDefaultLabel())); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// } -// }); -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildSubComRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, data.getTenantKey()); -// Map lastComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(lastEmployeeIds, data.getTenantKey()); -// Map sameComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(sameEmployeeIds, data.getTenantKey()); -// -// Set subComIds = new HashSet<>(); -// Map empIdSubComMap = new HashMap<>(); -// Map subComIdNameMap = new HashMap<>(); -// Map lastEmpIdSubComMap = new HashMap<>(); -// Map sameEmpIdSubComMap = new HashMap<>(); -// comInfoMap.forEach((k, v) -> { -// subComIdNameMap.put(v.getId(), v.getName()); -// empIdSubComMap.put(k, v.getId()); -// subComIds.add(v.getId()); -// }); -// lastComInfoMap.forEach((k, v) -> { -// lastEmpIdSubComMap.put(k, v.getId()); -// }); -// sameComInfoMap.forEach((k, v) -> { -// sameEmpIdSubComMap.put(k, v.getId()); -// }); -// -// subComIds.forEach(subComId -> { -// List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); -// List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); -// List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, subComIdNameMap.get(subComId)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildDepartRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); -// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); -// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); -// -// Set departIds = new HashSet<>(); -// Map empIdDepartIdMap = new HashMap<>(); -// Map lastEmpIdDepartIdMap = new HashMap<>(); -// Map sameEmpIdDepartIdMap = new HashMap<>(); -// Map departIdNameMap = new HashMap<>(); -// simpleEmployeeList.forEach(employee -> { -// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { -// departIdNameMap.put(employee.getDepartment().getId(), employee.getDepartment().getName()); -// departIds.add(employee.getDepartment().getId()); -// empIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); -// } -// }); -// lastSimpleEmployeeList.forEach(employee -> { -// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { -// lastEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); -// } -// }); -// sameSimpleEmployeeList.forEach(employee -> { -// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { -// sameEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); -// } -// }); -// -// departIds.forEach(departId -> { -// List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); -// List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); -// List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, departIdNameMap.get(departId)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildPositionRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); -// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); -// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); -// -// Set positionIds = new HashSet<>(); -// Map empIdPositionIdMap = new HashMap<>(); -// Map lastEmpIdPositionIdMap = new HashMap<>(); -// Map sameEmpIdPositionIdMap = new HashMap<>(); -// Map positionIdNameMap = new HashMap<>(); -// simpleEmployeeList.forEach(employee -> { -// if (employee.getPosition() != null && employee.getPosition().getId() != null) { -// positionIdNameMap.put(employee.getPosition().getId(), employee.getPosition().getName()); -// positionIds.add(employee.getPosition().getId()); -// empIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); -// } -// }); -// lastSimpleEmployeeList.forEach(employee -> { -// if (employee.getPosition() != null && employee.getPosition().getId() != null) { -// lastEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); -// } -// }); -// sameSimpleEmployeeList.forEach(employee -> { -// if (employee.getPosition() != null && employee.getPosition().getId() != null) { -// sameEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); -// } -// }); -// -// positionIds.forEach(positionId -> { -// List positionEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); -// List lastPositionEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); -// List samePositionEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, positionIdNameMap.get(positionId)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(positionEmployeePOS, lastPositionEmployeePOS, samePositionEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildGradeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); -// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); -// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); -// -// Set gradeIds = new HashSet<>(); -// Map empIdGradeIdMap = new HashMap<>(); -// Map lastEmpIdGradeIdMap = new HashMap<>(); -// Map sameEmpIdGradeIdMap = new HashMap<>(); -// Map gradeIdNameMap = new HashMap<>(); -// simpleEmployeeList.forEach(employee -> { -// if (employee.getGrade() != null && employee.getGrade().getId() != null) { -// gradeIdNameMap.put(employee.getGrade().getId(), employee.getGrade().getName()); -// gradeIds.add(employee.getGrade().getId()); -// empIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); -// } -// }); -// lastSimpleEmployeeList.forEach(employee -> { -// if (employee.getGrade() != null && employee.getGrade().getId() != null) { -// lastEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); -// } -// }); -// sameSimpleEmployeeList.forEach(employee -> { -// if (employee.getGrade() != null && employee.getGrade().getId() != null) { -// sameEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); -// } -// }); -// -// gradeIds.forEach(gradeId -> { -// List gradeEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); -// List lastGradeEmployeePos = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); -// List sameGradeEmployeePos = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, gradeIdNameMap.get(gradeId)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(gradeEmployeePOS, lastGradeEmployeePos, sameGradeEmployeePos, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); -// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); -// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); -// Map statusIdNameMap = hrmCommonHrmStatusService.list(data.getTenantKey()).stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(HrmStatus::getCodeId))), ArrayList::new)).stream().collect(Collectors.toMap(HrmStatus::getCodeId, HrmStatus::getName)); -// -// Set statusIds = new HashSet<>(); -// Map empIdStatusIdMap = new HashMap<>(); -// Map lastEmpIdStatusIdMap = new HashMap<>(); -// Map sameEmpIdStatusIdMap = new HashMap<>(); -// simpleEmployeeList.forEach(employee -> { -// if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { -// statusIds.add(Long.valueOf(employee.getPersonnelStatus())); -// empIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); -// } -// }); -// lastSimpleEmployeeList.forEach(employee -> { -// if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { -// lastEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); -// } -// }); -// sameSimpleEmployeeList.forEach(employee -> { -// if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { -// sameEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); -// } -// }); -// -// statusIds.forEach(statusId -> { -// List statusEmployeePOS = data.getList().stream().filter(po -> com.google.common.base.Objects.equal(empIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); -// List lastStatusEmployeePOS = data.getLastList().stream().filter(po -> com.google.common.base.Objects.equal(lastEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); -// List sameStatusEmployeePOS = data.getSameList().stream().filter(po -> com.google.common.base.Objects.equal(sameEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, statusIdNameMap.get(statusId)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(statusEmployeePOS, lastStatusEmployeePOS, sameStatusEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// Map> typeEmployeeListMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); -// Map> lastTypeEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); -// Map> sameTypeEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); -// -// typeEmployeeListMap.forEach((k, v) -> { -// Map temp = new HashMap<>(); -// temp.put(DM, Objects.equals(k, EmployeeTypeEnum.ORGANIZATION.getValue()) ? SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 110538, "内部人员") : SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 119127, "非系统人员")); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastTypeEmployeeListMap.get(k), sameTypeEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildEmployeeRecords(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// Page> result = new Page<>(param.getCurrent(), param.getPageSize(), employeeIds.size(), true); -// List> records = new ArrayList<>(); -// -// List pageEmployeeIds = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), employeeIds); -// List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); -// Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); -// Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); -// Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); -// Map employeeByIdMap = hrmCommonEmployeeService.getEmployeeByIds(accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()).stream().collect(Collectors.toMap(SimpleEmployee::getEmployeeId, SimpleEmployee::getUsername)); -// -// List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); -// Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); -// -// employeeListMap.forEach((k, v) -> { -// Map temp = new HashMap<>(); -// temp.put(DM, Objects.nonNull(employeeByIdMap.get(k)) ? employeeByIdMap.get(k) : employeeExtByIdMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildQuarterRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// Set quarterSet = Sets.newHashSet(); -// data.getList().forEach(sa ->quarterSet.add(ReportTimeUtil.getQuarter(sa.getSalaryMonth()))); -// List quarters = Lists.newArrayList(quarterSet).stream().sorted().collect(Collectors.toList()); -// Collections.reverse(quarters); -// -// quarters.forEach(k -> { -// List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(sa.getSalaryMonth()))).collect(Collectors.toList()); -// List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 3)))).collect(Collectors.toList()); -// List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildHalfYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// Set halfYearSet = Sets.newHashSet(); -// data.getList().forEach(sa ->halfYearSet.add(ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))); -// List halfYears = Lists.newArrayList(halfYearSet).stream().sorted().collect(Collectors.toList()); -// Collections.reverse(halfYears); -// -// halfYears.forEach(k -> { -// List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))).collect(Collectors.toList()); -// List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 6)))).collect(Collectors.toList()); -// List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// Set yearSet = Sets.newHashSet(); -// data.getList().forEach(sa -> yearSet.add(ReportTimeUtil.getYear(sa.getSalaryMonth()))); -// List years = Lists.newArrayList(yearSet).stream().sorted().collect(Collectors.toList()); -// Collections.reverse(years); -// -// years.forEach(k -> { -// List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); -// List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); -// List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildSexRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); -// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); -// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); -// Map sexMap = Arrays.stream(Sex.values()).collect(Collectors.toMap(Sex::getName, Sex::getDescription)); -// -// Map empIdSexIdMap = new HashMap<>(); -// Map lastEmpIdSexIdMap = new HashMap<>(); -// Map sameEmpIdSexIdMap = new HashMap<>(); -// simpleEmployeeList.forEach(employee -> { -// if (employee.getSex() != null) { -// empIdSexIdMap.put(employee.getId(), employee.getSex().getName()); -// } -// }); -// lastSimpleEmployeeList.forEach(employee -> { -// if (employee.getSex() != null) { -// lastEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); -// } -// }); -// sameSimpleEmployeeList.forEach(employee -> { -// if (employee.getSex() != null) { -// sameEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); -// } -// }); -// -// sexMap.forEach((k, v) -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, v); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildJobCallRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); -// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); -// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); -// -// Set jobCallIds = Sets.newHashSet(); -// Map empIdJobCallIdMap = new HashMap<>(); -// Map lastEmpIdJobCallIdMap = new HashMap<>(); -// Map sameEmpIdJobCallIdMap = new HashMap<>(); -// simpleEmployeeList.forEach(employee -> { -// if (employee.getJobCall() != null) { -// empIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); -// jobCallIds.add(employee.getJobCall()); -// } -// }); -// lastSimpleEmployeeList.forEach(employee -> { -// if (employee.getJobCall() != null) { -// lastEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); -// } -// }); -// sameSimpleEmployeeList.forEach(employee -> { -// if (employee.getJobCall() != null) { -// sameEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); -// } -// }); -// -// HrmJobCallParam jobCallParam = new HrmJobCallParam(); -// jobCallParam.setIds(Lists.newArrayList(jobCallIds)); -// jobCallParam.setEmployeeId(data.getEmployeeId()); -// jobCallParam.setTenantKey(data.getTenantKey()); -// List jobCallList = CollectionUtils.isEmpty(jobCallIds) ? Lists.newArrayList() : hrmJobCallRemoteService.getJobCallBrowserByIds(jobCallParam); -// Map jobCallIdMap = jobCallList.stream().collect(Collectors.toMap(BrowserDataDto::getId, BrowserDataDto::getName)); -// -// jobCallIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, jobCallIdMap.get(k.toString())); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildSuperiorRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); -// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); -// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); -// -// Set superiorIds = new HashSet<>(); -// Map empIdSuperiorIdMap = new HashMap<>(); -// Map lastEmpIdSuperiorIdMap = new HashMap<>(); -// Map sameEmpIdSuperiorIdMap = new HashMap<>(); -// simpleEmployeeList.forEach(employee -> { -// if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { -// empIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); -// superiorIds.add(employee.getSuperior().getId()); -// } -// }); -// lastSimpleEmployeeList.forEach(employee -> { -// if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { -// lastEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); -// } -// }); -// sameSimpleEmployeeList.forEach(employee -> { -// if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { -// sameEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); -// } -// }); -// -// List superiorList = CollectionUtils.isEmpty(superiorIds) ? Lists.newArrayList() : hrmCommonEmployeeService.getEmployeeByIds(Lists.newArrayList(superiorIds), data.getTenantKey()); -// Map superiorMap = superiorList.stream().collect(Collectors.toMap(SimpleEmployee::getId, SimpleEmployee::getUsername)); -// -// superiorIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, superiorMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildMaritalStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set maritalStatusIds = new HashSet<>(); -// -// Map empIdMaritalStatusMap = new HashMap<>(); -// Map lastEmpIdMaritalStatusMap = new HashMap<>(); -// Map sameEmpIdMaritalStatusMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { -// maritalStatusIds.add(employee.getMaritalStatus()); -// empIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { -// lastEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { -// sameEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); -// } -// }); -// Map maritalStatusMap = Maps.newHashMap(); -// maritalStatusMap.put("married", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174138, "已婚")); -// maritalStatusMap.put("unmarried", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174139, "未婚")); -// maritalStatusMap.put("divorced", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174140, "离异")); -// -// maritalStatusIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, maritalStatusMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// -// List simpleUserInfoList; -// List lastSimpleUserInfoList; -// List sameSimpleUserInfoList; -// Map> map = Maps.newHashMap(); -// try { -// simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); -// lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); -// sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); -// } catch (Exception e) { -// log.info("获取员工个人信息失败: {}", e.getMessage()); -// return map; -// } -// map.put(NOW_INFO, simpleUserInfoList); -// map.put(LAST_INFO, lastSimpleUserInfoList); -// map.put(SAME_INFO, sameSimpleUserInfoList); -// return map; -// } -// -// private Page> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set educationIds = new HashSet<>(); -// Map educationMap = Maps.newHashMap(); -// -// Map empIdEducationMap = new HashMap<>(); -// Map lastEmpIdEducationMap = new HashMap<>(); -// Map sameEmpIdEducationMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getEducation() != null && employee.getEducation().getId() != null) { -// educationIds.add(employee.getEducation().getId()); -// empIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); -// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getEducation() != null && employee.getEducation().getId() != null) { -// lastEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); -// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getEducation() != null && employee.getEducation().getId() != null) { -// sameEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); -// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); -// } -// }); -// -// educationIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, educationMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set degreeIds = new HashSet<>(); -// Map degreeMap = Maps.newHashMap(); -// -// Map empIdDegreeMap = new HashMap<>(); -// Map lastEmpIdDegreeMap = new HashMap<>(); -// Map sameEmpIdDegreeMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getDegree() != null && employee.getDegree().getId() != null) { -// degreeIds.add(employee.getDegree().getId()); -// empIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); -// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getDegree() != null && employee.getDegree().getId() != null) { -// lastEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); -// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getDegree() != null && employee.getDegree().getId() != null) { -// sameEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); -// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); -// } -// }); -// -// degreeIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, degreeMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set nationIds = new HashSet<>(); -// Map nationMap = Maps.newHashMap(); -// -// Map empIdNationMap = new HashMap<>(); -// Map lastEmpIdNationMap = new HashMap<>(); -// Map sameEmpIdNationMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getNation() != null && employee.getNation().getId() != null) { -// nationIds.add(employee.getNation().getId()); -// empIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); -// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getNation() != null && employee.getNation().getId() != null) { -// lastEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); -// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getNation() != null && employee.getNation().getId() != null) { -// sameEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); -// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); -// } -// }); -// -// nationIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, nationMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set householdTypeIds = new HashSet<>(); -// Map householdTypeMap = Maps.newHashMap(); -// -// Map empIdHouseholdTypeMap = new HashMap<>(); -// Map lastEmpIdHouseholdTypeMap = new HashMap<>(); -// Map sameEmpIdHouseholdTypeMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { -// householdTypeIds.add(employee.getHouseholdType().getId()); -// empIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); -// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { -// lastEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); -// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { -// sameEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); -// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); -// } -// }); -// -// householdTypeIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, householdTypeMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set politicsStatusIds = new HashSet<>(); -// Map politicsStatusMap = Maps.newHashMap(); -// -// Map empIdPoliticsStatusMap = new HashMap<>(); -// Map lastEmpIdPoliticsStatusMap = new HashMap<>(); -// Map sameEmpIdPoliticsStatusMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { -// politicsStatusIds.add(employee.getPoliticsStatus().getId()); -// empIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); -// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { -// lastEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); -// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { -// sameEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); -// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); -// } -// }); -// -// politicsStatusIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, politicsStatusMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// private Page> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set ageSet = new HashSet<>(); -// -// Map empIdAgeMap = new HashMap<>(); -// Map lastEmpIdAgeMap = new HashMap<>(); -// Map sameEmpIdAgeMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getAge() != null) { -// ageSet.add(employee.getAge()); -// empIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getAge() != null) { -// lastEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getAge() != null) { -// sameEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); -// } -// }); -// -// List ages = Lists.newArrayList(ageSet); -// ages = ages.stream().sorted().collect(Collectors.toList()); -// -// ages.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set workYearSet = new HashSet<>(); -// -// Map empIdWorkYearMap = new HashMap<>(); -// Map lastEmpIdWorkYearMap = new HashMap<>(); -// Map sameEmpIdWorkYearMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getWorkYear() != null) { -// workYearSet.add(employee.getWorkYear()); -// empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getWorkYear() != null) { -// lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getWorkYear() != null) { -// sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); -// } -// }); -// List workYears = Lists.newArrayList(workYearSet); -// workYears = workYears.stream().sorted().collect(Collectors.toList()); -// -// workYears.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set companyYearSet = new HashSet<>(); -// -// Map empIdCompanyYearMap = new HashMap<>(); -// Map lastEmpIdCompanyYearMap = new HashMap<>(); -// Map sameEmpIdCompanyYearMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { -// companyYearSet.add(employee.getCompanyYear()); -// empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { -// lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { -// sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// -// List companyYears = Lists.newArrayList(companyYearSet); -// companyYears = companyYears.stream().sorted().collect(Collectors.toList()); -// -// companyYears.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// // 分组设置 -// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); -// -// -// result.setRecords(records); -// return result; -// } -// -// private Page> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// // 分组设置 -// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); -// -// Map empIdYearMap = new HashMap<>(); -// Map lastEmpIdYearMap = new HashMap<>(); -// Map sameEmpIdYearMap = new HashMap<>(); -// -// String groupBelong; -// if (StringUtils.isEmpty(dimension.getDimCode())) { -// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { -// groupBelong = SalaryStatisticsReportBO.G_YEAR; -// // 年份数据 -// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); -// } else { -// groupBelong = SalaryStatisticsReportBO.G_ITEM; -// } -// groups.forEach(k -> { -// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setRecords(records); -// return result; -// } -// -// private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return; -// } -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { -// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { -// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { -// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { -// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { -// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { -// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { -// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { -// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { -// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// } -// -// private Page> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// Page> result = new Page<>(); -// List> records = new ArrayList<>(); -// -// // 分组设置 -// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupIndividual.class); -// Map empIdYearMap = new HashMap<>(); -// Map lastEmpIdYearMap = new HashMap<>(); -// Map sameEmpIdYearMap = new HashMap<>(); -// -// String groupBelong; -// if (StringUtils.isEmpty(dimension.getDimCode())) { -// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { -// groupBelong = SalaryStatisticsReportBO.G_YEAR; -// -// // 年份数据 -// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); -// } else { -// groupBelong = SalaryStatisticsReportBO.G_ITEM; -// } -// -// groups.forEach(k -> { -// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k.getValue()); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setRecords(records); -// return result; -// } -//} + } + + Map resultMap = new HashMap<>(2); + String resultMsg = SalaryI18nUtil.getI18nLabel( 94620, "操作成功"); + String resultType = "success"; + // 单个设为定薪提示 + if (total > 1) { + resultMsg = SalaryI18nUtil.getI18nLabel( 134807, "成功条数") + ": "+ (success) + "; " + + SalaryI18nUtil.getI18nLabel( 134808, "失败条数") + ": "+ (total - success); + if ((total - success) > 0) { + resultType = "info"; + } + } else if (total == 1 && success < 1) { + resultType = "info"; + } + resultMap.put("type", resultType); + resultMap.put("msg", resultMsg); + return resultMap; + } + + @Override + public PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po, List salaryStatisticsItemList, Long employeeId, String tenantKey) { + Map checkMap = SalaryStatisticsReportBO.checkLoad(salaryStatisticsItemList); + // 如果一个都没有,直接返回 + if (!checkMap.get("isNow")) { + return new Page<>(); + } + // 参数转换 + SalaryStatisticsReportBO.poToQueryParam(param, po); + + // 获取本期报表分权后的核算人员 + List list = salaryAcctEmployeeService.listBySalaryStatisticsReportParam(param, employeeId, tenantKey); + SalaryStatisticsReportDataQueryParam lastParam = SalaryStatisticsReportBO.lastParamConvert(param, dimension); + // 获取上期报表分权后的核算人员 + List lastList = checkMap.get("isLast") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(lastParam, employeeId, tenantKey) : Lists.newArrayList(); + SalaryStatisticsReportDataQueryParam sameParam = SalaryStatisticsReportBO.sameParamConvert(param); + // 获取去年同期报表分权后的核算人员 + List sameList = checkMap.get("isSame") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(sameParam, employeeId, tenantKey) : Lists.newArrayList(); + + SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder() + .list(list) + .lastList(lastList) + .sameList(sameList) + .salaryStatisticsItemList(salaryStatisticsItemList) + .employeeId(employeeId) + .tenantKey(tenantKey) + .build(); + + List allList = Lists.newArrayList(); + allList.addAll(list); + allList.addAll(lastList); + allList.addAll(sameList); + Set salaryAcctEmployeeIds = allList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toSet()); + List salaryAcctResultValues = salaryAcctResultValueService.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds, tenantKey); + Map> salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultValuePO::getSalaryAcctEmployeeId, SalaryAcctResultValuePO::getResultValue); + + // 根据统计维度进行计算 + return calculateReportRecordsByDimension(dimension, param, salaryStatisticsReportData, salaryAcctResultValueMap); + } + + private Page> calculateReportRecordsByDimension(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + // 定性 + if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(dimension.getDimType())) { + switch (dimension.getDimCode()) { + case SalaryStatisticsDimensionConstant.DM_SALARY_MONTH: + return buildSalaryMonthRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_TAX_AGENT: + return buildTaxAgentRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY: + return buildIncomeCategoryRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_SUB_COMPANY: + return buildSubComRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_DEPARTMENT: + return buildDepartRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_POSITION: + return buildPositionRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_GRADE: + return buildGradeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: + return buildStatusRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: + return buildTypeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_EMPLOYEE: + return buildEmployeeRecords(param, data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_QUARTER: + return buildQuarterRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_HALF_YEAR: + return buildHalfYearRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_YEAR: + return buildYearRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_SEX: + return buildSexRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_JOB_CALL: + return buildJobCallRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_SUPERIOR: + return buildSuperiorRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: + return buildMaritalStatusRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_EDUCATION: + return buildEducationRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_DEGREE: + return buildDegreeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_NATION: + return buildNationRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE: + return buildHouseholdTypeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS: + return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_AGE: + return buildAgeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: + return buildWorkYearRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: + return buildCompanyYearRecords(data, salaryAcctResultValueMap); + default: + return new Page<>(); + } + // 定量-组距式分组 + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { + return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); + // 定量-单项式分组 + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { + return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); + } + return new Page<>(); + } + + private Page> buildSalaryMonthRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); + Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); + Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); + List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); + salaryMonthList.forEach(k -> { + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + result.setRecords(records); + return result; + } + + private Page> buildTaxAgentRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); + Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); + Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); + + List taxAgentList = taxAgentService.listAll(data.getTenantKey()); + Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); + + listMap.forEach((k, v) -> { + Map temp = new HashMap<>(); + temp.put(DM, taxAgentMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setRecords(records); + return result; + } + + private Page> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); + Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); + Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); + + List incomeCategoryList = listMap.keySet().stream().sorted().collect(Collectors.toList()); + incomeCategoryList.forEach(k -> { + IncomeCategoryEnum incomeCategory = IncomeCategoryEnum.parseByValue(Integer.parseInt(k)); + if (Objects.nonNull(incomeCategory)) { + Map temp = new HashMap<>(); + temp.put(DM, SalaryI18nUtil.getI18nLabel(incomeCategory.getLabelId(), incomeCategory.getDefaultLabel())); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + } + }); + + result.setRecords(records); + return result; + } + + private Page> buildSubComRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, data.getTenantKey()); + Map lastComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(lastEmployeeIds, data.getTenantKey()); + Map sameComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(sameEmployeeIds, data.getTenantKey()); + + Set subComIds = new HashSet<>(); + Map empIdSubComMap = new HashMap<>(); + Map subComIdNameMap = new HashMap<>(); + Map lastEmpIdSubComMap = new HashMap<>(); + Map sameEmpIdSubComMap = new HashMap<>(); + comInfoMap.forEach((k, v) -> { + subComIdNameMap.put(v.getId(), v.getName()); + empIdSubComMap.put(k, v.getId()); + subComIds.add(v.getId()); + }); + lastComInfoMap.forEach((k, v) -> { + lastEmpIdSubComMap.put(k, v.getId()); + }); + sameComInfoMap.forEach((k, v) -> { + sameEmpIdSubComMap.put(k, v.getId()); + }); + + subComIds.forEach(subComId -> { + List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, subComIdNameMap.get(subComId)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildDepartRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); + List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); + List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); + + Set departIds = new HashSet<>(); + Map empIdDepartIdMap = new HashMap<>(); + Map lastEmpIdDepartIdMap = new HashMap<>(); + Map sameEmpIdDepartIdMap = new HashMap<>(); + Map departIdNameMap = new HashMap<>(); + simpleEmployeeList.forEach(employee -> { + if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { + departIdNameMap.put(employee.getDepartment().getId(), employee.getDepartment().getName()); + departIds.add(employee.getDepartment().getId()); + empIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); + } + }); + lastSimpleEmployeeList.forEach(employee -> { + if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { + lastEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); + } + }); + sameSimpleEmployeeList.forEach(employee -> { + if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { + sameEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); + } + }); + + departIds.forEach(departId -> { + List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, departIdNameMap.get(departId)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildPositionRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); + List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); + List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); + + Set positionIds = new HashSet<>(); + Map empIdPositionIdMap = new HashMap<>(); + Map lastEmpIdPositionIdMap = new HashMap<>(); + Map sameEmpIdPositionIdMap = new HashMap<>(); + Map positionIdNameMap = new HashMap<>(); + simpleEmployeeList.forEach(employee -> { + if (employee.getPosition() != null && employee.getPosition().getId() != null) { + positionIdNameMap.put(employee.getPosition().getId(), employee.getPosition().getName()); + positionIds.add(employee.getPosition().getId()); + empIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); + } + }); + lastSimpleEmployeeList.forEach(employee -> { + if (employee.getPosition() != null && employee.getPosition().getId() != null) { + lastEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); + } + }); + sameSimpleEmployeeList.forEach(employee -> { + if (employee.getPosition() != null && employee.getPosition().getId() != null) { + sameEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); + } + }); + + positionIds.forEach(positionId -> { + List positionEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); + List lastPositionEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); + List samePositionEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, positionIdNameMap.get(positionId)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(positionEmployeePOS, lastPositionEmployeePOS, samePositionEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildGradeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); + List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); + List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); + + Set gradeIds = new HashSet<>(); + Map empIdGradeIdMap = new HashMap<>(); + Map lastEmpIdGradeIdMap = new HashMap<>(); + Map sameEmpIdGradeIdMap = new HashMap<>(); + Map gradeIdNameMap = new HashMap<>(); + simpleEmployeeList.forEach(employee -> { + if (employee.getGrade() != null && employee.getGrade().getId() != null) { + gradeIdNameMap.put(employee.getGrade().getId(), employee.getGrade().getName()); + gradeIds.add(employee.getGrade().getId()); + empIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); + } + }); + lastSimpleEmployeeList.forEach(employee -> { + if (employee.getGrade() != null && employee.getGrade().getId() != null) { + lastEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); + } + }); + sameSimpleEmployeeList.forEach(employee -> { + if (employee.getGrade() != null && employee.getGrade().getId() != null) { + sameEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); + } + }); + + gradeIds.forEach(gradeId -> { + List gradeEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); + List lastGradeEmployeePos = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); + List sameGradeEmployeePos = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, gradeIdNameMap.get(gradeId)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(gradeEmployeePOS, lastGradeEmployeePos, sameGradeEmployeePos, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); + List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); + List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); + Map statusIdNameMap = hrmCommonHrmStatusService.list(data.getTenantKey()).stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(HrmStatus::getCodeId))), ArrayList::new)).stream().collect(Collectors.toMap(HrmStatus::getCodeId, HrmStatus::getName)); + + Set statusIds = new HashSet<>(); + Map empIdStatusIdMap = new HashMap<>(); + Map lastEmpIdStatusIdMap = new HashMap<>(); + Map sameEmpIdStatusIdMap = new HashMap<>(); + simpleEmployeeList.forEach(employee -> { + if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { + statusIds.add(Long.valueOf(employee.getPersonnelStatus())); + empIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); + } + }); + lastSimpleEmployeeList.forEach(employee -> { + if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { + lastEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); + } + }); + sameSimpleEmployeeList.forEach(employee -> { + if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { + sameEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); + } + }); + + statusIds.forEach(statusId -> { + List statusEmployeePOS = data.getList().stream().filter(po -> com.google.common.base.Objects.equal(empIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); + List lastStatusEmployeePOS = data.getLastList().stream().filter(po -> com.google.common.base.Objects.equal(lastEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); + List sameStatusEmployeePOS = data.getSameList().stream().filter(po -> com.google.common.base.Objects.equal(sameEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, statusIdNameMap.get(statusId)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(statusEmployeePOS, lastStatusEmployeePOS, sameStatusEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + Map> typeEmployeeListMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); + Map> lastTypeEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); + Map> sameTypeEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); + + typeEmployeeListMap.forEach((k, v) -> { + Map temp = new HashMap<>(); + temp.put(DM, Objects.equals(k, EmployeeTypeEnum.ORGANIZATION.getValue()) ? SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 110538, "内部人员") : SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 119127, "非系统人员")); + temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastTypeEmployeeListMap.get(k), sameTypeEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setRecords(records); + return result; + } + + private Page> buildEmployeeRecords(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + Page> result = new Page<>(param.getCurrent(), param.getPageSize(), employeeIds.size(), true); + List> records = new ArrayList<>(); + + List pageEmployeeIds = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), employeeIds); + List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); + Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); + Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); + Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); + Map employeeByIdMap = hrmCommonEmployeeService.getEmployeeByIds(accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()).stream().collect(Collectors.toMap(SimpleEmployee::getEmployeeId, SimpleEmployee::getUsername)); + + List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); + Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); + + employeeListMap.forEach((k, v) -> { + Map temp = new HashMap<>(); + temp.put(DM, Objects.nonNull(employeeByIdMap.get(k)) ? employeeByIdMap.get(k) : employeeExtByIdMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setRecords(records); + return result; + } + + private Page> buildQuarterRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + Set quarterSet = Sets.newHashSet(); + data.getList().forEach(sa ->quarterSet.add(ReportTimeUtil.getQuarter(sa.getSalaryMonth()))); + List quarters = Lists.newArrayList(quarterSet).stream().sorted().collect(Collectors.toList()); + Collections.reverse(quarters); + + quarters.forEach(k -> { + List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(sa.getSalaryMonth()))).collect(Collectors.toList()); + List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 3)))).collect(Collectors.toList()); + List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setRecords(records); + return result; + } + + private Page> buildHalfYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + Set halfYearSet = Sets.newHashSet(); + data.getList().forEach(sa ->halfYearSet.add(ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))); + List halfYears = Lists.newArrayList(halfYearSet).stream().sorted().collect(Collectors.toList()); + Collections.reverse(halfYears); + + halfYears.forEach(k -> { + List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))).collect(Collectors.toList()); + List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 6)))).collect(Collectors.toList()); + List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setRecords(records); + return result; + } + + private Page> buildYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + Set yearSet = Sets.newHashSet(); + data.getList().forEach(sa -> yearSet.add(ReportTimeUtil.getYear(sa.getSalaryMonth()))); + List years = Lists.newArrayList(yearSet).stream().sorted().collect(Collectors.toList()); + Collections.reverse(years); + + years.forEach(k -> { + List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); + List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); + List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setRecords(records); + return result; + } + + private Page> buildSexRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); + List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); + List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); + Map sexMap = Arrays.stream(Sex.values()).collect(Collectors.toMap(Sex::getName, Sex::getDescription)); + + Map empIdSexIdMap = new HashMap<>(); + Map lastEmpIdSexIdMap = new HashMap<>(); + Map sameEmpIdSexIdMap = new HashMap<>(); + simpleEmployeeList.forEach(employee -> { + if (employee.getSex() != null) { + empIdSexIdMap.put(employee.getId(), employee.getSex().getName()); + } + }); + lastSimpleEmployeeList.forEach(employee -> { + if (employee.getSex() != null) { + lastEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); + } + }); + sameSimpleEmployeeList.forEach(employee -> { + if (employee.getSex() != null) { + sameEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); + } + }); + + sexMap.forEach((k, v) -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, v); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildJobCallRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); + List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); + List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); + + Set jobCallIds = Sets.newHashSet(); + Map empIdJobCallIdMap = new HashMap<>(); + Map lastEmpIdJobCallIdMap = new HashMap<>(); + Map sameEmpIdJobCallIdMap = new HashMap<>(); + simpleEmployeeList.forEach(employee -> { + if (employee.getJobCall() != null) { + empIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); + jobCallIds.add(employee.getJobCall()); + } + }); + lastSimpleEmployeeList.forEach(employee -> { + if (employee.getJobCall() != null) { + lastEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); + } + }); + sameSimpleEmployeeList.forEach(employee -> { + if (employee.getJobCall() != null) { + sameEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); + } + }); + + HrmJobCallParam jobCallParam = new HrmJobCallParam(); + jobCallParam.setIds(Lists.newArrayList(jobCallIds)); + jobCallParam.setEmployeeId(data.getEmployeeId()); + jobCallParam.setTenantKey(data.getTenantKey()); + List jobCallList = CollectionUtils.isEmpty(jobCallIds) ? Lists.newArrayList() : hrmJobCallRemoteService.getJobCallBrowserByIds(jobCallParam); + Map jobCallIdMap = jobCallList.stream().collect(Collectors.toMap(BrowserDataDto::getId, BrowserDataDto::getName)); + + jobCallIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, jobCallIdMap.get(k.toString())); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildSuperiorRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); + List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); + List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); + + Set superiorIds = new HashSet<>(); + Map empIdSuperiorIdMap = new HashMap<>(); + Map lastEmpIdSuperiorIdMap = new HashMap<>(); + Map sameEmpIdSuperiorIdMap = new HashMap<>(); + simpleEmployeeList.forEach(employee -> { + if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { + empIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); + superiorIds.add(employee.getSuperior().getId()); + } + }); + lastSimpleEmployeeList.forEach(employee -> { + if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { + lastEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); + } + }); + sameSimpleEmployeeList.forEach(employee -> { + if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { + sameEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); + } + }); + + List superiorList = CollectionUtils.isEmpty(superiorIds) ? Lists.newArrayList() : hrmCommonEmployeeService.getEmployeeByIds(Lists.newArrayList(superiorIds), data.getTenantKey()); + Map superiorMap = superiorList.stream().collect(Collectors.toMap(SimpleEmployee::getId, SimpleEmployee::getUsername)); + + superiorIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, superiorMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildMaritalStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set maritalStatusIds = new HashSet<>(); + + Map empIdMaritalStatusMap = new HashMap<>(); + Map lastEmpIdMaritalStatusMap = new HashMap<>(); + Map sameEmpIdMaritalStatusMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { + maritalStatusIds.add(employee.getMaritalStatus()); + empIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { + lastEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { + sameEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); + } + }); + Map maritalStatusMap = Maps.newHashMap(); + maritalStatusMap.put("married", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174138, "已婚")); + maritalStatusMap.put("unmarried", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174139, "未婚")); + maritalStatusMap.put("divorced", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174140, "离异")); + + maritalStatusIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, maritalStatusMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + + List simpleUserInfoList; + List lastSimpleUserInfoList; + List sameSimpleUserInfoList; + Map> map = Maps.newHashMap(); + try { + simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); + lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); + sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); + } catch (Exception e) { + log.info("获取员工个人信息失败: {}", e.getMessage()); + return map; + } + map.put(NOW_INFO, simpleUserInfoList); + map.put(LAST_INFO, lastSimpleUserInfoList); + map.put(SAME_INFO, sameSimpleUserInfoList); + return map; + } + + private Page> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set educationIds = new HashSet<>(); + Map educationMap = Maps.newHashMap(); + + Map empIdEducationMap = new HashMap<>(); + Map lastEmpIdEducationMap = new HashMap<>(); + Map sameEmpIdEducationMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getEducation() != null && employee.getEducation().getId() != null) { + educationIds.add(employee.getEducation().getId()); + empIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); + educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getEducation() != null && employee.getEducation().getId() != null) { + lastEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); + educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getEducation() != null && employee.getEducation().getId() != null) { + sameEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); + educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); + } + }); + + educationIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, educationMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set degreeIds = new HashSet<>(); + Map degreeMap = Maps.newHashMap(); + + Map empIdDegreeMap = new HashMap<>(); + Map lastEmpIdDegreeMap = new HashMap<>(); + Map sameEmpIdDegreeMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getDegree() != null && employee.getDegree().getId() != null) { + degreeIds.add(employee.getDegree().getId()); + empIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); + degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getDegree() != null && employee.getDegree().getId() != null) { + lastEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); + degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getDegree() != null && employee.getDegree().getId() != null) { + sameEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); + degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); + } + }); + + degreeIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, degreeMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set nationIds = new HashSet<>(); + Map nationMap = Maps.newHashMap(); + + Map empIdNationMap = new HashMap<>(); + Map lastEmpIdNationMap = new HashMap<>(); + Map sameEmpIdNationMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getNation() != null && employee.getNation().getId() != null) { + nationIds.add(employee.getNation().getId()); + empIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); + nationMap.put(employee.getNation().getId(), employee.getNation().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getNation() != null && employee.getNation().getId() != null) { + lastEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); + nationMap.put(employee.getNation().getId(), employee.getNation().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getNation() != null && employee.getNation().getId() != null) { + sameEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); + nationMap.put(employee.getNation().getId(), employee.getNation().getName()); + } + }); + + nationIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, nationMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set householdTypeIds = new HashSet<>(); + Map householdTypeMap = Maps.newHashMap(); + + Map empIdHouseholdTypeMap = new HashMap<>(); + Map lastEmpIdHouseholdTypeMap = new HashMap<>(); + Map sameEmpIdHouseholdTypeMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { + householdTypeIds.add(employee.getHouseholdType().getId()); + empIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); + householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { + lastEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); + householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { + sameEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); + householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); + } + }); + + householdTypeIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, householdTypeMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set politicsStatusIds = new HashSet<>(); + Map politicsStatusMap = Maps.newHashMap(); + + Map empIdPoliticsStatusMap = new HashMap<>(); + Map lastEmpIdPoliticsStatusMap = new HashMap<>(); + Map sameEmpIdPoliticsStatusMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { + politicsStatusIds.add(employee.getPoliticsStatus().getId()); + empIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); + politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { + lastEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); + politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { + sameEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); + politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); + } + }); + + politicsStatusIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, politicsStatusMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + private Page> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set ageSet = new HashSet<>(); + + Map empIdAgeMap = new HashMap<>(); + Map lastEmpIdAgeMap = new HashMap<>(); + Map sameEmpIdAgeMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getAge() != null) { + ageSet.add(employee.getAge()); + empIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getAge() != null) { + lastEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getAge() != null) { + sameEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); + } + }); + + List ages = Lists.newArrayList(ageSet); + ages = ages.stream().sorted().collect(Collectors.toList()); + + ages.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set workYearSet = new HashSet<>(); + + Map empIdWorkYearMap = new HashMap<>(); + Map lastEmpIdWorkYearMap = new HashMap<>(); + Map sameEmpIdWorkYearMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getWorkYear() != null) { + workYearSet.add(employee.getWorkYear()); + empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getWorkYear() != null) { + lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getWorkYear() != null) { + sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); + } + }); + List workYears = Lists.newArrayList(workYearSet); + workYears = workYears.stream().sorted().collect(Collectors.toList()); + + workYears.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set companyYearSet = new HashSet<>(); + + Map empIdCompanyYearMap = new HashMap<>(); + Map lastEmpIdCompanyYearMap = new HashMap<>(); + Map sameEmpIdCompanyYearMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (StringUtils.isNotEmpty(employee.getCompanyYear())) { + companyYearSet.add(employee.getCompanyYear()); + empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (StringUtils.isNotEmpty(employee.getCompanyYear())) { + lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (StringUtils.isNotEmpty(employee.getCompanyYear())) { + sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + + List companyYears = Lists.newArrayList(companyYearSet); + companyYears = companyYears.stream().sorted().collect(Collectors.toList()); + + companyYears.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setRecords(records); + return result; + } + + private Page> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + // 分组设置 + List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); + + + result.setRecords(records); + return result; + } + + private Page> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + // 分组设置 + List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); + + Map empIdYearMap = new HashMap<>(); + Map lastEmpIdYearMap = new HashMap<>(); + Map sameEmpIdYearMap = new HashMap<>(); + + String groupBelong; + if (StringUtils.isEmpty(dimension.getDimCode())) { + groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { + groupBelong = SalaryStatisticsReportBO.G_YEAR; + // 年份数据 + handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); + } else { + groupBelong = SalaryStatisticsReportBO.G_ITEM; + } + groups.forEach(k -> { + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + Map temp = new HashMap<>(); + temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setRecords(records); + return result; + } + + private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return; + } + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { + empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { + empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { + empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { + lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { + lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { + lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { + sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { + sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { + sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + } + + private Page> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + Page> result = new Page<>(); + List> records = new ArrayList<>(); + + // 分组设置 + List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupIndividual.class); + Map empIdYearMap = new HashMap<>(); + Map lastEmpIdYearMap = new HashMap<>(); + Map sameEmpIdYearMap = new HashMap<>(); + + String groupBelong; + if (StringUtils.isEmpty(dimension.getDimCode())) { + groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { + groupBelong = SalaryStatisticsReportBO.G_YEAR; + + // 年份数据 + handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); + } else { + groupBelong = SalaryStatisticsReportBO.G_ITEM; + } + + groups.forEach(k -> { + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + Map temp = new HashMap<>(); + temp.put(DM, k.getValue()); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setRecords(records); + return result; + } +} diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java new file mode 100644 index 000000000..dafdf5d44 --- /dev/null +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -0,0 +1,134 @@ +package com.engine.salary.report.web; + +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.component.form.WeaForm; +import com.weaver.common.component.search.WeaSearchCondition; +import com.weaver.salary.report.entity.param.*; +import com.weaver.salary.report.wrapper.SalaryStatisticsReportWrapper; +import com.weaver.teams.security.context.TenantContext; +import com.weaver.teams.security.context.UserContext; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * @Description: 薪酬统计报表 + * @Author: wangxiangzhong + * @Date: 2022/12/15 11:40 + */ +@Api("薪酬统计报表") +@RestController +@RequestMapping("/api/bs/salaryreport/salary/statistics/report") +public class SalaryStatisticsReportController { + + @Autowired + private SalaryStatisticsReportWrapper salaryStatisticsReportWrapper; + + /** + * 薪酬统计报表列表 + * + * @return + */ + @PostMapping("/list") + @ApiOperation("薪酬统计报表列表") + @WeaPermission(publicPermission = true) + public WeaResult>> list(@RequestBody SalaryStatisticsReportQueryParam queryParam) { + return WeaResult.success(salaryStatisticsReportWrapper.list(queryParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + } + + /** + * 获取薪酬统计报表表单 + * + * @return + */ + @GetMapping("/getForm") + @ApiOperation("获取薪酬统计报表表单") + @WeaPermission(publicPermission = true) + public WeaResult getFrom(@RequestParam(value = "id", required = false) Long id) { + return WeaResult.success(salaryStatisticsReportWrapper.getFrom(id, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + } + + /** + * 保存薪酬统计报表 + * + * @param saveParam + * @return + */ + @PostMapping("/save") + @ApiOperation("保存薪酬统计报表") + @WeaPermission(publicPermission = true) + public WeaResult save(@RequestBody SalaryStatisticsReportSaveParam saveParam) { + return WeaResult.success(salaryStatisticsReportWrapper.save(saveParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + } + + /** + * 删除薪酬统计报表 + * + * @param ids + * @return + */ + @PostMapping("/delete") + @ApiOperation("删除薪酬统计报表") + @WeaPermission(publicPermission = true) + public WeaResult> delete(@RequestBody Collection ids) { + return WeaResult.success(salaryStatisticsReportWrapper.delete(ids, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + } + + /** + * 获取薪酬统计报表查询条件 + * + * @param id + * @return + */ + @GetMapping("/getSearchCondition") + @ApiOperation("获取薪酬统计报表查询条件") + @WeaPermission(publicPermission = true) + public WeaResult getSearchCondition(@RequestParam Long id) { + return WeaResult.success(salaryStatisticsReportWrapper.getSearchCondition(id, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + } + + /** + * 保存薪酬统计报表查询条件 + * + * @param param + * @return + */ + @PostMapping("/saveSearchCondition") + @ApiOperation("保存薪酬统计报表查询条件") + @WeaPermission(publicPermission = true) + public WeaResult saveSearchCondition(@RequestBody SalaryStatisticsSearchConditionSaveParam param) { + return WeaResult.success(salaryStatisticsReportWrapper.saveSearchCondition(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + } + + /** + * 获取薪酬统计报表数据 + * + * @param param + * @return + */ + @PostMapping("/getData") + @ApiOperation("获取薪酬统计报表数据") + @WeaPermission(publicPermission = true) + public WeaResult> getData(@RequestBody SalaryStatisticsReportDataQueryParam param) { + return WeaResult.success(salaryStatisticsReportWrapper.getData(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + } + + /** + * 导出报表数据 + * + * @param param + * @return + */ + @PostMapping("/exportData") + @ApiOperation("导出报表数据") + @WeaPermission(publicPermission = true) + public WeaResult> exportData(@RequestBody SalaryStatisticsReportDataQueryParam param) { + return WeaResult.success(salaryStatisticsReportWrapper.exportData(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + } +} diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java new file mode 100644 index 000000000..ea2fcbbd5 --- /dev/null +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -0,0 +1,386 @@ +package com.engine.salary.report.wrapper; + +import com.alibaba.fastjson.JSONArray; +import com.engine.salary.report.service.SalaryStatisticsReportService; +import com.google.common.base.Joiner; +import com.google.common.collect.Maps; +import com.weaver.common.authority.format.FormatManager; +import com.weaver.common.component.browser.entity.WeaBrowserBean; +import com.weaver.common.component.form.WeaForm; +import com.weaver.common.component.form.item.WeaFormItem; +import com.weaver.common.component.form.item.WeaFormOption; +import com.weaver.common.component.search.WeaSearchCondition; +import com.weaver.common.component.search.item.WeaSearchConditionItem; +import com.weaver.common.component.search.item.WeaSearchConditionItemType; +import com.weaver.common.component.search.layout.WeaSearchConditionLayout; +import com.weaver.common.component.table.WeaTable; +import com.weaver.common.component.table.column.WeaTableColumn; +import com.weaver.common.component.table.page.Page; +import com.weaver.framework.util.JsonUtil; +import com.weaver.salary.report.common.constant.SalaryReportModule; +import com.weaver.salary.report.entity.bo.SalaryStatisticsReportBO; +import com.weaver.salary.report.entity.dto.SalaryStatisticsReportFormDTO; +import com.weaver.salary.report.entity.param.*; +import com.weaver.salary.report.entity.po.SalaryStatisticsDimensionPO; +import com.weaver.salary.report.entity.po.SalaryStatisticsItemPO; +import com.weaver.salary.report.entity.po.SalaryStatisticsReportPO; +import com.weaver.salary.report.enums.WeaBrowserTypeEnum; +import com.weaver.salary.report.exception.SalaryRunTimeException; +import com.weaver.salary.report.service.SalaryStatisticsDimensionService; +import com.weaver.salary.report.service.SalaryStatisticsItemService; +import com.weaver.salary.report.service.SubTableExportService; +import com.weaver.salary.report.util.*; +import com.weaver.teams.security.context.TenantContext; +import com.weaver.teams.security.context.UserContext; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 薪酬统计维度 + * @Author: wangxiangzhong + * @Date: 2022/12/15 13:46 + */ +@Component +public class SalaryStatisticsReportWrapper { + + private static final String conditionId = "salaryStatisticsReportSearchCondition"; + + @Resource + private SalaryStatisticsReportService salaryStatisticsReportService; + @Resource + private SalaryStatisticsItemService salaryStatisticsItemService; + @Resource + private SalaryStatisticsDimensionService salaryStatisticsDimensionService; + @Autowired + private SubTableExportService subTableExportService; + + /** + * 报表列表 + * + * + * @param queryParam + * @param currentEmployeeId + * @param currentTenantKey + * @return + */ + public List> list(SalaryStatisticsReportQueryParam queryParam, Long currentEmployeeId, String currentTenantKey) { + // 初始化 + salaryStatisticsDimensionService.init(currentEmployeeId, currentTenantKey); + + List reportList = salaryStatisticsReportService.list(currentEmployeeId, currentTenantKey); + if (StringUtils.isNotEmpty(queryParam.getReportName())) { + reportList = reportList.stream().filter(rp -> rp.getReportName().contains(queryParam.getReportName())).collect(Collectors.toList()); + } + List salaryStatisticsDimensionList = this.salaryStatisticsDimensionService.listAll(currentTenantKey); + Map salaryStatisticsDimensionMap = SalaryEntityUtil.convert2Map(salaryStatisticsDimensionList, k -> k.getId().toString(), SalaryStatisticsDimensionPO::getDimName); + List> result = new ArrayList<>(); + reportList.forEach(po -> { + Map temp = new HashMap<>(); + temp.put("id", po.getId().toString()); + temp.put("reportName", po.getReportName()); + + List dimNames = Arrays.stream(po.getDimension().split(",")).map(dim -> Optional.ofNullable(salaryStatisticsDimensionMap.get(dim)).orElse("")).collect(Collectors.toList()); + temp.put("dimension", Joiner.on(",").join(dimNames)); + temp.put("dimensionId", po.getDimension()); + result.add(temp); + }); + return result; + } + + /** + * 获取薪酬统计报表表单 + * + * @param id + * @param currentEmployeeId + * @param currentTenantKey + * @return + */ + public WeaForm getFrom(Long id, Long currentEmployeeId, String currentTenantKey) { + + List salaryStatisticsDimensions = salaryStatisticsDimensionService.listAll(currentTenantKey); + List statsDimOptions = salaryStatisticsDimensions.stream().map(sd -> new WeaFormOption(sd.getId().toString(), sd.getDimName())).collect(Collectors.toList()); + // 1.构建基础信息表单 + WeaForm weaForm = FormatManager.getInstance().genForm(SalaryStatisticsReportFormDTO.class, SalaryStatisticsReportFormDTO.builder().statsDimOptions(statsDimOptions).build()); + + String placeholder = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85987, "请输入"); + + WeaFormItem nameItem = weaForm.getItems().get("reportName"); + Map otherParams = Maps.newHashMap(); + otherParams.put("showCount", true); + otherParams.put("placeholder", placeholder); + nameItem.setOtherParams(otherParams); + weaForm.getItems().put("reportName", nameItem); + + if (id != null) { + SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(id, currentTenantKey); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 161845, "薪酬统计报表不存在")); + } + Map dataMap = JsonUtil.parseMap(po, Object.class); + dataMap.put("dimension", Arrays.asList(po.getDimension().split(","))); + weaForm.setData(dataMap); + } + return weaForm; + } + + /** + * 保存薪酬统计报表 + * + * @param saveParam + * @param currentEmployeeId + * @param currentTenantKey + * @return + */ + public String save(SalaryStatisticsReportSaveParam saveParam, Long currentEmployeeId, String currentTenantKey) { + return salaryStatisticsReportService.save(saveParam, currentEmployeeId, currentTenantKey); + } + + /** + * 删除薪酬统计报表 + * + * @param ids + * @param currentEmployeeId + * @param currentTenantKey + * @return + */ + public Map delete(Collection ids, Long currentEmployeeId, String currentTenantKey) { + return salaryStatisticsReportService.delete(ids, currentEmployeeId, currentTenantKey); + } + + /** + * 获取统计条件 + * + * @param id + * @param employeeId + * @param tenantKey + * @return + */ + public WeaSearchCondition getSearchCondition(Long id, Long employeeId, String tenantKey) { + // 高级搜索实例 + WeaSearchCondition weaSearchCondition = new WeaSearchCondition(conditionId); + + if (id != null) { + SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(id, tenantKey); + SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 152563, "报表不存在")); + + Map data = new HashMap<>(); + data.put("salaryStartMonth", ReportTimeUtil.getFormatYearMonth(po.getSalaryStartMonth())); + data.put("salaryEndMonth", ReportTimeUtil.getFormatYearMonth(po.getSalaryEndMonth())); + data.put("taxAgent", JSONArray.parseArray(po.getTaxAgentSetting())); + data.put("incomeCategory", JSONArray.parseArray(po.getIncomeCategorySetting())); + data.put("subCompany", JSONArray.parseArray(po.getSubCompanySetting())); + data.put("department", JSONArray.parseArray(po.getDepartSetting())); + data.put("grade", JSONArray.parseArray(po.getGradeSetting())); + data.put("position", JSONArray.parseArray(po.getPositionSetting())); + data.put("status", JSONArray.parseArray(po.getStatusSetting())); + data.put("employee", JSONArray.parseArray(po.getEmployeeSetting())); + data.put("hiredate", JSONArray.parseArray(po.getHiredateSetting())); +// data.put("leavedate", JSONArray.parseArray(po.getLeavedateSetting())); + + weaSearchCondition.setData(data); + } + + // 搜索项目 + // 个税扣缴义务人 + WeaSearchConditionItem taxAgent = new WeaSearchConditionItem(); + taxAgent.setItemType(WeaSearchConditionItemType.BROWSER); + WeaBrowserBean paymentOrgBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, WeaBrowserTypeEnum.TAX_AGENT.getBrowserType(), Boolean.TRUE); + taxAgent.setBrowserBean(paymentOrgBrowserBean); + weaSearchCondition.getItems().put("taxAgent", taxAgent); + // 收入所得项目 + WeaSearchConditionItem incomeCategory = new WeaSearchConditionItem(); + incomeCategory.setItemType(WeaSearchConditionItemType.BROWSER); + WeaBrowserBean incomeCategoryBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, WeaBrowserTypeEnum.INCOME_CATEGORY.getBrowserType(), Boolean.TRUE); + incomeCategory.setBrowserBean(incomeCategoryBrowserBean); + weaSearchCondition.getItems().put("incomeCategory", incomeCategory); + // 分部 + WeaSearchConditionItem subCompany = new WeaSearchConditionItem(); + subCompany.setItemType(WeaSearchConditionItemType.BROWSER); + WeaBrowserBean subcompanyBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "subcompany", Boolean.TRUE); + subCompany.setBrowserBean(subcompanyBrowserBean); + weaSearchCondition.getItems().put("subCompany", subCompany); + // 部门 + WeaSearchConditionItem department = new WeaSearchConditionItem(); + department.setItemType(WeaSearchConditionItemType.BROWSER); + WeaBrowserBean departmentBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "department", Boolean.TRUE); + department.setBrowserBean(departmentBrowserBean); + weaSearchCondition.getItems().put("department", department); + // 职级 + WeaSearchConditionItem grade = new WeaSearchConditionItem(); + grade.setItemType(WeaSearchConditionItemType.BROWSER); + WeaBrowserBean gradeBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "grade", Boolean.TRUE); + grade.setBrowserBean(gradeBrowserBean); + weaSearchCondition.getItems().put("grade", grade); + // 岗位 + WeaSearchConditionItem position = new WeaSearchConditionItem(); + position.setItemType(WeaSearchConditionItemType.BROWSER); + WeaBrowserBean positionBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "position", Boolean.TRUE); + position.setBrowserBean(positionBrowserBean); + weaSearchCondition.getItems().put("position", position); + // 人事状态 + WeaSearchConditionItem status = new WeaSearchConditionItem(); + status.setItemType(WeaSearchConditionItemType.BROWSER); + WeaBrowserBean statusBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, WeaBrowserTypeEnum.USER_STATUS.getBrowserType(), Boolean.TRUE); + status.setBrowserBean(statusBrowserBean); + weaSearchCondition.getItems().put("status", status); + // 人员 + WeaSearchConditionItem employee = new WeaSearchConditionItem(); + employee.setItemType(WeaSearchConditionItemType.BROWSER); + WeaBrowserBean employeeBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "resource", Boolean.TRUE); + employee.setBrowserBean(employeeBrowserBean); + weaSearchCondition.getItems().put("employee", employee); + + Map otherParams = Maps.newHashMap(); + otherParams.put("isRange", true); + otherParams.put("type", "day"); + otherParams.put("startPlaceholder", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 90648, "开始日期")); + otherParams.put("endPlaceholder", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 90649, "结束日期")); +// 在otherParams中添加 showMultiBtnGroup showUnlimit 这两个字段 并且都为false + // 入职日期 + WeaSearchConditionItem hiredate = new WeaSearchConditionItem(); + hiredate.setItemType(WeaSearchConditionItemType.DATEPICKER); + hiredate.setOtherParams(otherParams); + weaSearchCondition.getItems().put("hiredate", hiredate); + // 离职日期 + WeaSearchConditionItem leavedate = new WeaSearchConditionItem(); + leavedate.setItemType(WeaSearchConditionItemType.INPUT); + leavedate.setReadOnly(true); +// leavedate.setItemType(WeaSearchConditionItemType.DATEPICKER); +// leavedate.setOtherParams(otherParams); + weaSearchCondition.getItems().put("leavedate", leavedate); + + //layout布局 + List firstLine = new ArrayList<>(); + firstLine.add(new WeaSearchConditionLayout("taxAgent", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86184, "个税扣缴义务人"), new String[]{"taxAgent"})); + firstLine.add(new WeaSearchConditionLayout("incomeCategory", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 121908, "收入所得项目"), new String[]{"incomeCategory"})); + List secondLine = new ArrayList<>(); + secondLine.add(new WeaSearchConditionLayout("subCompany", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 107369, "分部"), new String[]{"subCompany"})); + secondLine.add(new WeaSearchConditionLayout("department", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86185, "部门"), new String[]{"department"})); + List thirdLine = new ArrayList<>(); + thirdLine.add(new WeaSearchConditionLayout("grade", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 98623, "职级"), new String[]{"grade"})); + thirdLine.add(new WeaSearchConditionLayout("position", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 90633, "岗位"), new String[]{"position"})); + List forthLine = new ArrayList<>(); + forthLine.add(new WeaSearchConditionLayout("status", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 109332, "人事状态"), new String[]{"status"})); + forthLine.add(new WeaSearchConditionLayout("employee", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100133, "人员"), new String[]{"employee"})); + List fifthLine = new ArrayList<>(); + fifthLine.add(new WeaSearchConditionLayout("hiredate", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86319, "入职日期"), new String[]{"hiredate"})); +// fifthLine.add(new WeaSearchConditionLayout("leavedate", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 95228, "离职日期"), new String[]{"leavedate"})); + fifthLine.add(new WeaSearchConditionLayout("leavedate", " ", new String[]{"leavedate"})); + + weaSearchCondition.getLayout().add(firstLine); + weaSearchCondition.getLayout().add(secondLine); + weaSearchCondition.getLayout().add(thirdLine); + weaSearchCondition.getLayout().add(forthLine); + weaSearchCondition.getLayout().add(fifthLine); + return weaSearchCondition; + } + + public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param, Long currentEmployeeId, String currentTenantKey) { + return this.salaryStatisticsReportService.saveSearchCondition(param, currentEmployeeId, currentTenantKey); + } + + /** + * 获取报表数据 + * + * @param param + * @param employeeId + * @param tenantKey + * @return + */ + public Map getData(SalaryStatisticsReportDataQueryParam param, Long employeeId, String tenantKey) { + + if (param.getId() == null || param.getDimensionId() == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + SalaryStatisticsDimensionPO dimension = salaryStatisticsDimensionService.getById(param.getDimensionId(), tenantKey); + if (dimension == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 161300, "统计维度不存在")); + } + // weaTable对象 + WeaTable> weaTable = new WeaTable<>(); + // 查询报表配置 + SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(param.getId(), tenantKey); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 161845, "薪酬统计报表不存在")); + } + // 查询自定义统计项目 + List salaryStatisticsItemList = this.salaryStatisticsItemService.listByStatisticsReportId(po.getId(), employeeId, tenantKey); + // 列表data + Page> page = this.salaryStatisticsReportService.buildReportRecords(dimension, param, po, salaryStatisticsItemList, employeeId, tenantKey); + + // 组装合计 + Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, employeeId, tenantKey); + + // 人员维度分页 + if (Objects.equal(dimension.getDimCode(), "employee")) { + if (CollectionUtils.isNotEmpty(page.getRecords())) { + page.setRecords(SalaryPageUtil.subList((int) page.getCurrent(), (int) page.getSize(), page.getRecords())); + weaTable.setCurrent(page.getCurrent()); + weaTable.setTotal(page.getTotal()); + weaTable.setPageSize(page.getSize()); + } + } + + weaTable.setData(page.getRecords()); + weaTable.setModule(SalaryReportModule.BROWSER_MODULE); + // 列表columns + List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList, employeeId, tenantKey); + weaTable.setColumns(weaTableColumns); + // pageuid + weaTable.setPageUid("salaryStatisticsReportDataPage"); + + Map resultMap = Maps.newHashMap(); + resultMap.putAll(JsonUtil.parseMap(weaTable, Object.class)); + resultMap.put("countResult", countResultMap); + return resultMap; + } + + /** + * 导出报表数据 + * + * @param param + * @param employeeId + * @param tenantKey + * @return + */ + public Map exportData(SalaryStatisticsReportDataQueryParam param, Long employeeId, String tenantKey) { + if (param.getId() == null || param.getDimensionId() == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + + SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(param.getId(), tenantKey); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 161845, "薪酬统计报表不存在")); + } + SalaryStatisticsDimensionPO dimension = salaryStatisticsDimensionService.getById(param.getDimensionId(), tenantKey); + if (dimension == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 161300, "统计维度不存在")); + } + // 查询自定义统计项目 + List salaryStatisticsItemList = this.salaryStatisticsItemService.listByStatisticsReportId(po.getId(), employeeId, tenantKey); + // 列表data + Page> page = this.salaryStatisticsReportService.buildReportRecords(dimension, param, po, salaryStatisticsItemList, employeeId, tenantKey); + // 组装合计 + Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, employeeId, tenantKey); + if (CollectionUtils.isNotEmpty(page.getRecords()) && MapUtils.isNotEmpty(countResultMap)) { + page.getRecords().add(countResultMap); + } + // 获取数据 + List> records = CollectionUtils.emptyIfNull(page.getRecords()).stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); + + // 获取列头 + List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList, employeeId, tenantKey); + + // 组装导出参数 + ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records); + exportParam.setSheetName(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 179263, "薪酬统计报表") + "-" + exportParam.getDimensionName()); + return subTableExportService.exportCommon(exportParam, UserContext.getCurrentUser(), TenantContext.getCurrentTenantKey()); + } +} diff --git a/src/com/engine/salary/service/SalaryAcctEmployeeService.java b/src/com/engine/salary/service/SalaryAcctEmployeeService.java index 44f9f38f7..c25c1de6a 100644 --- a/src/com/engine/salary/service/SalaryAcctEmployeeService.java +++ b/src/com/engine/salary/service/SalaryAcctEmployeeService.java @@ -4,10 +4,12 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.util.page.PageInfo; import java.util.Collection; import java.util.List; +import java.util.Set; /** * 薪资核算人员 @@ -30,7 +32,7 @@ public interface SalaryAcctEmployeeService { /** * 根据主键id获取单个薪资核算人员 * - * @param id 主键id + * @param id 主键id * @return */ SalaryAcctEmployeePO getById(Long id); @@ -38,7 +40,7 @@ public interface SalaryAcctEmployeeService { /** * 根据主键id查询薪资核算人员 * - * @param ids 主键id + * @param ids 主键id * @return */ List listByIds(Collection ids); @@ -127,7 +129,7 @@ public interface SalaryAcctEmployeeService { * @param queryParam 薪资核算结果列表的列表查询条件 * @return */ - PageInfo listPageByResultQueryParam(SalaryAcctResultQueryParam queryParam) ; + PageInfo listPageByResultQueryParam(SalaryAcctResultQueryParam queryParam); /** * 根据薪资核算结果列表的列表查询条件查询薪资核算人员 @@ -188,7 +190,7 @@ public interface SalaryAcctEmployeeService { /** * 添加薪资核算人员 * - * @param saveParam 保存参数 + * @param saveParam 保存参数 */ void save(SalaryAcctEmployeeSaveParam saveParam); @@ -241,4 +243,16 @@ public interface SalaryAcctEmployeeService { */ void refresh(Long salaryAcctRecordId); + + List listBySalaryStatisticsReportParam(SalaryStatisticsReportDataQueryParam param); + + /** + * 根据个税扣缴义务人和薪资所属月获取列表 + * + * @param taxAgentIds + * @param salaryMonths + * @return + */ + List listByTaxAgentAndSalaryMonth(List taxAgentIds, Set salaryMonths); + } diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 0016a4526..3b4814fce 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -13,10 +13,13 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; +import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper; import com.engine.salary.mapper.sys.SalarySysConfMapper; +import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.service.*; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.service.SalarySysConfService; @@ -34,9 +37,14 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import weaver.hrm.User; +import java.time.LocalDate; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.entity.siaccount.param.DSTenantKeyThreadVar.tenantKey; + /** * 薪资核算人员 *

Copyright: Copyright (c) 2022

@@ -536,4 +544,169 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct } } + + @Override + public List listBySalaryStatisticsReportParam(SalaryStatisticsReportDataQueryParam param) { + LambdaQueryChainWrapper lambdaQueryChainWrapper = new LambdaQueryChainWrapper<>(salaryAcctEmployeeMapper); + lambdaQueryChainWrapper.eq(SalaryAcctEmployeePO::getTenantKey, tenantKey); + lambdaQueryChainWrapper.eq(SalaryAcctEmployeePO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue()); + + //getSalaryAcctEmployeeMapper() + SalaryAcctEmployeePO lambdaQueryChainWrapper = SalaryAcctEmployeePO.builder().build(); + + // 个税扣缴义务人 + Collection taxAgentList =getTaxAgentService(user).listAllTaxAgents((long)user.getUID()); + if (CollectionUtils.isNotEmpty(taxAgentList)) { + List taxAgentIds = taxAgentList.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + // 有查询参数就取交集 + if (CollectionUtils.isNotEmpty(param.getTaxAgent())) { + List finalTaxAgentIds = taxAgentIds; + taxAgentIds = param.getTaxAgent().stream().filter(finalTaxAgentIds::contains).collect(Collectors.toList()); + lambdaQueryChainWrapper. + lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getTaxAgentId, CollectionUtils.isEmpty(taxAgentIds) ? Collections.singletonList(0L) : taxAgentIds); + } else { + lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getTaxAgentId, taxAgentIds); + } + } else { + lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getTaxAgentId, Collections.singletonList(0L)); + } + + // 薪资所属月 + YearMonth startYearMonth = YearMonth.parse(param.getSalaryStartMonth()); + YearMonth endYearMonth = YearMonth.parse(param.getSalaryEndMonth()); + if (Objects.nonNull(startYearMonth) && Objects.nonNull(endYearMonth)) { + Set yearMonths = Sets.newHashSet(); + while (!startYearMonth.isAfter(endYearMonth)) { + yearMonths.add(startYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"))); + startYearMonth = startYearMonth.plusMonths(1); + } + lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getSalaryMonth, yearMonths); + } + + // 收入所得项目 + if (CollectionUtils.isNotEmpty(param.getIncomeCategory())) { + lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getIncomeCategory, param.getIncomeCategory().stream().map(Object::toString).collect(Collectors.toList())); + } + + List list = lambdaQueryChainWrapper.list(); + if (CollectionUtils.isEmpty(list)) { + return Lists.newArrayList(); + } + List employeeIds = list.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); + + // 获取分部信息 + if (CollectionUtils.isNotEmpty(param.getSubCompany())) { + Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, tenantKey); + Set employeeIdsBySubCompanyFilter = new HashSet<>(); + comInfoMap.forEach((k, v) -> { + if (param.getSubCompany().contains(v.getId())) { + employeeIdsBySubCompanyFilter.add(k); + } + }); + if (CollectionUtils.isEmpty(employeeIdsBySubCompanyFilter)) { + return Lists.newArrayList(); + } + list = list.stream().filter(po -> employeeIdsBySubCompanyFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); + } + + // 获取部门、职级、岗位、人事状态 + List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, tenantKey); + // 部门过滤 + if (CollectionUtils.isNotEmpty(param.getDepart())) { + Set employeeIdsByDepartFilter = new HashSet<>(); + simpleEmployeeList.forEach(simpleEmployee -> { + if (simpleEmployee.getDepartment() != null && param.getDepart().contains(simpleEmployee.getDepartment().getId())) { + employeeIdsByDepartFilter.add(simpleEmployee.getEmployeeId()); + } + }); + if (CollectionUtils.isEmpty(employeeIdsByDepartFilter)) { + return Lists.newArrayList(); + } + list = list.stream().filter(po -> employeeIdsByDepartFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); + } + // 职级过滤 + if (CollectionUtils.isNotEmpty(param.getGrade())) { + Set employeeIdsByGradeFilter = new HashSet<>(); + simpleEmployeeList.forEach(simpleEmployee -> { + if (simpleEmployee.getGrade() != null && param.getGrade().contains(simpleEmployee.getGrade().getId())) { + employeeIdsByGradeFilter.add(simpleEmployee.getEmployeeId()); + } + }); + if (CollectionUtils.isEmpty(employeeIdsByGradeFilter)) { + return Lists.newArrayList(); + } + list = list.stream().filter(po -> employeeIdsByGradeFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); + } + // 岗位过滤 + if (CollectionUtils.isNotEmpty(param.getPosition())) { + Set employeeIdsByPostionFilter = new HashSet<>(); + simpleEmployeeList.forEach(simpleEmployee -> { + if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) { + employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId()); + } + }); + if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) { + return Lists.newArrayList(); + } + list = list.stream().filter(po -> employeeIdsByPostionFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); + } + // 人事状态过滤 + if (CollectionUtils.isNotEmpty(param.getStatus())) { + Set employeeIdsByStatus = new HashSet<>(); + simpleEmployeeList.forEach(simpleEmployee -> { + if (simpleEmployee.getStatus() != null && param.getStatus().contains(simpleEmployee.getPersonnelStatus())) { + employeeIdsByStatus.add(simpleEmployee.getEmployeeId()); + } + }); + if (CollectionUtils.isEmpty(employeeIdsByStatus)) { + return Lists.newArrayList(); + } + list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList()); + } + // 入职日期 + if (CollectionUtils.isNotEmpty(param.getHiredate())) { + Set employeeIdsByHiredate = new HashSet<>(); + simpleEmployeeList.forEach(simpleEmployee -> { + LocalDate hiredate = ReportTimeUtil.dateToLocalDate(simpleEmployee.getHiredate()); + if (simpleEmployee.getHiredate() != null && !hiredate.isBefore(param.getHiredate().get(0)) && !hiredate.isAfter(param.getHiredate().get(1))) { + employeeIdsByHiredate.add(simpleEmployee.getEmployeeId()); + } + }); + if (CollectionUtils.isEmpty(employeeIdsByHiredate)) { + return Lists.newArrayList(); + } + list = list.stream().filter(po -> employeeIdsByHiredate.contains(po.getEmployeeId())).collect(Collectors.toList()); + } +// // 离职日期 todo +// if (CollectionUtils.isNotEmpty(param.getLeavedate())) { +// Set employeeIdsByLeavedate = new HashSet<>(); +// simpleEmployeeList.forEach(simpleEmployee -> { +// +// if (simpleEmployee.get() != null && ) { +// employeeIdsByLeavedate.add(simpleEmployee.getEmployeeId()); +// } +// }); +// if (CollectionUtils.isEmpty(employeeIdsByLeavedate)) { +// return Lists.newArrayList(); +// } +// list = list.stream().filter(po -> employeeIdsByLeavedate.contains(po.getEmployeeId())).collect(Collectors.toList()); +// } + // 人员 + if (CollectionUtils.isNotEmpty(param.getEmployee())) { + list = list.stream().filter(po -> param.getEmployee().contains(po.getEmployeeId())).collect(Collectors.toList()); + } + + return list; + } + + @Override + public List listByTaxAgentAndSalaryMonth(List taxAgentIds, Set salaryMonths, String tenantKey) { + return new LambdaQueryChainWrapper<>(salaryAcctEmployeeMapper) + .eq(SalaryAcctEmployeePO::getTenantKey, tenantKey) + .eq(SalaryAcctEmployeePO::getDeleteType, 0) + .in(SalaryAcctEmployeePO::getTaxAgentId, taxAgentIds) + .in(CollectionUtils.isNotEmpty(salaryMonths), SalaryAcctEmployeePO::getSalaryMonth, salaryMonths) + .list(); + } + } From ce0b8ce186d020caba105cd12527544c4ab9e43a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 10 Apr 2023 12:43:48 +0800 Subject: [PATCH 003/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/po/SalaryAcctEmployeePO.java | 4 + .../salaryacct/SalaryAcctEmployeeMapper.xml | 12 + .../service/SalaryStatisticsItemService.java | 47 ++++ .../impl/SalaryStatisticsItemServiceImpl.java | 175 ++++++++++++++ .../SalaryStatisticsReportServiceImpl.java | 14 +- .../web/SalaryStatisticsReportController.java | 2 +- .../SalaryStatisticsReportWrapper.java | 6 +- .../service/SalaryAcctEmployeeService.java | 3 +- .../impl/SalaryAcctEmployeeServiceImpl.java | 219 +++++++++--------- 9 files changed, 357 insertions(+), 125 deletions(-) create mode 100644 src/com/engine/salary/report/service/SalaryStatisticsItemService.java create mode 100644 src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java index fdea4f715..d4dd458f4 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java @@ -90,7 +90,11 @@ public class SalaryAcctEmployeePO { //主键id集合 private Collection ids; + private Collection taxAgentIds; + private Collection salaryAcctRecordIds; private Collection employeeIds; + + private Collection salaryMonths; } diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index f399e37a6..19febf3b5 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -950,6 +950,18 @@ #{employeeId} + + AND tax_agent_id IN + + #{taxAgentId} + + + + AND salary_month IN + + #{salaryMonth} + + ORDER BY id DESC diff --git a/src/com/engine/salary/report/service/SalaryStatisticsItemService.java b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java new file mode 100644 index 000000000..d8d66800f --- /dev/null +++ b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java @@ -0,0 +1,47 @@ +package com.engine.salary.report.service; + +import com.engine.salary.report.entity.param.SalaryStatisticsItemSaveParam; +import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; + +import java.util.Collection; +import java.util.List; + +/** + * @Description: 薪酬报表自定义统计项目 + * @Author: wangxiangzhong + * @Date: 2022/12/19 10:09 + */ +public interface SalaryStatisticsItemService { + + /** + * 获取单个自定义统计项目 + * + * @param id + * @return + */ + SalaryStatisticsItemPO getById(Long id); + + /** + * 根据薪资报表id获取自定义统计项目 + * + * @param statisticsReportId + * @return + */ + List listByStatisticsReportId(Long statisticsReportId); + + /** + * 删除自定义统计项目 + * + * @param ids + * @return + */ + String delete(Collection ids); + + /** + * 保存自定义统计项目 + * + * @param param + * @return + */ + String save(SalaryStatisticsItemSaveParam param); +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java new file mode 100644 index 000000000..7c6daeb56 --- /dev/null +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java @@ -0,0 +1,175 @@ +package com.engine.salary.report.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; +import com.engine.core.impl.Service; +import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; +import com.engine.salary.report.service.SalaryStatisticsItemService; +import com.engine.salary.util.SalaryI18nUtil; +import com.google.common.base.Joiner; +import com.weaver.common.distribution.genid.IdGenerator; +import com.weaver.common.elog.dto.LoggerContext; +import com.weaver.salary.report.dao.SalaryStatisticsItemMapper; +import com.weaver.salary.report.entity.param.SalaryStatisticsItemSaveParam; +import com.weaver.salary.report.entity.po.SubTablePO; +import com.weaver.salary.report.enums.DeleteTypeEnum; +import com.weaver.salary.report.enums.OperateTypeEnum; +import com.weaver.salary.report.enums.UnitTypeEnum; +import com.weaver.salary.report.exception.SalaryRunTimeException; +import com.weaver.salary.report.util.SalaryAssert; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static com.engine.salary.entity.siaccount.param.DSTenantKeyThreadVar.tenantKey; + +/** + * @Description: 薪酬报表自定义统计项目 + * @Author: wangxiangzhong + * @Date: 2022/12/19 10:10 + */ +public class SalaryStatisticsItemServiceImpl extends Service implements SalaryStatisticsItemService { + + + private SalaryStatisticsItemMapper salaryStatisticsItemMapper; + + @Override + public SalaryStatisticsItemPO getById(Long id) { + return new LambdaQueryChainWrapper<>(salaryStatisticsItemMapper) + .eq(SalaryStatisticsItemPO::getDeleteType, 0) + .eq(SalaryStatisticsItemPO::getTenantKey, currentTenantKey) + .eq(SalaryStatisticsItemPO::getId, id) + .eq(SalaryStatisticsItemPO::getCreator, currentEmployeeId) + .one(); + } + + @Override + public List listByStatisticsReportId(Long statisticsReportId) { + return new LambdaQueryChainWrapper<>(salaryStatisticsItemMapper) + .eq(SalaryStatisticsItemPO::getDeleteType, 0) + .eq(SalaryStatisticsItemPO::getTenantKey, currentTenantKey) + .eq(SalaryStatisticsItemPO::getStatReportId, statisticsReportId) + .orderByAsc(SalaryStatisticsItemPO::getIndexValue) + .list(); + } + + public List listByIds(Collection ids, String currentTenantKey) { + return new LambdaQueryChainWrapper<>(salaryStatisticsItemMapper) + .eq(SalaryStatisticsItemPO::getDeleteType, 0) + .eq(SalaryStatisticsItemPO::getTenantKey, currentTenantKey) + .in(SalaryStatisticsItemPO::getId, ids) + .list(); + } + + @Override + public String delete(Collection ids) { + SalaryAssert.notEmpty(ids, SalaryI18nUtil.getI18nLabel(152638, "id不可为空")); + List list = this.listByIds(ids); + if (CollectionUtils.isNotEmpty(list)) { + new LambdaUpdateChainWrapper<>(salaryStatisticsItemMapper) + .eq(SalaryStatisticsItemPO::getDeleteType, 0) + .eq(SalaryStatisticsItemPO::getTenantKey) + .in(SalaryStatisticsItemPO::getId, ids) + .set(SalaryStatisticsItemPO::getDeleteType, 1) + .update(); + list.forEach(po -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(String.valueOf(po.getId())); + loggerContext.setTargetName(po.getItemName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目")); + salaryStatReportLoggerTemplate.write(loggerContext); + }); + } + return StringUtils.EMPTY; + } + + @Override + public String save(SalaryStatisticsItemSaveParam saveParam) { + // 新建 + if (Objects.isNull(saveParam.getId())) { + if (Objects.isNull(saveParam.getStatReportId())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(163034, "统计报表id不能为空")); + } + if (CollectionUtils.isEmpty(saveParam.getItemValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(152640, "统计项目必填")); + } + if (StringUtils.isEmpty(saveParam.getItemName())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(152641, "统计项名称必填")); + } + + List itemPOList = listByStatisticsReportId(saveParam.getStatReportId(), employeeId); + boolean isRepeat = itemPOList.stream().anyMatch(po -> saveParam.getItemName().equals(po.getItemName())); + if (isRepeat) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(152642, "统计项目名称已经存在")); + } + + List indexValues = itemPOList.stream().map(SalaryStatisticsItemPO::getIndexValue).collect(Collectors.toList()); + Integer max = CollectionUtils.isEmpty(indexValues) ? 1 : Collections.max(indexValues); + + SalaryStatisticsItemPO subTableItemPO = SalaryStatisticsItemPO.builder() + .id(IdGenerator.generate()) + .createTime(LocalDateTime.now()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .itemName(saveParam.getItemName()) + .itemValue(Joiner.on(",").join(saveParam.getItemValue())) + .countRule(JSON.toJSONString(saveParam.getCountRule())) + .sumRule(JSON.toJSONString(saveParam.getSumRule())) + .avgRule(JSON.toJSONString(saveParam.getAvgRule())) + .maxRule(JSON.toJSONString(saveParam.getMaxRule())) + .minRule(JSON.toJSONString(saveParam.getMinRule())) + .medianRule(JSON.toJSONString(saveParam.getMedianRule())) + .indexValue(max + 1) + .statReportId(saveParam.getStatReportId()) + .unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getItem() : saveParam.getUnitType()) + .creator(employeeId) + .updateTime(LocalDateTime.now()) + .tenantKey(tenantKey) + .build(); + salaryStatisticsItemMapper.insert(subTableItemPO); + + // 记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(String.valueOf(subTableItemPO.getId())); + loggerContext.setTargetName(subTableItemPO.getItemName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目")); + salaryStatReportLoggerTemplate.write(loggerContext); + // 更新 + } else { + SalaryStatisticsItemPO itemPO = this.getById(saveParam.getId(), employeeId); + SalaryAssert.notNull(itemPO, SalaryI18nUtil.getI18nLabel(152591, "统计项目不存在")); + Optional.ofNullable(saveParam.getItemName()).ifPresent(itemPO::setItemName); + + if (Objects.nonNull(saveParam.getUnitType())) { + itemPO.setUnitType(saveParam.getUnitType()); + } else { + itemPO.setItemValue(Joiner.on(",").join(saveParam.getItemValue())); + itemPO.setCountRule(Objects.nonNull(saveParam.getCountRule()) ? JSON.toJSONString(saveParam.getCountRule()) : ""); + itemPO.setSumRule(Objects.nonNull(saveParam.getSumRule()) ? JSON.toJSONString(saveParam.getSumRule()) : ""); + itemPO.setAvgRule(Objects.nonNull(saveParam.getAvgRule()) ? JSON.toJSONString(saveParam.getAvgRule()) : ""); + itemPO.setMaxRule(Objects.nonNull(saveParam.getMaxRule()) ? JSON.toJSONString(saveParam.getMaxRule()) : ""); + itemPO.setMinRule(Objects.nonNull(saveParam.getMinRule()) ? JSON.toJSONString(saveParam.getMinRule()) : ""); + itemPO.setMedianRule(Objects.nonNull(saveParam.getMedianRule()) ? JSON.toJSONString(saveParam.getMedianRule()) : ""); + } + + salaryStatisticsItemMapper.updateById(itemPO); + + // 记录操作日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(String.valueOf(itemPO.getId())); + loggerContext.setTargetName(itemPO.getItemName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目")); + salaryStatReportLoggerTemplate.write(loggerContext); + } + return StringUtils.EMPTY; + } +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index f0faeb69d..43fc9b355 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -74,17 +74,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary public static final String LAST_INFO = "lastInfoList"; public static final String SAME_INFO = "sameInfoList"; - @Resource + private SalaryStatisticsReportMapper salaryStatisticsReportMapper; - @Resource + private SalaryStatisticsItemService salaryStatisticsItemService; - @Resource + private SalaryAcctEmployeeService salaryAcctEmployeeService; - @Resource + private SalaryAcctResultService salaryAcctResultValueService; - @Resource + private TaxAgentService taxAgentService; - @Resource + private ExtEmployeeService extEmployeeService; @Autowired private HrmCommonEmployeeService hrmCommonEmployeeService; @@ -94,7 +94,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary private RemoteUserInfoService remoteUserInfoService; @Autowired private HrmCommonHrmStatusService hrmCommonHrmStatusService; - @Resource(name = "salaryStatReportLoggerTemplate") + (name = "salaryStatReportLoggerTemplate") private LoggerTemplate salaryStatReportLoggerTemplate; @Override diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index dafdf5d44..3020a525b 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -1,11 +1,11 @@ package com.engine.salary.report.web; +import com.engine.salary.report.wrapper.SalaryStatisticsReportWrapper; import com.weaver.common.authority.annotation.WeaPermission; import com.weaver.common.base.entity.result.WeaResult; import com.weaver.common.component.form.WeaForm; import com.weaver.common.component.search.WeaSearchCondition; import com.weaver.salary.report.entity.param.*; -import com.weaver.salary.report.wrapper.SalaryStatisticsReportWrapper; import com.weaver.teams.security.context.TenantContext; import com.weaver.teams.security.context.UserContext; import io.swagger.annotations.Api; diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index ea2fcbbd5..c7a1bc5fa 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -52,11 +52,11 @@ public class SalaryStatisticsReportWrapper { private static final String conditionId = "salaryStatisticsReportSearchCondition"; - @Resource + private SalaryStatisticsReportService salaryStatisticsReportService; - @Resource + private SalaryStatisticsItemService salaryStatisticsItemService; - @Resource + private SalaryStatisticsDimensionService salaryStatisticsDimensionService; @Autowired private SubTableExportService subTableExportService; diff --git a/src/com/engine/salary/service/SalaryAcctEmployeeService.java b/src/com/engine/salary/service/SalaryAcctEmployeeService.java index c25c1de6a..91bc0ec48 100644 --- a/src/com/engine/salary/service/SalaryAcctEmployeeService.java +++ b/src/com/engine/salary/service/SalaryAcctEmployeeService.java @@ -8,6 +8,7 @@ import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryPara import com.engine.salary.util.page.PageInfo; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.Set; @@ -253,6 +254,6 @@ public interface SalaryAcctEmployeeService { * @param salaryMonths * @return */ - List listByTaxAgentAndSalaryMonth(List taxAgentIds, Set salaryMonths); + List listByTaxAgentAndSalaryMonth(List taxAgentIds, Set salaryMonths); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 3b4814fce..23b69858a 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.date.DateUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; @@ -15,7 +16,6 @@ import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; -import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper; import com.engine.salary.mapper.sys.SalarySysConfMapper; @@ -32,19 +32,17 @@ import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.company.SubCompanyComInfo; -import java.time.LocalDate; -import java.time.YearMonth; -import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; -import static com.engine.salary.entity.siaccount.param.DSTenantKeyThreadVar.tenantKey; - /** * 薪资核算人员 *

Copyright: Copyright (c) 2022

@@ -331,7 +329,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct Set otherSalaryAcctRecordIds = SalaryEntityUtil.properties(otherSalaryAcctRecordPOS, SalaryAcctRecordPO::getId); // 分页参数 List salaryAcctEmployeePOS = getSalaryAcctEmployeeMapper().listPage4ConsolidatedTax(otherSalaryAcctRecordIds, queryParam); - return SalaryPageUtil.buildPage(queryParam.getCurrent(),queryParam.getPageSize(), + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryAcctEmployeePOS, SalaryAcctEmployeePO.class); } @@ -433,8 +431,8 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } // 回算不允许删除薪资核算人员 - if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus() , 1)){ - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"正常薪资已经发放,薪资回算时,不允许再删除薪资核算人员")); + if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "正常薪资已经发放,薪资回算时,不允许再删除薪资核算人员")); } // 只有未归档时才能删除薪资核算人员 if (!Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())) { @@ -497,7 +495,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct // salaryEmployees = salaryEmployees.stream().filter(salaryEmployee -> employeeIdsInTaxAgent.contains(salaryEmployee.getEmployeeId())).collect(Collectors.toList()); // 查询薪资档案,获取人员的个税扣缴义务人 - List employeeIds = SalaryEntityUtil.properties(salaryEmployees, DataCollectionEmployee::getEmployeeId,Collectors.toList()); + List employeeIds = SalaryEntityUtil.properties(salaryEmployees, DataCollectionEmployee::getEmployeeId, Collectors.toList()); List salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId); // 转换成薪资核算人员po List salaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2EmployeePO(employeeIds, salaryAcctRecordPO, salaryArchiveDataDTOS, (long) user.getUID()); @@ -518,7 +516,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { return; } - List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId,Collectors.toList()); + List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); // 查询薪资核算记录 SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); if (Objects.isNull(salaryAcctRecordPO)) { @@ -547,136 +545,133 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct @Override public List listBySalaryStatisticsReportParam(SalaryStatisticsReportDataQueryParam param) { - LambdaQueryChainWrapper lambdaQueryChainWrapper = new LambdaQueryChainWrapper<>(salaryAcctEmployeeMapper); - lambdaQueryChainWrapper.eq(SalaryAcctEmployeePO::getTenantKey, tenantKey); - lambdaQueryChainWrapper.eq(SalaryAcctEmployeePO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue()); - - //getSalaryAcctEmployeeMapper() SalaryAcctEmployeePO lambdaQueryChainWrapper = SalaryAcctEmployeePO.builder().build(); // 个税扣缴义务人 - Collection taxAgentList =getTaxAgentService(user).listAllTaxAgents((long)user.getUID()); + Collection taxAgentList = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); if (CollectionUtils.isNotEmpty(taxAgentList)) { List taxAgentIds = taxAgentList.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); // 有查询参数就取交集 if (CollectionUtils.isNotEmpty(param.getTaxAgent())) { List finalTaxAgentIds = taxAgentIds; taxAgentIds = param.getTaxAgent().stream().filter(finalTaxAgentIds::contains).collect(Collectors.toList()); - lambdaQueryChainWrapper. - lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getTaxAgentId, CollectionUtils.isEmpty(taxAgentIds) ? Collections.singletonList(0L) : taxAgentIds); + lambdaQueryChainWrapper.setTaxAgentIds(CollectionUtils.isEmpty(taxAgentIds) ? Collections.singletonList(0L) : taxAgentIds); } else { - lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getTaxAgentId, taxAgentIds); + lambdaQueryChainWrapper.setTaxAgentIds(taxAgentIds); } } else { - lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getTaxAgentId, Collections.singletonList(0L)); + lambdaQueryChainWrapper.setTaxAgentIds(Collections.singletonList(0L)); } // 薪资所属月 - YearMonth startYearMonth = YearMonth.parse(param.getSalaryStartMonth()); - YearMonth endYearMonth = YearMonth.parse(param.getSalaryEndMonth()); + Date startYearMonth = SalaryDateUtil.dateStrToLocalTime(param.getSalaryStartMonth()); + Date endYearMonth = SalaryDateUtil.dateStrToLocalTime(param.getSalaryEndMonth()); if (Objects.nonNull(startYearMonth) && Objects.nonNull(endYearMonth)) { - Set yearMonths = Sets.newHashSet(); - while (!startYearMonth.isAfter(endYearMonth)) { - yearMonths.add(startYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"))); - startYearMonth = startYearMonth.plusMonths(1); + Set yearMonths = Sets.newHashSet(); + while (!startYearMonth.after(endYearMonth)) { + yearMonths.add(startYearMonth); + startYearMonth = DateUtil.offsetMonth(startYearMonth, 1); } - lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getSalaryMonth, yearMonths); + lambdaQueryChainWrapper.setSalaryMonths(yearMonths); } // 收入所得项目 - if (CollectionUtils.isNotEmpty(param.getIncomeCategory())) { - lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getIncomeCategory, param.getIncomeCategory().stream().map(Object::toString).collect(Collectors.toList())); - } +// if (CollectionUtils.isNotEmpty(param.getIncomeCategory())) { +// lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getIncomeCategory, param.getIncomeCategory().stream().map(Object::toString).collect(Collectors.toList())); +// } - List list = lambdaQueryChainWrapper.list(); + List list = getSalaryAcctEmployeeMapper().listSome(lambdaQueryChainWrapper); if (CollectionUtils.isEmpty(list)) { return Lists.newArrayList(); } List employeeIds = list.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); + + List employeeList = getSalaryEmployeeService(user).listByIds(employeeIds); // 获取分部信息 - if (CollectionUtils.isNotEmpty(param.getSubCompany())) { - Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, tenantKey); - Set employeeIdsBySubCompanyFilter = new HashSet<>(); - comInfoMap.forEach((k, v) -> { - if (param.getSubCompany().contains(v.getId())) { - employeeIdsBySubCompanyFilter.add(k); - } - }); - if (CollectionUtils.isEmpty(employeeIdsBySubCompanyFilter)) { - return Lists.newArrayList(); + List subCompanyIds = param.getSubCompany(); + if (CollectionUtils.isNotEmpty(subCompanyIds)) { + SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo(); + StringBuilder allSubcompanyIds = new StringBuilder(); + for (Long subCompanyId : subCompanyIds) { + String organizationIds = ""; + String allChildSubcompanyId = subCompanyComInfo.getAllChildSubcompanyId(subCompanyId.toString(), organizationIds); + allSubcompanyIds.append(allChildSubcompanyId); } - list = list.stream().filter(po -> employeeIdsBySubCompanyFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); + String finalAllSubcompanyIds = allSubcompanyIds.toString(); + employeeList = employeeList.stream().filter(emp -> finalAllSubcompanyIds.contains(emp.getSubcompanyid().toString())).collect(Collectors.toList()); } - // 获取部门、职级、岗位、人事状态 - List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, tenantKey); // 部门过滤 - if (CollectionUtils.isNotEmpty(param.getDepart())) { - Set employeeIdsByDepartFilter = new HashSet<>(); - simpleEmployeeList.forEach(simpleEmployee -> { - if (simpleEmployee.getDepartment() != null && param.getDepart().contains(simpleEmployee.getDepartment().getId())) { - employeeIdsByDepartFilter.add(simpleEmployee.getEmployeeId()); + List depart = param.getDepart(); + if (CollectionUtils.isNotEmpty(depart)) { + StringBuilder allDepartIds = new StringBuilder(); + for (Long subDepartId : depart) { + String ids = ""; + String allDepartId = null; + try { + allDepartId = DepartmentComInfo.getAllChildDepartId(subDepartId.toString(), ids); + } catch (Exception e) { + e.printStackTrace(); } - }); - if (CollectionUtils.isEmpty(employeeIdsByDepartFilter)) { - return Lists.newArrayList(); + allDepartIds.append(allDepartId); } - list = list.stream().filter(po -> employeeIdsByDepartFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); + String finalAllDepartIds = allDepartIds.toString(); + employeeList = employeeList.stream().filter(emp -> finalAllDepartIds.contains(emp.getDepartmentId().toString())).collect(Collectors.toList()); } // 职级过滤 - if (CollectionUtils.isNotEmpty(param.getGrade())) { - Set employeeIdsByGradeFilter = new HashSet<>(); - simpleEmployeeList.forEach(simpleEmployee -> { - if (simpleEmployee.getGrade() != null && param.getGrade().contains(simpleEmployee.getGrade().getId())) { - employeeIdsByGradeFilter.add(simpleEmployee.getEmployeeId()); - } - }); - if (CollectionUtils.isEmpty(employeeIdsByGradeFilter)) { - return Lists.newArrayList(); - } - list = list.stream().filter(po -> employeeIdsByGradeFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); - } - // 岗位过滤 - if (CollectionUtils.isNotEmpty(param.getPosition())) { - Set employeeIdsByPostionFilter = new HashSet<>(); - simpleEmployeeList.forEach(simpleEmployee -> { - if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) { - employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId()); - } - }); - if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) { - return Lists.newArrayList(); - } - list = list.stream().filter(po -> employeeIdsByPostionFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); - } - // 人事状态过滤 - if (CollectionUtils.isNotEmpty(param.getStatus())) { - Set employeeIdsByStatus = new HashSet<>(); - simpleEmployeeList.forEach(simpleEmployee -> { - if (simpleEmployee.getStatus() != null && param.getStatus().contains(simpleEmployee.getPersonnelStatus())) { - employeeIdsByStatus.add(simpleEmployee.getEmployeeId()); - } - }); - if (CollectionUtils.isEmpty(employeeIdsByStatus)) { - return Lists.newArrayList(); - } - list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList()); - } - // 入职日期 - if (CollectionUtils.isNotEmpty(param.getHiredate())) { - Set employeeIdsByHiredate = new HashSet<>(); - simpleEmployeeList.forEach(simpleEmployee -> { - LocalDate hiredate = ReportTimeUtil.dateToLocalDate(simpleEmployee.getHiredate()); - if (simpleEmployee.getHiredate() != null && !hiredate.isBefore(param.getHiredate().get(0)) && !hiredate.isAfter(param.getHiredate().get(1))) { - employeeIdsByHiredate.add(simpleEmployee.getEmployeeId()); - } - }); - if (CollectionUtils.isEmpty(employeeIdsByHiredate)) { - return Lists.newArrayList(); - } - list = list.stream().filter(po -> employeeIdsByHiredate.contains(po.getEmployeeId())).collect(Collectors.toList()); - } +// if (CollectionUtils.isNotEmpty(param.getGrade())) { +// Set employeeIdsByGradeFilter = new HashSet<>(); +// simpleEmployeeList.forEach(simpleEmployee -> { +// if (simpleEmployee.getGrade() != null && param.getGrade().contains(simpleEmployee.getGrade().getId())) { +// employeeIdsByGradeFilter.add(simpleEmployee.getEmployeeId()); +// } +// }); +// if (CollectionUtils.isEmpty(employeeIdsByGradeFilter)) { +// return Lists.newArrayList(); +// } +// list = list.stream().filter(po -> employeeIdsByGradeFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); +// } +// // 岗位过滤 +// if (CollectionUtils.isNotEmpty(param.getPosition())) { +// Set employeeIdsByPostionFilter = new HashSet<>(); +// simpleEmployeeList.forEach(simpleEmployee -> { +// if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) { +// employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId()); +// } +// }); +// if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) { +// return Lists.newArrayList(); +// } +// list = list.stream().filter(po -> employeeIdsByPostionFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); +// } +// // 人事状态过滤 +// if (CollectionUtils.isNotEmpty(param.getStatus())) { +// Set employeeIdsByStatus = new HashSet<>(); +// simpleEmployeeList.forEach(simpleEmployee -> { +// if (simpleEmployee.getStatus() != null && param.getStatus().contains(simpleEmployee.getPersonnelStatus())) { +// employeeIdsByStatus.add(simpleEmployee.getEmployeeId()); +// } +// }); +// if (CollectionUtils.isEmpty(employeeIdsByStatus)) { +// return Lists.newArrayList(); +// } +// list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList()); +// } +// // 入职日期 +// if (CollectionUtils.isNotEmpty(param.getHiredate())) { +// Set employeeIdsByHiredate = new HashSet<>(); +// simpleEmployeeList.forEach(simpleEmployee -> { +// LocalDate hiredate = ReportTimeUtil.dateToLocalDate(simpleEmployee.getHiredate()); +// if (simpleEmployee.getHiredate() != null && !hiredate.isBefore(param.getHiredate().get(0)) && !hiredate.isAfter(param.getHiredate().get(1))) { +// employeeIdsByHiredate.add(simpleEmployee.getEmployeeId()); +// } +// }); +// if (CollectionUtils.isEmpty(employeeIdsByHiredate)) { +// return Lists.newArrayList(); +// } +// list = list.stream().filter(po -> employeeIdsByHiredate.contains(po.getEmployeeId())).collect(Collectors.toList()); +// } // // 离职日期 todo // if (CollectionUtils.isNotEmpty(param.getLeavedate())) { // Set employeeIdsByLeavedate = new HashSet<>(); @@ -696,17 +691,15 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct list = list.stream().filter(po -> param.getEmployee().contains(po.getEmployeeId())).collect(Collectors.toList()); } + Set empIds = SalaryEntityUtil.properties(employeeList, DataCollectionEmployee::getEmployeeId); + list = list.stream().filter(po -> empIds.contains(po.getEmployeeId())).collect(Collectors.toList()); + return list; } @Override - public List listByTaxAgentAndSalaryMonth(List taxAgentIds, Set salaryMonths, String tenantKey) { - return new LambdaQueryChainWrapper<>(salaryAcctEmployeeMapper) - .eq(SalaryAcctEmployeePO::getTenantKey, tenantKey) - .eq(SalaryAcctEmployeePO::getDeleteType, 0) - .in(SalaryAcctEmployeePO::getTaxAgentId, taxAgentIds) - .in(CollectionUtils.isNotEmpty(salaryMonths), SalaryAcctEmployeePO::getSalaryMonth, salaryMonths) - .list(); + public List listByTaxAgentAndSalaryMonth(List taxAgentIds, Set salaryMonths) { + return getSalaryAcctEmployeeMapper().listSome(SalaryAcctEmployeePO.builder().taxAgentIds(taxAgentIds).salaryMonths(salaryMonths).build()); } } From 09b2bf54e1ee708dbaec7a1c7fbfd88639d43a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Apr 2023 09:22:09 +0800 Subject: [PATCH 004/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sql/劳务所得.sql | 53 --- resource/sql/新增系统薪资项目.sql | 22 -- resource/sql/申报表.sql | 19 - resource/sql/申报表字段缺失.sql | 81 ---- resource/sql/薪酬总管理员权限项.sql | 30 -- resource/sql/账套新建不了.sql | 9 - .../report/SalaryStatisticsItemMapper.java | 72 ++++ .../report/SalaryStatisticsItemMapper.xml | 344 +++++++++++++++++ .../entity/bo/SalaryStatisticsReportBO.java | 325 ++++++++-------- .../entity/po/SalaryStatisticsItemPO.java | 9 +- .../SalaryStatisticsReportService.java | 11 +- .../report/service/SubTableExportService.java | 7 + .../impl/SalaryStatisticsItemServiceImpl.java | 136 +++---- .../SalaryStatisticsReportServiceImpl.java | 241 ++++++------ .../impl/SubTableExportServiceImpl.java | 186 +++++++++ .../web/SalaryStatisticsReportController.java | 157 ++++---- .../SalaryStatisticsReportWrapper.java | 358 +++++------------- 17 files changed, 1123 insertions(+), 937 deletions(-) delete mode 100644 resource/sql/劳务所得.sql delete mode 100644 resource/sql/新增系统薪资项目.sql delete mode 100644 resource/sql/申报表.sql delete mode 100644 resource/sql/申报表字段缺失.sql delete mode 100644 resource/sql/薪酬总管理员权限项.sql delete mode 100644 resource/sql/账套新建不了.sql create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml create mode 100644 src/com/engine/salary/report/service/SubTableExportService.java create mode 100644 src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java diff --git a/resource/sql/劳务所得.sql b/resource/sql/劳务所得.sql deleted file mode 100644 index 97c8f9ef4..000000000 --- a/resource/sql/劳务所得.sql +++ /dev/null @@ -1,53 +0,0 @@ -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599184238075904, '社保个人合计', 'socialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339100298, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 17:01:24', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599446244319233, '公积金个人合计', 'accumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339063868, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 17:01:26', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458434280095745, '劳务收入', 'laborIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 16:55:45', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458558739300353, '劳务免税收入', 'laborTaxFreeIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-08-01 16:55:54', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459151591383041, '备注', 'description', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-06-17 09:01:57', 'string'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459464954929153, '所得项目', 'incomeItems', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-06-17 09:01:57', 'string'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704467747234045953, '劳务税减除费用', 'laborSubtraction', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340673739, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-08-01 17:03:47', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468391612751873, '劳务税应纳税所得额', 'laborTaxableIncome', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340916981, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:51', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468443048992769, '劳务税税率', 'laborTaxRate', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341397524, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:53', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468490269204481, '劳务税速算扣除数', 'laborQuickDeductionFactor', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341564390, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:54', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468528928063488, '劳务税应纳税额', 'laborTaxPayable', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341811881, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:59', '2022-08-01 17:03:55', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (733975748932845568, '个税调差', 'taxAdjustment', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:59', '2022-06-17 09:01:59', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629570, '商业健康保险[劳务]', 'commercialHealthInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341909423, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:38', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629571, '税延养老保险[劳务]', 'taxDeferredEndowmentInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341966905, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:40', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629572, '其他[劳务]', 'other4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341993723, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:41', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629573, '本月(次)准予扣除的捐赠额[劳务]', 'allowedDonation4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659342041963, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:42', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629574, '备注[劳务]', 'description4', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 16:56:25', 'string'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629575, '已发薪资合计', 'issuedTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-08-01 16:59:28', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629576, '补发薪资合计', 'ressueTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-08-01 16:59:40', 'number'); - - -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339063868, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{社保福利.公积金个人合计}', 'welfare_fundPerSum', 92, 0, '2022-08-01 15:31:04', '2022-08-01 15:31:04'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339100298, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{社保福利.社保个人合计}', 'welfare_socialPerSum', 92, 0, '2022-08-01 15:31:40', '2022-08-01 15:31:40'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340673739, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({薪资项目.劳务收入}-{薪资项目.劳务免税收入}<=4000){800;}else{0.2*({薪资项目.劳务收入}-{薪资项目.劳务免税收入})}', 'if(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome<=4000){800;}else{0.2*(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome)}', 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340916981, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{薪资项目.劳务收入}-{薪资项目.劳务免税收入}-{薪资项目.劳务税减除费用}', 'salaryItem_laborIncome-salaryItem_laborTaxFreeIncome-salaryItem_laborSubtraction', 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341397524, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({薪资项目.劳务税应纳税所得额}<=20000){0.2;}else if({薪资项目.劳务税应纳税所得额}<=50000){0.3;}else{0.4;}', 'if(salaryItem_laborTaxableIncome<=20000){0.2;}else if(salaryItem_laborTaxableIncome<=50000){0.3;}else{0.4;}', 92, 0, '2022-08-01 16:09:57', '2022-08-01 16:09:57'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341564390, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({薪资项目.劳务税应纳税所得额}<=20000){0;}else if({薪资项目.劳务税应纳税所得额}<=50000){2000;}else{7000;}', 'if(salaryItem_laborTaxableIncome<=20000){0;}else if(salaryItem_laborTaxableIncome<=50000){2000;}else{7000;}', 92, 0, '2022-08-01 16:12:44', '2022-08-01 16:12:44'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341811881, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({薪资项目.劳务税应纳税所得额}<=0){0;}else{{薪资项目.劳务税应纳税所得额}*{薪资项目.劳务税税率}-{薪资项目.劳务税速算扣除数}}', 'if(salaryItem_laborTaxableIncome<=0){0;}else{salaryItem_laborTaxableIncome*salaryItem_laborTaxRate-salaryItem_laborQuickDeductionFactor}', 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341909423, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{其他免税扣除.商业健康保险}', 'otherDeduction_businessHealthyInsurance', 92, 0, '2022-08-01 16:18:29', '2022-08-01 16:18:29'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341966905, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{其他免税扣除.税延养老保险}', 'otherDeduction_taxDelayEndowmentInsurance', 92, 0, '2022-08-01 16:19:27', '2022-08-01 16:19:27'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341993723, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{其他免税扣除.其他}', 'otherDeduction_otherDeduction', 92, 0, '2022-08-01 16:19:54', '2022-08-01 16:19:54'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659342041963, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{其他免税扣除.准予扣除的捐赠额}', 'otherDeduction_deductionAllowedDonation', 92, 0, '2022-08-01 16:20:42', '2022-08-01 16:20:42'); - - - -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339063886, '公积金个人合计', 1659339063868, 'welfare_fundPerSum', '{社保福利.公积金个人合计}', 'number', 'welfare', 1, 92, 0, '2022-08-01 15:31:04', '2022-08-01 15:31:04'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339100354, '社保个人合计', 1659339100298, 'welfare_socialPerSum', '{社保福利.社保个人合计}', 'number', 'welfare', 2, 92, 0, '2022-08-01 15:31:40', '2022-08-01 15:31:40'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673751, '劳务收入', 1659340673739, 'salaryItem_laborIncome', '{薪资项目.劳务收入}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673754, '劳务免税收入', 1659340673739, 'salaryItem_laborTaxFreeIncome', '{薪资项目.劳务免税收入}', 'number', 'salaryItem', 1, 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917032, '劳务收入', 1659340916981, 'salaryItem_laborIncome', '{薪资项目.劳务收入}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917035, '劳务免税收入', 1659340916981, 'salaryItem_laborTaxFreeIncome', '{薪资项目.劳务免税收入}', 'number', 'salaryItem', 1, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917039, '劳务税减除费用', 1659340916981, 'salaryItem_laborSubtraction', '{薪资项目.劳务税减除费用}', 'number', 'salaryItem', 2, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341397539, '劳务税应纳税所得额', 1659341397524, 'salaryItem_laborTaxableIncome', '{薪资项目.劳务税应纳税所得额}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:09:57', '2022-08-01 16:09:57'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341564447, '劳务税应纳税所得额', 1659341564390, 'salaryItem_laborTaxableIncome', '{薪资项目.劳务税应纳税所得额}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:12:44', '2022-08-01 16:12:44'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811897, '劳务税应纳税所得额', 1659341811881, 'salaryItem_laborTaxableIncome', '{薪资项目.劳务税应纳税所得额}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811901, '劳务税税率', 1659341811881, 'salaryItem_laborTaxRate', '{薪资项目.劳务税税率}', 'number', 'salaryItem', 3, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811904, '劳务税速算扣除数', 1659341811881, 'salaryItem_laborQuickDeductionFactor', '{薪资项目.劳务税速算扣除数}', 'number', 'salaryItem', 4, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341909473, '商业健康保险', 1659341909423, 'otherDeduction_businessHealthyInsurance', '{其他免税扣除.商业健康保险}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:18:29', '2022-08-01 16:18:29'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341966920, '税延养老保险', 1659341966905, 'otherDeduction_taxDelayEndowmentInsurance', '{其他免税扣除.税延养老保险}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:19:27', '2022-08-01 16:19:27'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341993736, '其他', 1659341993723, 'otherDeduction_otherDeduction', '{其他免税扣除.其他}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:19:54', '2022-08-01 16:19:54'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659342041967, '准予扣除的捐赠额', 1659342041963, 'otherDeduction_deductionAllowedDonation', '{其他免税扣除.准予扣除的捐赠额}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:20:42', '2022-08-01 16:20:42'); - - diff --git a/resource/sql/新增系统薪资项目.sql b/resource/sql/新增系统薪资项目.sql deleted file mode 100644 index e4de7f957..000000000 --- a/resource/sql/新增系统薪资项目.sql +++ /dev/null @@ -1,22 +0,0 @@ -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836162, '累计婴幼儿照护', 'addUpInfantCare', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655196897860, '', 0, 1, 0, 0, 'all_teams', '2022-05-31 17:36:04', '2022-05-31 17:36:04', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703419929857687552, '当前累计免税收入', 'addUpTaxFreeIncome', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197296054, '', 0, 1, 0, 0, 'all_teams', '2022-03-11 13:50:17', '2022-03-17 16:13:27', 'number'); -INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836161, '累计大病医疗', 'addUpIllnessMedical', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197430967, '', 0, 1, 0, 0, 'all_teams', '2022-03-17 13:30:57', '2022-03-18 17:06:46', 'number'); - - -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655196897860, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{累计专项附加扣除.累计婴幼儿照护}', 'addUpDeductions_addUpInfantCare', 92, 0, '2022-06-14 16:54:58', '2022-06-14 16:54:58'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197296054, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{薪资项目.本月(次)免税收入}+{往期累计情况.累计免税收入}', 'salaryItem_taxFreeIncome+addUpSituation_addUpTaxExemptIncome', 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36'); -INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197430967, '公式1', '备注', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{累计专项附加扣除.累计大病医疗}', 'addUpDeductions_addUpIllnessMedical', 92, 0, '2022-06-14 17:03:51', '2022-06-14 17:03:51'); - - -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655196897869, '累计婴幼儿照护', 1655196897860, 'addUpDeductions_addUpInfantCare', '{累计专项附加扣除.累计婴幼儿照护}', 'number', 'addUpDeductions', 0, 92, 0, '2022-06-14 16:54:58', '2022-06-14 16:54:58'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296059, '本月(次)免税收入', 1655197296054, 'salaryItem_taxFreeIncome', '{薪资项目.本月(次)免税收入}', 'number', 'salaryItem', 0, 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296063, '累计免税收入', 1655197296054, 'addUpSituation_addUpTaxExemptIncome', '{往期累计情况.累计免税收入}', 'number', 'addUpSituation', 1, 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36'); -INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197430986, '累计大病医疗', 1655197430967, 'addUpDeductions_addUpIllnessMedical', '{累计专项附加扣除.累计大病医疗}', 'number', 'addUpDeductions', 0, 92, 0, '2022-06-14 17:03:51', '2022-06-14 17:03:51'); - - -INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (728615865977528321, 1, 705641858303836162, 1, 0, 0, '2022-05-31 17:36:04', '2022-05-31 17:36:04', 0, 'all_teams', 703433961629614103, 7); -INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845569, 1, 674853617092214787, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 8); -INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845572, 1, 674853617092214788, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 9); -INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845578, 1, 674853617092214789, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 10); -INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845567, 1, 733975748932845568, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 11); - diff --git a/resource/sql/申报表.sql b/resource/sql/申报表.sql deleted file mode 100644 index 8d150edb2..000000000 --- a/resource/sql/申报表.sql +++ /dev/null @@ -1,19 +0,0 @@ -ALTER TABLE hrsa_tax_declaration ADD COLUMN income_category int(255) NOT NULL COMMENT '薪资类型。1:正常工资薪金所得、4:劳务所得' ; - -ALTER TABLE hrsa_tax_declaration_detail ADD COLUMN employee_type int(255) NOT NULL ; - -ALTER TABLE hrsa_tax_declaration ADD income_category int NULL -GO - -ALTER TABLE hrsa_tax_declaration_detail ADD employee_type int NULL -GO - -ALTER TABLE hrsa_tax_declaration add ( - income_category number -) -/ - -ALTER TABLE hrsa_tax_declaration_detail add ( - employee_type number -) -/ \ No newline at end of file diff --git a/resource/sql/申报表字段缺失.sql b/resource/sql/申报表字段缺失.sql deleted file mode 100644 index 7eb4d4a69..000000000 --- a/resource/sql/申报表字段缺失.sql +++ /dev/null @@ -1,81 +0,0 @@ - --- 累计子女教育 -UPDATE a set a.field_value = b.add_up_child_education - FROM hrsa_tax_declaration_detail a,hrsa_add_up_deduction b -where a.employee_id = b.employee_id - and b.tax_agent_id = 4 - and a.tax_declaration_id = 1675151551804 - and a.delete_type = 0 - and b.delete_type =0 - and b.declare_month='2023-01-01 00:00:00' - and a.field_code = 'addUpChildEducation'; - --- 累计住房贷款利息 -UPDATE a set a.field_value = b.add_up_housing_loan_interest - FROM hrsa_tax_declaration_detail a,hrsa_add_up_deduction b -where a.employee_id = b.employee_id - and b.tax_agent_id = 4 - and a.tax_declaration_id = 1675151551804 - and a.delete_type = 0 - and b.delete_type =0 - and b.declare_month='2023-01-01 00:00:00' - and a.field_code = 'addUpHousingLoanInterest'; - --- 累计住房租金 -UPDATE a set a.field_value = b.add_up_housing_rent - FROM hrsa_tax_declaration_detail a,hrsa_add_up_deduction b -where a.employee_id = b.employee_id - and b.tax_agent_id = 4 - and a.tax_declaration_id = 1675151551804 - and a.delete_type = 0 - and b.delete_type =0 - and b.declare_month='2023-01-01 00:00:00' - and a.field_code = 'addUpHousingRent'; - - - --- 累计继续教育 -UPDATE a set a.field_value = b.add_up_continuing_education - FROM hrsa_tax_declaration_detail a,hrsa_add_up_deduction b -where a.employee_id = b.employee_id - and b.tax_agent_id = 4 - and a.tax_declaration_id = 1675151551804 - and a.delete_type = 0 - and b.delete_type =0 - and b.declare_month='2023-01-01 00:00:00' - and a.field_code = 'addUpContinuingEducation'; - ---累计赡养老人 -UPDATE a set a.field_value = b.add_up_support_elderly - FROM hrsa_tax_declaration_detail a,hrsa_add_up_deduction b -where a.employee_id = b.employee_id - and b.tax_agent_id = 4 - and a.tax_declaration_id = 1675151551804 - and a.delete_type = 0 - and b.delete_type =0 - and b.declare_month='2023-01-01 00:00:00' - and a.field_code = 'addUpSupportElderly'; - - - ---累计大病医疗 -UPDATE a set a.field_value = b.add_up_illness_medical - FROM hrsa_tax_declaration_detail a,hrsa_add_up_deduction b -where a.employee_id = b.employee_id - and b.tax_agent_id = 4 - and a.tax_declaration_id = 1675151551804 - and a.delete_type = 0 - and b.delete_type =0 - and b.declare_month='2023-01-01 00:00:00' - and a.field_code = 'addUpIllnessMedical'; - ---累计婴幼儿照护 -UPDATE a set a.field_value = b.add_up_infant_care - FROM hrsa_tax_declaration_detail a,hrsa_add_up_deduction b -where a.employee_id = b.employee_id - and b.tax_agent_id = 4 - and a.tax_declaration_id = 1675151551804 - and a.delete_type = 0 - and b.delete_type =0 - and b.declare_month='2023-01-01 00:00:00' - and a.field_code = 'addUpInfantCare'; \ No newline at end of file diff --git a/resource/sql/薪酬总管理员权限项.sql b/resource/sql/薪酬总管理员权限项.sql deleted file mode 100644 index 899642614..000000000 --- a/resource/sql/薪酬总管理员权限项.sql +++ /dev/null @@ -1,30 +0,0 @@ -delete from SystemRightDetail where rightid =2693 -; -delete from SystemRightsLanguage where id =2693 -; -delete from SystemRights where id =2693 -; -delete from SystemRightToGroup where rightid =2693 -; -delete from SystemRightType where id =36 -; -delete from SystemRightGroups where id =-22 -; -insert into SystemRights (id,rightdesc,righttype,detachable) values (2693,'薪酬管理权限','36',0) -; -insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,8,'Salary management authority','Salary management authority') -; -insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,9,'薪酬管理權限','薪酬管理權限') -; -insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,7,'薪酬管理权限','薪酬管理权限') -; - -insert into SystemRightDetail (id,rightdetailname,rightdetail,rightid) values (43969,'薪酬总管理员','Salary:Chief',2693) -; - -insert into SystemRightToGroup(rightid,groupid) values (2693,-22) -; -insert into SystemRightGroups (id,rightgroupmark, rightgroupname, rightgroupremark) values(-22,'SALARY','薪酬管理权限组','薪酬管理') -; -insert into SystemRightType(id,rightTypeName,rightTypeDesc) VALUES (36,'薪酬管理','薪酬管理') -; diff --git a/resource/sql/账套新建不了.sql b/resource/sql/账套新建不了.sql deleted file mode 100644 index 136519f4f..000000000 --- a/resource/sql/账套新建不了.sql +++ /dev/null @@ -1,9 +0,0 @@ -ALTER TABLE hrsa_salary_item MODIFY COLUMN shared_type int(0) NULL ; -ALTER TABLE hrsa_salary_sob_item MODIFY COLUMN tenant_key varchar(10) null ; - - -ALTER TABLE hrsa_salary_item ALTER COLUMN [shared_type] int NULL -GO - -ALTER TABLE hrsa_salary_sob_item ALTER COLUMN [tenant_key] varchar NULL -GO \ No newline at end of file diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java new file mode 100644 index 000000000..8a7ddab42 --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java @@ -0,0 +1,72 @@ +package com.engine.salary.mapper.report; + +import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface SalaryStatisticsItemMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryStatisticsItemPO SalaryStatisticsItemPO); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryStatisticsItemPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param SalaryStatisticsItemPO 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryStatisticsItemPO SalaryStatisticsItemPO); + + /** + * 修改,修改所有字段 + * + * @param SalaryStatisticsItemPO 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryStatisticsItemPO SalaryStatisticsItemPO); + + /** + * 修改,忽略null字段 + * + * @param SalaryStatisticsItemPO 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryStatisticsItemPO SalaryStatisticsItemPO); + + /** + * 删除记录 + * + * @param SalaryStatisticsItemPO 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryStatisticsItemPO SalaryStatisticsItemPO); + + /** + * 批量删除记录 + * @param ids 主键id集合 + */ + void deleteByIds(@Param("ids") Collection ids); + +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml new file mode 100644 index 000000000..94fde1d06 --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + t + . + avg_rule + , t.count_rule + , t.create_time + , t.creator + , t.delete_type + , t.id + , t.index_value + , t.item_name + , t.item_value + , t.max_rule + , t.median_rule + , t.min_rule + , t.stat_report_id + , t.sum_rule + , t.tenant_key + , t.unit_type + , t.update_time + + + + + + + + + + + + + + + INSERT INTO hrsa_salary_statistics_item + + + + avg_rule, + + + count_rule, + + + create_time, + + + creator, + + + delete_type, + + + id, + + + index_value, + + + item_name, + + + item_value, + + + max_rule, + + + median_rule, + + + min_rule, + + + stat_report_id, + + + sum_rule, + + + tenant_key, + + + unit_type, + + + update_time, + + + + + #{avgRule}, + + + #{countRule}, + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{id}, + + + #{indexValue}, + + + #{itemName}, + + + #{itemValue}, + + + #{maxRule}, + + + #{medianRule}, + + + #{minRule}, + + + #{statReportId}, + + + #{sumRule}, + + + #{tenantKey}, + + + #{unitType}, + + + #{updateTime}, + + + + + + + UPDATE hrsa_salary_statistics_item + + avg_rule=#{avgRule}, + count_rule=#{countRule}, + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + index_value=#{indexValue}, + item_name=#{itemName}, + item_value=#{itemValue}, + max_rule=#{maxRule}, + median_rule=#{medianRule}, + min_rule=#{minRule}, + stat_report_id=#{statReportId}, + sum_rule=#{sumRule}, + tenant_key=#{tenantKey}, + unit_type=#{unitType}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_statistics_item + + + avg_rule=#{avgRule}, + + + count_rule=#{countRule}, + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + index_value=#{indexValue}, + + + item_name=#{itemName}, + + + item_value=#{itemValue}, + + + max_rule=#{maxRule}, + + + median_rule=#{medianRule}, + + + min_rule=#{minRule}, + + + stat_report_id=#{statReportId}, + + + sum_rule=#{sumRule}, + + + tenant_key=#{tenantKey}, + + + unit_type=#{unitType}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_statistics_item + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_salary_statistics_item + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index 59adc16ad..d4a32742e 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -1,6 +1,8 @@ package com.engine.salary.report.entity.bo; import com.alibaba.fastjson.JSON; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; import com.engine.salary.report.entity.dto.SalaryStatisticsItemRuleDTO; @@ -26,6 +28,7 @@ import org.springframework.beans.BeanUtils; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -87,17 +90,17 @@ public class SalaryStatisticsReportBO { param.setSalaryEndMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryEndMonth())); // todo 待优化 - String key = "id"; - param.setTaxAgent(JSON.parseArray(po.getTaxAgentSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); - param.setIncomeCategory(JSON.parseArray(po.getIncomeCategorySetting(), Map.class).stream().map(m -> Integer.valueOf(m.get(key).toString())).collect(Collectors.toList())); - param.setSubCompany(JSON.parseArray(po.getSubCompanySetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); - param.setDepart(JSON.parseArray(po.getDepartSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); - param.setGrade(JSON.parseArray(po.getGradeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); - param.setPosition(JSON.parseArray(po.getPositionSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); - param.setStatus(JSON.parseArray(po.getStatusSetting(), Map.class).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); - param.setEmployee(JSON.parseArray(po.getEmployeeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); - param.setHiredate(JSON.parseArray(po.getHiredateSetting(), LocalDate.class)); - param.setLeavedate(JSON.parseArray(po.getLeavedateSetting(), LocalDate.class)); +// String key = "id"; +// param.setTaxAgent(JSON.parseArray(po.getTaxAgentSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setIncomeCategory(JSON.parseArray(po.getIncomeCategorySetting(), Map.class).stream().map(m -> Integer.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setSubCompany(JSON.parseArray(po.getSubCompanySetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setDepart(JSON.parseArray(po.getDepartSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setGrade(JSON.parseArray(po.getGradeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setPosition(JSON.parseArray(po.getPositionSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setStatus(JSON.parseArray(po.getStatusSetting(), Map.class).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); +// param.setEmployee(JSON.parseArray(po.getEmployeeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setHiredate(JSON.parseArray(po.getHiredateSetting(), LocalDate.class)); +// param.setLeavedate(JSON.parseArray(po.getLeavedateSetting(), LocalDate.class)); } /** @@ -114,15 +117,15 @@ public class SalaryStatisticsReportBO { if (SalaryStatisticsDimensionConstant.DM_SALARY_MONTH.equals(dimension.getDimCode())) { lastParam.setSalaryStartMonth(ReportTimeUtil.getLastYearMonth(param.getSalaryStartMonth())); lastParam.setSalaryEndMonth(ReportTimeUtil.getLastYearMonth(param.getSalaryEndMonth())); - // 年份 + // 年份 } else if (SalaryStatisticsDimensionConstant.DM_YEAR.equals(dimension.getDimCode())) { lastParam.setSalaryStartMonth(ReportTimeUtil.getSameYearMonth(param.getSalaryStartMonth())); lastParam.setSalaryEndMonth(ReportTimeUtil.getSameYearMonth(param.getSalaryEndMonth())); - // 半年度 + // 半年度 } else if (SalaryStatisticsDimensionConstant.DM_HALF_YEAR.equals(dimension.getDimCode())) { lastParam.setSalaryStartMonth(ReportTimeUtil.getPlusYearMonth(param.getSalaryStartMonth(), -6)); lastParam.setSalaryEndMonth(ReportTimeUtil.getPlusYearMonth(param.getSalaryEndMonth(), -6)); - // 季度 + // 季度 } else if (SalaryStatisticsDimensionConstant.DM_QUARTER.equals(dimension.getDimCode())) { lastParam.setSalaryStartMonth(ReportTimeUtil.getPlusYearMonth(param.getSalaryStartMonth(), -3)); lastParam.setSalaryEndMonth(ReportTimeUtil.getPlusYearMonth(param.getSalaryEndMonth(), -3)); @@ -199,7 +202,6 @@ public class SalaryStatisticsReportBO { } - private static void calculate4Sum(Map result, SalaryStatisticsItemPO item, List> nowDetail, List> lastDetail, List> sameDetail) { SalaryStatisticsItemRuleDTO sumRule = JSON.parseObject(item.getSumRule(), SalaryStatisticsItemRuleDTO.class); if (sumRule == null || sumRule.getTotalValue() != 1) { @@ -487,7 +489,7 @@ public class SalaryStatisticsReportBO { * @param sumDecimal */ private static void nowAndRatio(Map result, SalaryStatisticsItemPO item, SalaryStatisticsItemRuleDTO rule, String ruleKey, BigDecimal sumDecimal) { - String keyPrefix = item.getId().toString() + UD +ruleKey; + String keyPrefix = item.getId().toString() + UD + ruleKey; // 本期合计 result.put(keyPrefix + K_NOW, ReportDataUtil.thousandthConvert(unitTypeConvert(sumDecimal, item.getUnitType()))); // 占比:和本期合计一样的值,便于计算 @@ -507,7 +509,7 @@ public class SalaryStatisticsReportBO { * @param lastValue */ private static void lastM2m(Map result, SalaryStatisticsItemPO item, SalaryStatisticsItemRuleDTO rule, String ruleKey, BigDecimal nowValue, BigDecimal lastValue) { - String keyPrefix = item.getId().toString() + UD +ruleKey; + String keyPrefix = item.getId().toString() + UD + ruleKey; // 上期合计 result.put(keyPrefix + P_LAST, ReportDataUtil.thousandthConvert(unitTypeConvert(lastValue, item.getUnitType()))); // 合计环比差值 @@ -531,7 +533,7 @@ public class SalaryStatisticsReportBO { * @param sameValue */ private static void sameY2y(Map result, SalaryStatisticsItemPO item, SalaryStatisticsItemRuleDTO rule, String ruleKey, BigDecimal nowValue, BigDecimal sameValue) { - String keyPrefix = item.getId().toString() + UD +ruleKey; + String keyPrefix = item.getId().toString() + UD + ruleKey; // 同期合计 result.put(keyPrefix + P_SAME, ReportDataUtil.thousandthConvert(unitTypeConvert(sameValue, item.getUnitType()))); // 合计同比差值 @@ -551,7 +553,7 @@ public class SalaryStatisticsReportBO { * @return */ public static BigDecimal max(List list) { - if(CollectionUtils.isEmpty(list)) return new BigDecimal(D_ZERO); + if (CollectionUtils.isEmpty(list)) return new BigDecimal(D_ZERO); // BigDecimal max = Collections.max(list); BigDecimal sum = list.get(0); @@ -568,7 +570,7 @@ public class SalaryStatisticsReportBO { * @return */ public static BigDecimal min(List list) { - if(CollectionUtils.isEmpty(list)) return new BigDecimal(D_ZERO); + if (CollectionUtils.isEmpty(list)) return new BigDecimal(D_ZERO); // BigDecimal min = Collections.min(list); BigDecimal sum = list.get(0); for (int i = 1; i < list.size(); i++) { @@ -584,13 +586,13 @@ public class SalaryStatisticsReportBO { * @return */ public static BigDecimal median(List list) { - if(CollectionUtils.isEmpty(list)) return new BigDecimal(D_ZERO); + if (CollectionUtils.isEmpty(list)) return new BigDecimal(D_ZERO); Collections.sort(list); int size = list.size(); if (size % 2 == 1) { return list.get((size - 1) / 2); } else { - return (list.get(size/2-1).add(list.get(size/2))).divide(new BigDecimal(2), 2, RoundingMode.HALF_UP); + return (list.get(size / 2 - 1).add(list.get(size / 2))).divide(new BigDecimal(2), 2, RoundingMode.HALF_UP); } } @@ -621,9 +623,10 @@ public class SalaryStatisticsReportBO { /** * 定量-组距式分组list分割 * 说明: - * 1.如果是年:每个人的年份值在这个区间内;如果没有所属字段:各个字段值在区间内;如果有所属字敦:则该所属字段在区间内的数据 - * 2.区间内的话,就把id搞出来 - * 3.符合id的list筛选出来返回 + * 1.如果是年:每个人的年份值在这个区间内;如果没有所属字段:各个字段值在区间内;如果有所属字敦:则该所属字段在区间内的数据 + * 2.区间内的话,就把id搞出来 + * 3.符合id的list筛选出来返回 + * * @param groupSpacing * @param groupBelong * @param dimCode @@ -738,24 +741,23 @@ public class SalaryStatisticsReportBO { * @param page * @param salaryStatisticsItemList * @param employeeId - * @param tenantKey */ - public static Map buildTotal(PageInfo> page, List salaryStatisticsItemList, Long employeeId, String tenantKey) { + public static Map buildTotal(PageInfo> page, List salaryStatisticsItemList, Long employeeId) { Map salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, k -> k.getId() + "-" + employeeId); List> records = page.getList(); if (CollectionUtils.isNotEmpty(records)) { Set keys = records.get(0).keySet(); Map map = new HashMap<>(); - map.put("dimension", SalaryI18nUtil.getI18nLabel( 93278, "合计")); + map.put("dimension", SalaryI18nUtil.getI18nLabel(93278, "合计")); Map itemPOMap = new HashMap<>(); keys.forEach(key -> { - if (key.contains(COUNT+K_NOW) || key.contains(COUNT+K_LAST) || key.contains(COUNT+K_SAME) - || key.contains(SUM+K_NOW) || key.contains(SUM+K_LAST) || key.contains(SUM+K_SAME) - || key.contains(AVG+K_NOW) || key.contains(AVG+K_LAST) || key.contains(AVG+K_SAME) - || key.contains(MAX+K_NOW) || key.contains(MAX+K_LAST) || key.contains(MAX+K_SAME) - || key.contains(MIN+K_NOW) || key.contains(MIN+K_LAST) || key.contains(MIN+K_SAME) - || key.contains(MEDIAN+K_NOW) || key.contains(MEDIAN+K_LAST) || key.contains(MEDIAN+K_SAME)) { + if (key.contains(COUNT + K_NOW) || key.contains(COUNT + K_LAST) || key.contains(COUNT + K_SAME) + || key.contains(SUM + K_NOW) || key.contains(SUM + K_LAST) || key.contains(SUM + K_SAME) + || key.contains(AVG + K_NOW) || key.contains(AVG + K_LAST) || key.contains(AVG + K_SAME) + || key.contains(MAX + K_NOW) || key.contains(MAX + K_LAST) || key.contains(MAX + K_SAME) + || key.contains(MIN + K_NOW) || key.contains(MIN + K_LAST) || key.contains(MIN + K_SAME) + || key.contains(MEDIAN + K_NOW) || key.contains(MEDIAN + K_LAST) || key.contains(MEDIAN + K_SAME)) { String keyStr = key.split(UD)[0]; SalaryStatisticsItemPO salaryStatisticsItem = salaryStatisticsItemMap.get(Long.valueOf(keyStr) + "-" + employeeId); itemPOMap.put(salaryStatisticsItem.getId(), salaryStatisticsItem); @@ -824,139 +826,140 @@ public class SalaryStatisticsReportBO { * @param tenantKey * @return */ -// public static List buildReportColumns(String dimensionName, List salaryStatisticsItemList, Long employeeId, String tenantKey) { -// List result = new ArrayList<>(); -// result.add(new SubTableRankColumn(dimensionName, "dimension", "150", null, null, WeaAlignEnum.CENTER.getStringVal(), "left")); -// Map itemMap = salaryStatisticsItemList.stream().collect(Collectors.toMap(SalaryStatisticsItemPO::getId, Function.identity())); -// Map itemIdNameMap = salaryStatisticsItemList.stream().collect(LinkedHashMap::new, (map, item) -> map.put(item.getId(), item.getItemName()), LinkedHashMap::putAll); -// itemIdNameMap.forEach((k, v) -> { -// SubTableRankColumn weaTableColumn = new SubTableRankColumn(v, k.toString(), "300", null, null, WeaAlignEnum.CENTER.getStringVal()); -// SalaryStatisticsItemPO itemPO = itemMap.get(k); -// List children = new ArrayList<>(); -// // 1.合计规则children -// SalaryStatisticsItemRuleDTO countRule = JSON.parseObject(itemPO.getCountRule(), SalaryStatisticsItemRuleDTO.class); -// if (countRule != null && 1 == countRule.getTotalValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157127, "本周期(计数)"), k + UD + COUNT + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (countRule != null && 1 == countRule.getRatioValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174288, "本周期占比(计数)"), k + UD + COUNT + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (countRule != null && 1 == countRule.getM2mValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157128, "上周期(计数)"), k + UD + COUNT + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157129, "计数环比差值"), k + UD + COUNT + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157130, "计数环比增幅"), k + UD + COUNT + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (countRule != null && 1 == countRule.getY2yValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180672, "同比周期(计数)"), k + UD + COUNT + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174391, "计数同比差值"), k + UD + COUNT + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174392, "计数同比增幅"), k + UD + COUNT + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// // 2.求和规则children -// SalaryStatisticsItemRuleDTO totalRule = JSON.parseObject(itemPO.getSumRule(), SalaryStatisticsItemRuleDTO.class); -// if (totalRule != null && 1 == totalRule.getTotalValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157145, "本周期(求和)"), k + UD + SUM + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (totalRule != null && 1 == totalRule.getRatioValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174289, "本周期占比(求和)"), k + UD + SUM + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (totalRule != null && 1 == totalRule.getM2mValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157146, "上周期(求和)"), k + UD + SUM + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157147, "求和环比差值"), k + UD + SUM + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 157148, "求和环比增幅"), k + UD + SUM + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (totalRule != null && 1 == totalRule.getY2yValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180673, "同比周期(求和)"), k + UD + SUM + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174388, "求和同比差值"), k + UD + SUM + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174389, "求和同比增幅"), k + UD + SUM + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// // 3.平均值规则children -// SalaryStatisticsItemRuleDTO avgRule = JSON.parseObject(itemPO.getAvgRule(), SalaryStatisticsItemRuleDTO.class); -// if (avgRule != null && 1 == avgRule.getTotalValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174258, "本周期(平均值)"), k + UD + AVG + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (avgRule != null && 1 == avgRule.getRatioValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174290, "本周期占比(平均值)"), k + UD + AVG + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (avgRule != null && 1 == avgRule.getM2mValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174257, "上周期(平均值)"), k + UD + AVG + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174256, "平均值环比差值"), k + UD + AVG + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174255, "平均值环比增幅"), k + UD + AVG + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (avgRule != null && 1 == avgRule.getY2yValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180674, "同比周期(平均值)"), k + UD + AVG + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174385, "平均值同比差值"), k + UD + AVG + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174386, "平均值同比增幅"), k + UD + AVG + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// // 4.最大值规则children -// SalaryStatisticsItemRuleDTO maxRule = JSON.parseObject(itemPO.getMaxRule(), SalaryStatisticsItemRuleDTO.class); -// if (maxRule != null && 1 == maxRule.getTotalValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174254, "本周期(最大值)"), k + UD + MAX + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (maxRule != null && 1 == maxRule.getRatioValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174291, "本周期占比(最大值)"), k + UD + MAX + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (maxRule != null && 1 == maxRule.getM2mValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174253, "上周期(最大值)"), k + UD + MAX + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174252, "最大值环比差值"), k + UD + MAX + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174251, "最大值环比增幅"), k + UD + MAX + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (maxRule != null && 1 == maxRule.getY2yValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180675, "同比周期(最大值)"), k + UD + MAX + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174382, "最大值同比差值"), k + UD + MAX + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174383, "最大值同比增幅"), k + UD + MAX + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// // 5.最小值规则children -// SalaryStatisticsItemRuleDTO minRule = JSON.parseObject(itemPO.getMinRule(), SalaryStatisticsItemRuleDTO.class); -// if (minRule != null && 1 == minRule.getTotalValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174250, "本周期(最小值)"), k + UD + MIN + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (minRule != null && 1 == minRule.getRatioValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174292, "本周期占比(最小值)"), k + UD + MIN + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (minRule != null && 1 == minRule.getM2mValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174249, "上周期(最小值)"), k + UD + MIN + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174248, "最小值环比差值"), k + UD + MIN + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174247, "最小值环比增幅"), k + UD + MIN + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (minRule != null && 1 == minRule.getY2yValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180676, "同比周期(最小值)"), k + UD + MIN + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174379, "最小值同比差值"), k + UD + MIN + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174380, "最小值同比增幅"), k + UD + MIN + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// // 6.中位数规则children -// SalaryStatisticsItemRuleDTO medianRule = JSON.parseObject(itemPO.getMedianRule(), SalaryStatisticsItemRuleDTO.class); -// if (medianRule != null && 1 == medianRule.getTotalValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174246, "本周期(中位数)"),k + UD + MEDIAN + P_NOW, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (medianRule != null && 1 == medianRule.getRatioValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174293, "本周期占比(中位数)"), k + UD + MEDIAN + P_RATIO, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (medianRule != null && 1 == medianRule.getM2mValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174245, "上周期(中位数)"), k + UD + MEDIAN + P_LAST, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174244, "中位数环比差值"), k + UD + MEDIAN + P_M2M_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174243, "中位数环比增幅"), k + UD + MEDIAN + P_M2M_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// if (medianRule != null && 1 == medianRule.getY2yValue()) { -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 180677, "同比周期(中位数)"), k + UD + MEDIAN + P_SAME, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174376, "中位数同比差值"), k + UD + MEDIAN + P_Y2Y_D_VALUE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// children.add(new SubTableRankColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 174377, "中位数同比增幅"), k + UD + MEDIAN + P_Y2Y_INCREASE, COL_WIDTH, null, null, WeaAlignEnum.CENTER.getStringVal())); -// } -// weaTableColumn.setChildren(children); -// result.add(weaTableColumn); -// }); -// return result; -// } + public static List buildReportColumns(String dimensionName, List salaryStatisticsItemList) { + List result = new ArrayList<>(); + + result.add(new WeaTableColumnGroup("150", dimensionName, "dimension")); + Map itemMap = salaryStatisticsItemList.stream().collect(Collectors.toMap(SalaryStatisticsItemPO::getId, Function.identity())); + Map itemIdNameMap = salaryStatisticsItemList.stream().collect(LinkedHashMap::new, (map, item) -> map.put(item.getId(), item.getItemName()), LinkedHashMap::putAll); + itemIdNameMap.forEach((k, v) -> { + WeaTableColumnGroup weaTableColumn = new WeaTableColumnGroup("300", k.toString(), v); + SalaryStatisticsItemPO itemPO = itemMap.get(k); + List children = new ArrayList<>(); + // 1.合计规则children + SalaryStatisticsItemRuleDTO countRule = JSON.parseObject(itemPO.getCountRule(), SalaryStatisticsItemRuleDTO.class); + if (countRule != null && 1 == countRule.getTotalValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(157127, "本周期(计数)"), k + UD + COUNT + P_NOW)); + } + if (countRule != null && 1 == countRule.getRatioValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174288, "本周期占比(计数)"), k + UD + COUNT + P_RATIO)); + } + if (countRule != null && 1 == countRule.getM2mValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(157128, "上周期(计数)"), k + UD + COUNT + P_LAST)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(157129, "计数环比差值"), k + UD + COUNT + P_M2M_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(157130, "计数环比增幅"), k + UD + COUNT + P_M2M_INCREASE)); + } + if (countRule != null && 1 == countRule.getY2yValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(180672, "同比周期(计数)"), k + UD + COUNT + P_SAME)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174391, "计数同比差值"), k + UD + COUNT + P_Y2Y_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174392, "计数同比增幅"), k + UD + COUNT + P_Y2Y_INCREASE)); + } + // 2.求和规则children + SalaryStatisticsItemRuleDTO totalRule = JSON.parseObject(itemPO.getSumRule(), SalaryStatisticsItemRuleDTO.class); + if (totalRule != null && 1 == totalRule.getTotalValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(157145, "本周期(求和)"), k + UD + SUM + P_NOW)); + } + if (totalRule != null && 1 == totalRule.getRatioValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174289, "本周期占比(求和)"), k + UD + SUM + P_RATIO)); + } + if (totalRule != null && 1 == totalRule.getM2mValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(157146, "上周期(求和)"), k + UD + SUM + P_LAST)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(157147, "求和环比差值"), k + UD + SUM + P_M2M_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(157148, "求和环比增幅"), k + UD + SUM + P_M2M_INCREASE)); + } + if (totalRule != null && 1 == totalRule.getY2yValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(180673, "同比周期(求和)"), k + UD + SUM + P_SAME)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174388, "求和同比差值"), k + UD + SUM + P_Y2Y_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174389, "求和同比增幅"), k + UD + SUM + P_Y2Y_INCREASE)); + } + // 3.平均值规则children + SalaryStatisticsItemRuleDTO avgRule = JSON.parseObject(itemPO.getAvgRule(), SalaryStatisticsItemRuleDTO.class); + if (avgRule != null && 1 == avgRule.getTotalValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174258, "本周期(平均值)"), k + UD + AVG + P_NOW)); + } + if (avgRule != null && 1 == avgRule.getRatioValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174290, "本周期占比(平均值)"), k + UD + AVG + P_RATIO)); + } + if (avgRule != null && 1 == avgRule.getM2mValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174257, "上周期(平均值)"), k + UD + AVG + P_LAST)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174256, "平均值环比差值"), k + UD + AVG + P_M2M_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174255, "平均值环比增幅"), k + UD + AVG + P_M2M_INCREASE)); + } + if (avgRule != null && 1 == avgRule.getY2yValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(180674, "同比周期(平均值)"), k + UD + AVG + P_SAME)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174385, "平均值同比差值"), k + UD + AVG + P_Y2Y_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174386, "平均值同比增幅"), k + UD + AVG + P_Y2Y_INCREASE)); + } + // 4.最大值规则children + SalaryStatisticsItemRuleDTO maxRule = JSON.parseObject(itemPO.getMaxRule(), SalaryStatisticsItemRuleDTO.class); + if (maxRule != null && 1 == maxRule.getTotalValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174254, "本周期(最大值)"), k + UD + MAX + P_NOW)); + } + if (maxRule != null && 1 == maxRule.getRatioValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174291, "本周期占比(最大值)"), k + UD + MAX + P_RATIO)); + } + if (maxRule != null && 1 == maxRule.getM2mValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174253, "上周期(最大值)"), k + UD + MAX + P_LAST)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174252, "最大值环比差值"), k + UD + MAX + P_M2M_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174251, "最大值环比增幅"), k + UD + MAX + P_M2M_INCREASE)); + } + if (maxRule != null && 1 == maxRule.getY2yValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(180675, "同比周期(最大值)"), k + UD + MAX + P_SAME)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174382, "最大值同比差值"), k + UD + MAX + P_Y2Y_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174383, "最大值同比增幅"), k + UD + MAX + P_Y2Y_INCREASE)); + } + // 5.最小值规则children + SalaryStatisticsItemRuleDTO minRule = JSON.parseObject(itemPO.getMinRule(), SalaryStatisticsItemRuleDTO.class); + if (minRule != null && 1 == minRule.getTotalValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174250, "本周期(最小值)"), k + UD + MIN + P_NOW)); + } + if (minRule != null && 1 == minRule.getRatioValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174292, "本周期占比(最小值)"), k + UD + MIN + P_RATIO)); + } + if (minRule != null && 1 == minRule.getM2mValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174249, "上周期(最小值)"), k + UD + MIN + P_LAST)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174248, "最小值环比差值"), k + UD + MIN + P_M2M_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174247, "最小值环比增幅"), k + UD + MIN + P_M2M_INCREASE)); + } + if (minRule != null && 1 == minRule.getY2yValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(180676, "同比周期(最小值)"), k + UD + MIN + P_SAME)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174379, "最小值同比差值"), k + UD + MIN + P_Y2Y_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174380, "最小值同比增幅"), k + UD + MIN + P_Y2Y_INCREASE)); + } + // 6.中位数规则children + SalaryStatisticsItemRuleDTO medianRule = JSON.parseObject(itemPO.getMedianRule(), SalaryStatisticsItemRuleDTO.class); + if (medianRule != null && 1 == medianRule.getTotalValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174246, "本周期(中位数)"), k + UD + MEDIAN + P_NOW)); + } + if (medianRule != null && 1 == medianRule.getRatioValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174293, "本周期占比(中位数)"), k + UD + MEDIAN + P_RATIO)); + } + if (medianRule != null && 1 == medianRule.getM2mValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174245, "上周期(中位数)"), k + UD + MEDIAN + P_LAST)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174244, "中位数环比差值"), k + UD + MEDIAN + P_M2M_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174243, "中位数环比增幅"), k + UD + MEDIAN + P_M2M_INCREASE)); + } + if (medianRule != null && 1 == medianRule.getY2yValue()) { + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(180677, "同比周期(中位数)"), k + UD + MEDIAN + P_SAME)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174376, "中位数同比差值"), k + UD + MEDIAN + P_Y2Y_D_VALUE)); + children.add(new WeaTableColumnGroup(COL_WIDTH, SalaryI18nUtil.getI18nLabel(174377, "中位数同比增幅"), k + UD + MEDIAN + P_Y2Y_INCREASE)); + } + weaTableColumn.setChildren(children); + result.add(weaTableColumn); + }); + return result; + } // public static ExportCommonParam buildExportParam(String dimName, List weaTableColumns, List> records) { // List columns = com.google.common.collect.Lists.newArrayList(); // weaTableColumns.forEach(column -> { -// SubTableRankColumn subTableRankColumn = (SubTableRankColumn) column; +// WeaTableColumnGroup WeaTableColumnGroup = (WeaTableColumnGroup) column; // ExportColumn exportColumn = new ExportColumn(); -// exportColumn.setKeyIndex(subTableRankColumn.getDataIndex()); -// exportColumn.setValue(subTableRankColumn.getTitle()); -// if (CollectionUtils.isNotEmpty(subTableRankColumn.getChildren())) { +// exportColumn.setKeyIndex(WeaTableColumnGroup.getDataIndex()); +// exportColumn.setValue(WeaTableColumnGroup.getTitle()); +// if (CollectionUtils.isNotEmpty(WeaTableColumnGroup.getChildren())) { // List subColumns = com.google.common.collect.Lists.newArrayList(); -// for (SubTableRankColumn sub : subTableRankColumn.getChildren()) { +// for (WeaTableColumnGroup sub : WeaTableColumnGroup.getChildren()) { // ExportColumn subColumn = new ExportColumn(); // subColumn.setKeyIndex(sub.getDataIndex()); // subColumn.setValue(sub.getTitle()); diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java index ca8b53fc7..f42f74fb2 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java @@ -7,7 +7,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; -import java.time.LocalDateTime; +import java.util.Collection; +import java.util.Date; /** * @Description: @@ -144,10 +145,10 @@ public class SalaryStatisticsItemPO implements Serializable { private Integer unitType; //创建时间") - private LocalDateTime createTime; + private Date createTime; //更新时间") - private LocalDateTime updateTime; + private Date updateTime; //创建人") private Long creator; @@ -157,4 +158,6 @@ public class SalaryStatisticsItemPO implements Serializable { //租户key") private String tenantKey; + + private Collection ids; } diff --git a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java index ae5f098a1..5e73b95e6 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java @@ -29,8 +29,6 @@ public interface SalaryStatisticsReportService { /** * 获取薪酬报表列表 * - * @param currentEmployeeId - * @param currentTenantKey * @return */ List list(); @@ -39,7 +37,6 @@ public interface SalaryStatisticsReportService { * 获取单个薪酬统计报表 * * @param id - * @param currentTenantKey * @return */ SalaryStatisticsReportPO getById(Long id); @@ -48,8 +45,6 @@ public interface SalaryStatisticsReportService { * 保存薪酬统计报表 * * @param saveParam - * @param currentEmployeeId - * @param currentTenantKey * @return */ String save(SalaryStatisticsReportSaveParam saveParam ); @@ -58,8 +53,6 @@ public interface SalaryStatisticsReportService { * 删除薪酬统计报表 * * @param ids - * @param currentEmployeeId - * @param currentTenantKey * @return */ Map delete(Collection ids ); @@ -80,9 +73,7 @@ public interface SalaryStatisticsReportService { * @param param * @param salaryStatisticsReport * @param salaryStatisticsItemList - * @param employeeId - * @param tenantKey * @return */ - PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO salaryStatisticsReport, List salaryStatisticsItemList, Long employeeId, String tenantKey); + PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO salaryStatisticsReport, List salaryStatisticsItemList); } diff --git a/src/com/engine/salary/report/service/SubTableExportService.java b/src/com/engine/salary/report/service/SubTableExportService.java new file mode 100644 index 000000000..8d084998e --- /dev/null +++ b/src/com/engine/salary/report/service/SubTableExportService.java @@ -0,0 +1,7 @@ +package com.engine.salary.report.service; + +public interface SubTableExportService { + +// Map exportCommon(ExportCommonParam param, User currentUser, String tenantKey); + +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java index 7c6daeb56..7aeb178b6 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java @@ -1,32 +1,24 @@ package com.engine.salary.report.service.impl; import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.engine.core.impl.Service; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.enums.sicategory.DeleteTypeEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.report.SalaryStatisticsItemMapper; +import com.engine.salary.report.entity.param.SalaryStatisticsItemSaveParam; import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; +import com.engine.salary.report.enums.UnitTypeEnum; import com.engine.salary.report.service.SalaryStatisticsItemService; +import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryI18nUtil; -import com.google.common.base.Joiner; -import com.weaver.common.distribution.genid.IdGenerator; -import com.weaver.common.elog.dto.LoggerContext; -import com.weaver.salary.report.dao.SalaryStatisticsItemMapper; -import com.weaver.salary.report.entity.param.SalaryStatisticsItemSaveParam; -import com.weaver.salary.report.entity.po.SubTablePO; -import com.weaver.salary.report.enums.DeleteTypeEnum; -import com.weaver.salary.report.enums.OperateTypeEnum; -import com.weaver.salary.report.enums.UnitTypeEnum; -import com.weaver.salary.report.exception.SalaryRunTimeException; -import com.weaver.salary.report.util.SalaryAssert; +import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; -import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; -import static com.engine.salary.entity.siaccount.param.DSTenantKeyThreadVar.tenantKey; - /** * @Description: 薪酬报表自定义统计项目 * @Author: wangxiangzhong @@ -34,35 +26,32 @@ import static com.engine.salary.entity.siaccount.param.DSTenantKeyThreadVar.tena */ public class SalaryStatisticsItemServiceImpl extends Service implements SalaryStatisticsItemService { - + private SalaryStatisticsItemMapper salaryStatisticsItemMapper; @Override public SalaryStatisticsItemPO getById(Long id) { - return new LambdaQueryChainWrapper<>(salaryStatisticsItemMapper) - .eq(SalaryStatisticsItemPO::getDeleteType, 0) - .eq(SalaryStatisticsItemPO::getTenantKey, currentTenantKey) - .eq(SalaryStatisticsItemPO::getId, id) - .eq(SalaryStatisticsItemPO::getCreator, currentEmployeeId) - .one(); + if (id == null) { + return null; + } + return salaryStatisticsItemMapper.getById(id); } @Override public List listByStatisticsReportId(Long statisticsReportId) { - return new LambdaQueryChainWrapper<>(salaryStatisticsItemMapper) - .eq(SalaryStatisticsItemPO::getDeleteType, 0) - .eq(SalaryStatisticsItemPO::getTenantKey, currentTenantKey) - .eq(SalaryStatisticsItemPO::getStatReportId, statisticsReportId) - .orderByAsc(SalaryStatisticsItemPO::getIndexValue) - .list(); + if (statisticsReportId == null) { + return null; + } + return salaryStatisticsItemMapper.listSome(SalaryStatisticsItemPO.builder().statReportId(statisticsReportId).build()); } - public List listByIds(Collection ids, String currentTenantKey) { - return new LambdaQueryChainWrapper<>(salaryStatisticsItemMapper) - .eq(SalaryStatisticsItemPO::getDeleteType, 0) - .eq(SalaryStatisticsItemPO::getTenantKey, currentTenantKey) - .in(SalaryStatisticsItemPO::getId, ids) - .list(); + public List listByIds(Collection ids) { + + if (CollectionUtils.isEmpty(ids)) { + return new ArrayList<>(); + } + + return salaryStatisticsItemMapper.listSome(SalaryStatisticsItemPO.builder().ids(ids).build()); } @Override @@ -70,21 +59,16 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt SalaryAssert.notEmpty(ids, SalaryI18nUtil.getI18nLabel(152638, "id不可为空")); List list = this.listByIds(ids); if (CollectionUtils.isNotEmpty(list)) { - new LambdaUpdateChainWrapper<>(salaryStatisticsItemMapper) - .eq(SalaryStatisticsItemPO::getDeleteType, 0) - .eq(SalaryStatisticsItemPO::getTenantKey) - .in(SalaryStatisticsItemPO::getId, ids) - .set(SalaryStatisticsItemPO::getDeleteType, 1) - .update(); - list.forEach(po -> { - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setTargetId(String.valueOf(po.getId())); - loggerContext.setTargetName(po.getItemName()); - loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目")); - salaryStatReportLoggerTemplate.write(loggerContext); - }); + salaryStatisticsItemMapper.deleteByIds(ids); +// list.forEach(po -> { +// LoggerContext loggerContext = new LoggerContext<>(); +// loggerContext.setTargetId(String.valueOf(po.getId())); +// loggerContext.setTargetName(po.getItemName()); +// loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目")); +// salaryStatReportLoggerTemplate.write(loggerContext); +// }); } return StringUtils.EMPTY; } @@ -103,7 +87,7 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(152641, "统计项名称必填")); } - List itemPOList = listByStatisticsReportId(saveParam.getStatReportId(), employeeId); + List itemPOList = listByStatisticsReportId(saveParam.getStatReportId()); boolean isRepeat = itemPOList.stream().anyMatch(po -> saveParam.getItemName().equals(po.getItemName())); if (isRepeat) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(152642, "统计项目名称已经存在")); @@ -112,12 +96,14 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt List indexValues = itemPOList.stream().map(SalaryStatisticsItemPO::getIndexValue).collect(Collectors.toList()); Integer max = CollectionUtils.isEmpty(indexValues) ? 1 : Collections.max(indexValues); + Date now = new Date(); + SalaryStatisticsItemPO subTableItemPO = SalaryStatisticsItemPO.builder() .id(IdGenerator.generate()) - .createTime(LocalDateTime.now()) + .createTime(now) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .itemName(saveParam.getItemName()) - .itemValue(Joiner.on(",").join(saveParam.getItemValue())) + .itemValue(StringUtils.join(saveParam.getItemValue(), ",")) .countRule(JSON.toJSONString(saveParam.getCountRule())) .sumRule(JSON.toJSONString(saveParam.getSumRule())) .avgRule(JSON.toJSONString(saveParam.getAvgRule())) @@ -127,30 +113,30 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt .indexValue(max + 1) .statReportId(saveParam.getStatReportId()) .unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getItem() : saveParam.getUnitType()) - .creator(employeeId) - .updateTime(LocalDateTime.now()) - .tenantKey(tenantKey) + .creator((long)user.getUID()) + .updateTime(now) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); - salaryStatisticsItemMapper.insert(subTableItemPO); + salaryStatisticsItemMapper.insertIgnoreNull(subTableItemPO); // 记录操作日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setTargetId(String.valueOf(subTableItemPO.getId())); - loggerContext.setTargetName(subTableItemPO.getItemName()); - loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目")); - salaryStatReportLoggerTemplate.write(loggerContext); - // 更新 +// LoggerContext loggerContext = new LoggerContext<>(); +// loggerContext.setTargetId(String.valueOf(subTableItemPO.getId())); +// loggerContext.setTargetName(subTableItemPO.getItemName()); +// loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目")); +// salaryStatReportLoggerTemplate.write(loggerContext); + // 更新 } else { - SalaryStatisticsItemPO itemPO = this.getById(saveParam.getId(), employeeId); + SalaryStatisticsItemPO itemPO = this.getById(saveParam.getId()); SalaryAssert.notNull(itemPO, SalaryI18nUtil.getI18nLabel(152591, "统计项目不存在")); Optional.ofNullable(saveParam.getItemName()).ifPresent(itemPO::setItemName); if (Objects.nonNull(saveParam.getUnitType())) { itemPO.setUnitType(saveParam.getUnitType()); } else { - itemPO.setItemValue(Joiner.on(",").join(saveParam.getItemValue())); + itemPO.setItemValue(StringUtils.join(saveParam.getItemValue(),",")); itemPO.setCountRule(Objects.nonNull(saveParam.getCountRule()) ? JSON.toJSONString(saveParam.getCountRule()) : ""); itemPO.setSumRule(Objects.nonNull(saveParam.getSumRule()) ? JSON.toJSONString(saveParam.getSumRule()) : ""); itemPO.setAvgRule(Objects.nonNull(saveParam.getAvgRule()) ? JSON.toJSONString(saveParam.getAvgRule()) : ""); @@ -159,16 +145,16 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt itemPO.setMedianRule(Objects.nonNull(saveParam.getMedianRule()) ? JSON.toJSONString(saveParam.getMedianRule()) : ""); } - salaryStatisticsItemMapper.updateById(itemPO); + salaryStatisticsItemMapper.updateIgnoreNull(itemPO); // 记录操作日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setTargetId(String.valueOf(itemPO.getId())); - loggerContext.setTargetName(itemPO.getItemName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目")); - salaryStatReportLoggerTemplate.write(loggerContext); +// LoggerContext loggerContext = new LoggerContext<>(); +// loggerContext.setTargetId(String.valueOf(itemPO.getId())); +// loggerContext.setTargetName(itemPO.getItemName()); +// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); +// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目")); +// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目")); +// salaryStatReportLoggerTemplate.write(loggerContext); } return StringUtils.EMPTY; } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 43fc9b355..8b0a54444 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -1,63 +1,41 @@ package com.engine.salary.report.service.impl; -import com.alibaba.fastjson.JSON; import com.engine.core.impl.Service; +import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.report.SalaryStatisticsReportMapper; +import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; +import com.engine.salary.report.entity.dto.SalaryStatisticsReportDataDTO; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; 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.enums.SalaryStatisticsDimensionTypeEnum; +import com.engine.salary.report.service.SalaryStatisticsItemService; import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.service.SalaryAcctEmployeeService; import com.engine.salary.service.SalaryAcctResultService; import com.engine.salary.service.TaxAgentService; -import com.engine.salary.util.SalaryAssert; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; -import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import com.weaver.common.component.table.page.Page; -import com.weaver.common.elog.util.LoggerTemplate; -import com.weaver.common.hrm.cache.HrmDepartmentComInfo; -import com.weaver.common.hrm.domain.employee.HrmStatus; -import com.weaver.common.hrm.dto.jobcall.HrmJobCallParam; -import com.weaver.common.hrm.entity.BrowserDataDto; -import com.weaver.common.hrm.remote.jobcall.HrmJobCallRemoteService; -import com.weaver.common.hrm.service.HrmCommonEmployeeService; -import com.weaver.common.hrm.service.employee.HrmCommonHrmStatusService; -import com.weaver.framework.rpc.annotation.RpcReference; -import com.weaver.framework.util.JsonUtil; -import com.weaver.salary.report.common.constant.SalaryStatisticsDimensionConstant; -import com.weaver.salary.report.entity.dto.SalaryStatisticsReportDataDTO; -import com.weaver.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; -import com.weaver.salary.report.entity.po.*; -import com.weaver.salary.report.enums.EmployeeTypeEnum; -import com.weaver.salary.report.enums.IncomeCategoryEnum; -import com.weaver.salary.report.enums.SalaryStatisticsDimensionTypeEnum; -import com.weaver.salary.report.service.*; -import com.weaver.salary.report.util.*; -import com.weaver.teams.api.user.Sex; -import com.weaver.teams.domain.hr.SimpleUserInfo; -import com.weaver.teams.domain.user.SimpleEmployee; -import com.weaver.teams.hrapp.rest.RemoteUserInfoService; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import javax.annotation.Resource; -import java.time.LocalDateTime; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -74,28 +52,28 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary public static final String LAST_INFO = "lastInfoList"; public static final String SAME_INFO = "sameInfoList"; - + private SalaryStatisticsReportMapper salaryStatisticsReportMapper; - + private SalaryStatisticsItemService salaryStatisticsItemService; - + private SalaryAcctEmployeeService salaryAcctEmployeeService; - + private SalaryAcctResultService salaryAcctResultValueService; - + private TaxAgentService taxAgentService; - - private ExtEmployeeService extEmployeeService; - @Autowired - private HrmCommonEmployeeService hrmCommonEmployeeService; - @RpcReference - private HrmJobCallRemoteService hrmJobCallRemoteService; - @RpcReference - private RemoteUserInfoService remoteUserInfoService; - @Autowired - private HrmCommonHrmStatusService hrmCommonHrmStatusService; - (name = "salaryStatReportLoggerTemplate") - private LoggerTemplate salaryStatReportLoggerTemplate; + +// private ExtEmployeeService extEmployeeService; +// @Autowired +// private HrmCommonEmployeeService hrmCommonEmployeeService; +// @RpcReference +// private HrmJobCallRemoteService hrmJobCallRemoteService; +// @RpcReference +// private RemoteUserInfoService remoteUserInfoService; +// @Autowired +// private HrmCommonHrmStatusService hrmCommonHrmStatusService; +// (name = "salaryStatReportLoggerTemplate") +// private LoggerTemplate salaryStatReportLoggerTemplate; @Override public List listAll() { @@ -104,7 +82,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary @Override public List list() { - return salaryStatisticsReportMapper.listSome(SalaryStatisticsReportPO.builder().creator((long)user.getUID()).build()); + return salaryStatisticsReportMapper.listSome(SalaryStatisticsReportPO.builder().creator((long) user.getUID()).build()); } @Override @@ -126,21 +104,21 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary public String save(SalaryStatisticsReportSaveParam saveParam) { SalaryStatisticsReportSaveParam.checkParam(saveParam); - LocalDateTime now = LocalDateTime.now(); + Date now = new Date(); if (saveParam.getId() != null) { SalaryStatisticsReportPO po = this.getById(saveParam.getId()); if (po == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 161845, "薪酬统计报表不存在")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } - List list = listByName(saveParam.getReportName()); + List list = listByName(saveParam.getReportName()); boolean nameExist = list.stream().anyMatch(e -> !Objects.equals(e.getId(), saveParam.getId())); if (nameExist) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 98080, "名称不允许重复")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98080, "名称不允许重复")); } SalaryStatisticsReportPO poNew = new SalaryStatisticsReportPO(); BeanUtils.copyProperties(po, poNew); poNew.setReportName(saveParam.getReportName()); - poNew.setDimension(Joiner.on(",").join(saveParam.getDimensionIds())); + poNew.setDimension(StringUtils.join(saveParam.getDimensionIds(), ",")); this.salaryStatisticsReportMapper.updateIgnoreNull(poNew); // 记录日志 @@ -152,17 +130,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 152565, "更新报表")); // salaryStatReportLoggerTemplate.write(loggerContext); } else { - List list = listByName(saveParam.getReportName()); + List list = listByName(saveParam.getReportName()); if (CollectionUtils.isNotEmpty(list)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 98080, "名称不允许重复")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98080, "名称不允许重复")); } Long id = IdGenerator.generate(); SalaryStatisticsReportPO poNew = SalaryStatisticsReportPO.builder() .id(id) .reportName(saveParam.getReportName()) - .dimension(Joiner.on(",").join(saveParam.getDimensionIds())) + .dimension(StringUtils.join(saveParam.getDimensionIds(), ",")) .createTime(now) - .creator(user.getUID()) + .creator((long) user.getUID()) .updateTime(now) .deleteType(0) .tenantKey("") @@ -183,46 +161,46 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary @Override public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param) { - SalaryAssert.notNull(param.getId(), SalaryI18nUtil.getI18nLabel(152562, "报表id不能为空")); - if (Objects.isNull(param.getSalaryStartMonth()) || Objects.isNull(param.getSalaryEndMonth())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100294, "薪资所属月必传")); - } - if ((CollectionUtils.isNotEmpty(param.getTaxAgent()) && param.getTaxAgent().size() > 10) - || (CollectionUtils.isNotEmpty(param.getIncomeCategory()) && param.getIncomeCategory().size() > 10) - || (CollectionUtils.isNotEmpty(param.getSubCompany()) && param.getSubCompany().size() > 10) - || (CollectionUtils.isNotEmpty(param.getGrade()) && param.getGrade().size() > 10) - || (CollectionUtils.isNotEmpty(param.getPosition()) && param.getPosition().size() > 10) - || (CollectionUtils.isNotEmpty(param.getStatus()) && param.getStatus().size() > 10) - || (CollectionUtils.isNotEmpty(param.getEmployee()) && param.getEmployee().size() > 10) - ) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182014, "统计数据范围条件数量过多")); - } - - SalaryStatisticsReportPO po = getById(param.getId()); - SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); - po.setSalaryStartMonth(param.getSalaryStartMonth().atDay(1)); - po.setSalaryEndMonth(param.getSalaryEndMonth().atDay(1)); - - po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); - po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); - po.setSubCompanySetting(JSON.toJSONString(param.getSubCompany())); - po.setDepartSetting(JSON.toJSONString(param.getDepartment())); - po.setGradeSetting(JSON.toJSONString(param.getGrade())); - po.setPositionSetting(JSON.toJSONString(param.getPosition())); - po.setStatusSetting(JSON.toJSONString(param.getStatus())); - po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); - po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); - po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); - salaryStatisticsReportMapper.updateIgnoreNull(po); - - // 获取自定义统计项目 - List salaryStatisticsItemList = salaryStatisticsItemService.listByStatisticsReportId(po.getId()); - - salaryStatisticsItemList.forEach(e -> param.getItems().stream().filter(i -> i.getId().equals(e.getId())).findFirst().ifPresent(salaryStatisticsItem -> { - e.setUnitType(salaryStatisticsItem.getUnitType()); - e.setIndexValue(salaryStatisticsItem.getIndexValue()); - })); - this.salaryStatisticsItemService.saveOrUpdateBatch(salaryStatisticsItemList); +// SalaryAssert.notNull(param.getId(), SalaryI18nUtil.getI18nLabel(152562, "报表id不能为空")); +// if (Objects.isNull(param.getSalaryStartMonth()) || Objects.isNull(param.getSalaryEndMonth())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100294, "薪资所属月必传")); +// } +// if ((CollectionUtils.isNotEmpty(param.getTaxAgent()) && param.getTaxAgent().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getIncomeCategory()) && param.getIncomeCategory().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getSubCompany()) && param.getSubCompany().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getGrade()) && param.getGrade().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getPosition()) && param.getPosition().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getStatus()) && param.getStatus().size() > 10) +// || (CollectionUtils.isNotEmpty(param.getEmployee()) && param.getEmployee().size() > 10) +// ) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182014, "统计数据范围条件数量过多")); +// } +// +// SalaryStatisticsReportPO po = getById(param.getId()); +// SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); +// po.setSalaryStartMonth(param.getSalaryStartMonth().atDay(1)); +// po.setSalaryEndMonth(param.getSalaryEndMonth().atDay(1)); +// +// po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); +// po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); +// po.setSubCompanySetting(JSON.toJSONString(param.getSubCompany())); +// po.setDepartSetting(JSON.toJSONString(param.getDepartment())); +// po.setGradeSetting(JSON.toJSONString(param.getGrade())); +// po.setPositionSetting(JSON.toJSONString(param.getPosition())); +// po.setStatusSetting(JSON.toJSONString(param.getStatus())); +// po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); +// po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); +// po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); +// salaryStatisticsReportMapper.updateIgnoreNull(po); +// +// // 获取自定义统计项目 +// List salaryStatisticsItemList = salaryStatisticsItemService.listByStatisticsReportId(po.getId()); +// +// salaryStatisticsItemList.forEach(e -> param.getItems().stream().filter(i -> i.getId().equals(e.getId())).findFirst().ifPresent(salaryStatisticsItem -> { +// e.setUnitType(salaryStatisticsItem.getUnitType()); +// e.setIndexValue(salaryStatisticsItem.getIndexValue()); +// })); +// this.salaryStatisticsItemService.saveOrUpdateBatch(salaryStatisticsItemList); // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); @@ -238,13 +216,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary @Override public Map delete(Collection ids) { if (CollectionUtils.isEmpty(ids)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 84026, "参数错误")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } int total = ids.size(); List list = salaryStatisticsReportMapper.listSome(SalaryStatisticsReportPO.builder().ids(ids).build()); int success = list.size(); - if (success>0) { + if (success > 0) { List deleteIds = list.stream().map(SalaryStatisticsReportPO::getId).collect(Collectors.toList()); salaryStatisticsReportMapper.deleteByIds(deleteIds); @@ -262,12 +240,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } Map resultMap = new HashMap<>(2); - String resultMsg = SalaryI18nUtil.getI18nLabel( 94620, "操作成功"); + String resultMsg = SalaryI18nUtil.getI18nLabel(94620, "操作成功"); String resultType = "success"; // 单个设为定薪提示 if (total > 1) { - resultMsg = SalaryI18nUtil.getI18nLabel( 134807, "成功条数") + ": "+ (success) + "; " - + SalaryI18nUtil.getI18nLabel( 134808, "失败条数") + ": "+ (total - success); + resultMsg = SalaryI18nUtil.getI18nLabel(134807, "成功条数") + ": " + (success) + "; " + + SalaryI18nUtil.getI18nLabel(134808, "失败条数") + ": " + (total - success); if ((total - success) > 0) { resultType = "info"; } @@ -280,7 +258,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } @Override - public PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po, List salaryStatisticsItemList, Long employeeId, String tenantKey) { + public PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po, List salaryStatisticsItemList) { Map checkMap = SalaryStatisticsReportBO.checkLoad(salaryStatisticsItemList); // 如果一个都没有,直接返回 if (!checkMap.get("isNow")) { @@ -290,21 +268,21 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary SalaryStatisticsReportBO.poToQueryParam(param, po); // 获取本期报表分权后的核算人员 - List list = salaryAcctEmployeeService.listBySalaryStatisticsReportParam(param, employeeId, tenantKey); + List list = salaryAcctEmployeeService.listBySalaryStatisticsReportParam(param); SalaryStatisticsReportDataQueryParam lastParam = SalaryStatisticsReportBO.lastParamConvert(param, dimension); // 获取上期报表分权后的核算人员 - List lastList = checkMap.get("isLast") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(lastParam, employeeId, tenantKey) : Lists.newArrayList(); + List lastList = checkMap.get("isLast") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(lastParam) : Lists.newArrayList(); SalaryStatisticsReportDataQueryParam sameParam = SalaryStatisticsReportBO.sameParamConvert(param); // 获取去年同期报表分权后的核算人员 - List sameList = checkMap.get("isSame") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(sameParam, employeeId, tenantKey) : Lists.newArrayList(); + List sameList = checkMap.get("isSame") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(sameParam) : Lists.newArrayList(); SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder() .list(list) .lastList(lastList) .sameList(sameList) .salaryStatisticsItemList(salaryStatisticsItemList) - .employeeId(employeeId) - .tenantKey(tenantKey) + .employeeId((long) user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); List allList = Lists.newArrayList(); @@ -312,14 +290,20 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary allList.addAll(lastList); allList.addAll(sameList); Set salaryAcctEmployeeIds = allList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toSet()); - List salaryAcctResultValues = salaryAcctResultValueService.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds, tenantKey); - Map> salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultValuePO::getSalaryAcctEmployeeId, SalaryAcctResultValuePO::getResultValue); + List salaryAcctResultValues = salaryAcctResultValueService.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); +// Map> salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(); + Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); + Map> map = new HashMap<>(); + salaryAcctEmpResultMap.forEach((k, v) -> { + Map collect = v.stream().collect(Collectors.toMap(p->p.getSalaryItemId().toString(), SalaryAcctResultPO::getResultValue, (key1, key2) -> key2)); + map.put(k,collect); + }); // 根据统计维度进行计算 - return calculateReportRecordsByDimension(dimension, param, salaryStatisticsReportData, salaryAcctResultValueMap); + return calculateReportRecordsByDimension(dimension, param, salaryStatisticsReportData, map); } - private Page> calculateReportRecordsByDimension(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> calculateReportRecordsByDimension(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // 定性 if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(dimension.getDimType())) { switch (dimension.getDimCode()) { @@ -376,17 +360,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary default: return new Page<>(); } - // 定量-组距式分组 + // 定量-组距式分组 } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); - // 定量-单项式分组 + // 定量-单项式分组 } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); } return new Page<>(); } - private Page> buildSalaryMonthRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildSalaryMonthRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); @@ -403,7 +387,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildTaxAgentRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildTaxAgentRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); @@ -425,7 +409,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); @@ -448,7 +432,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildSubComRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildSubComRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); @@ -500,7 +484,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildDepartRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildDepartRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); @@ -558,7 +542,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildPositionRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildPositionRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); @@ -616,7 +600,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildGradeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildGradeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); @@ -674,7 +658,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); @@ -731,7 +715,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); @@ -750,7 +734,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildEmployeeRecords(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildEmployeeRecords(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); Page> result = new Page<>(param.getCurrent(), param.getPageSize(), employeeIds.size(), true); List> records = new ArrayList<>(); @@ -776,12 +760,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildQuarterRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildQuarterRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); Set quarterSet = Sets.newHashSet(); - data.getList().forEach(sa ->quarterSet.add(ReportTimeUtil.getQuarter(sa.getSalaryMonth()))); + data.getList().forEach(sa -> quarterSet.add(ReportTimeUtil.getQuarter(sa.getSalaryMonth()))); List quarters = Lists.newArrayList(quarterSet).stream().sorted().collect(Collectors.toList()); Collections.reverse(quarters); @@ -799,12 +783,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Page> buildHalfYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + private PageInfo> buildHalfYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); Set halfYearSet = Sets.newHashSet(); - data.getList().forEach(sa ->halfYearSet.add(ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))); + data.getList().forEach(sa -> halfYearSet.add(ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))); List halfYears = Lists.newArrayList(halfYearSet).stream().sorted().collect(Collectors.toList()); Collections.reverse(halfYears); @@ -1391,6 +1375,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary result.setRecords(records); return result; } + private Page> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { Page> result = new Page<>(); List> records = new ArrayList<>(); diff --git a/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java b/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java new file mode 100644 index 000000000..1399f8eaa --- /dev/null +++ b/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java @@ -0,0 +1,186 @@ +package com.engine.salary.report.service.impl; + +import com.engine.salary.report.service.SubTableExportService; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2022/11/9 + * @Version: v1.0 + */ +public class SubTableExportServiceImpl implements SubTableExportService { + +// private Logger logger = LoggerFactory.getLogger(this.getClass()); +// +// @Autowired +// private SalaryBatchService salaryBatchService; +// +// @Override +// public Map exportCommon(ExportCommonParam param, User currentUser, String tenantKey) { +// Map map = new HashMap<>(3); +// map.put("biz", String.valueOf(IdGenerator.generate())); +// map.put("module", EntityType.hrsa.name()); +// map.put("function", "welfareCommonExcel"); +// String eteamsId = TenantRpcContext.getEteamsId(); +// LocalRunnable localRunnable = new LocalRunnable() { +// @Override +// public void execute() { +// try { +// DSTenantKeyThreadVar.tenantKey.set(tenantKey); +// exportTask(param, map, eteamsId, currentUser.getUsername(), currentUser.getEmployeeId(), tenantKey); +// } finally { +// DSTenantKeyThreadVar.tenantKey.remove(); +// } +// } +// }; +// ThreadPoolUtil.execute(localRunnable); +// return map; +// } +// +// public Map exportTask(ExportCommonParam param, Map exportMap, String eteamsId, String operateName, Long employeeId, String tenantKey) { +// List sheetList = new LinkedList<>(); +// // 工作簿 +// ExcelSheetData excelSheetData = new ExcelSheetData(); +// // 工作簿名称 +// excelSheetData.setSheetName(param.getSheetName()); +// // 报表头 +// excelSheetData.setHeaders(buildHeader(param.getColumns(), new ArrayList<>(), param.getDimensionName())); +// // 报表数据 +// excelSheetData.setRows(buildCommonData(param)); +// // 报表表头合并 +// excelSheetData.setMergedRegions(buildMergedRegions(param.getColumns())); +// // 塞进工作簿list +// sheetList.add(excelSheetData); +// // 发送 +// Map map = salaryBatchService.simpleExportExcel(ExportExcelInfo.builder() +// .bizId(exportMap.get("biz")) +// .sharePassword(param.getSharePassword()) +// .flag(true) +// .module(exportMap.get("module")) +// .userId(employeeId) +// .eteamsId(eteamsId) +// .tenantKey(tenantKey) +// .operator(operateName) +// .fileName(param.getSheetName() + ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())) +// .handlerName("welfareCommonExcelExportHandler") +// .dataType(param.getSheetName()) +// .function("welfareCommonExcel").build(), sheetList); +// return map; +// +// } +// +// @BatchExportHandler("welfareCommonExcelExportHandler") +// public void welfareCommonExcelExportHandler() { +// BatchCallbackMessage message = BatchExportContext.getBatchCallbackMessage(); +// logger.info(SalaryI18nUtil.getI18nLabel(100292, "接受到导出的结果") + JSONObject.toJSONString(message)); +// } +// +// public int getHigh(ExportColumn column) { +// int tempHign = 1; +// if (column.getChildren() != null) { +// tempHign++; +// List children = column.getChildren(); +// for (ExportColumn exportColumn : children) { +// getHigh(exportColumn); +// } +// } +// return tempHign; +// } +// +// public List buildMergedRegions(List columns) { +// List merges = new ArrayList<>(); +// if (CollectionUtils.isEmpty(columns)) { +// return merges; +// } +// int start = 0; +// int high = 0; +// for (int i = 0; i < columns.size(); i++) { +// int columnHigh = getHigh(columns.get(i)); +// high = Math.max(high, columnHigh); +// } +// if (high == 1) { +// return null; +// } +// +// for (int i = 0; i < columns.size(); i++) { +// if (columns.get(i).getChildren() == null) { +// merges.add(new Integer[]{start, 1, 0, 0}); +// start++; +// } else if (columns.get(i).getChildren().size() == 1) { +// start++; +// } else { +// int end = start + columns.get(i).getChildren().size() - 1; +// merges.add(new Integer[]{0, 0, start, end}); +// end++; +// start = end; +// } +// } +// return merges; +// } +// +// public List> buildCommonData(ExportCommonParam param) { +// List keyIndexOrder = new ArrayList<>(); +// buildCommonKeyIndex(param.getColumns(), keyIndexOrder); +// List> result = new ArrayList<>(); +// param.getData().forEach(dataMap -> { +// List temp = new ArrayList<>(); +// keyIndexOrder.forEach(key -> { +// temp.add(dataMap.get(key)); +// }); +// result.add(temp); +// }); +// return result; +// } +// +// public void buildCommonKeyIndex(List list, List keyIndexOrder) { +// List children = new ArrayList<>(); +// if (CollectionUtils.isEmpty(list)) { +// return; +// } +// list.forEach(column -> { +// if (column.getChildren() == null) { +// keyIndexOrder.add(column.getKeyIndex()); +// } else { +// children.addAll(column.getChildren()); +// } +// }); +// buildCommonKeyIndex(children, keyIndexOrder); +// } +// +// public List buildHeader(List list, List result, String dimensionName) { +// List headers = buildCommonHeader(list, result); +// int size = headers.size(); +// List header = new ArrayList<>(Arrays.asList(headers.get(size - 1))); +// header.add(0, dimensionName); +// result.set(size - 1, header.toArray(new String[0])); +// return result; +// } +// +// /** +// * 多层级表头 +// * +// * @param list +// * @param result +// * @return +// */ +// public List buildCommonHeader(List list, List result) { +// List childList = new ArrayList<>(); +// if (CollectionUtils.isEmpty(list)) { +// return result; +// } +// List temp = new ArrayList<>(); +// list.forEach(column -> { +// if (column.getChildren() != null) { +// childList.addAll(column.getChildren()); +// column.getChildren().forEach(x -> temp.add(column.getValue())); +// } else { +// temp.add(column.getValue()); +// } +// }); +// result.add(temp.toArray(new String[0])); +// if (CollectionUtils.isNotEmpty(childList)) { +// buildCommonHeader(childList, result); +// } +// return result; +// } +} diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index 3020a525b..0d66ec25a 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -1,18 +1,21 @@ package com.engine.salary.report.web; +import com.engine.common.util.ServiceUtil; +import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsReportQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; +import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.report.wrapper.SalaryStatisticsReportWrapper; -import com.weaver.common.authority.annotation.WeaPermission; -import com.weaver.common.base.entity.result.WeaResult; -import com.weaver.common.component.form.WeaForm; -import com.weaver.common.component.search.WeaSearchCondition; -import com.weaver.salary.report.entity.param.*; -import com.weaver.teams.security.context.TenantContext; -import com.weaver.teams.security.context.UserContext; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestParam; +import com.engine.salary.util.ResponseResult; +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.Collection; import java.util.List; import java.util.Map; @@ -22,24 +25,24 @@ import java.util.Map; * @Author: wangxiangzhong * @Date: 2022/12/15 11:40 */ -@Api("薪酬统计报表") -@RestController -@RequestMapping("/api/bs/salaryreport/salary/statistics/report") public class SalaryStatisticsReportController { - @Autowired - private SalaryStatisticsReportWrapper salaryStatisticsReportWrapper; + private SalaryStatisticsReportWrapper getSalaryStatisticsReportWrapper(User user) { + return ServiceUtil.getService(SalaryStatisticsReportWrapper.class, user); + } + /** * 薪酬统计报表列表 * * @return */ - @PostMapping("/list") - @ApiOperation("薪酬统计报表列表") - @WeaPermission(publicPermission = true) - public WeaResult>> list(@RequestBody SalaryStatisticsReportQueryParam queryParam) { - return WeaResult.success(salaryStatisticsReportWrapper.list(queryParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + @POST + @Path("/list") + @Produces(MediaType.APPLICATION_JSON) + public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>>(user).run(getSalaryStatisticsReportWrapper(user)::list, queryParam); } /** @@ -47,24 +50,26 @@ public class SalaryStatisticsReportController { * * @return */ - @GetMapping("/getForm") - @ApiOperation("获取薪酬统计报表表单") - @WeaPermission(publicPermission = true) - public WeaResult getFrom(@RequestParam(value = "id", required = false) Long id) { - return WeaResult.success(salaryStatisticsReportWrapper.getFrom(id, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + @GET + @Path("/getForm") + @Produces(MediaType.APPLICATION_JSON) + public String getForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsReportWrapper(user)::getFrom, id); } /** * 保存薪酬统计报表 * - * @param saveParam + * @param param * @return */ - @PostMapping("/save") - @ApiOperation("保存薪酬统计报表") - @WeaPermission(publicPermission = true) - public WeaResult save(@RequestBody SalaryStatisticsReportSaveParam saveParam) { - return WeaResult.success(salaryStatisticsReportWrapper.save(saveParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + @POST + @Path("/save") + @Produces(MediaType.APPLICATION_JSON) + public String save(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsReportWrapper(user)::save, param); } /** @@ -73,38 +78,34 @@ public class SalaryStatisticsReportController { * @param ids * @return */ - @PostMapping("/delete") - @ApiOperation("删除薪酬统计报表") - @WeaPermission(publicPermission = true) - public WeaResult> delete(@RequestBody Collection ids) { - return WeaResult.success(salaryStatisticsReportWrapper.delete(ids, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + @POST + @Path("/delete") + @Produces(MediaType.APPLICATION_JSON) + public String delete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody Collection ids) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, Map>(user).run(getSalaryStatisticsReportWrapper(user)::delete, ids); } - /** - * 获取薪酬统计报表查询条件 - * - * @param id - * @return - */ - @GetMapping("/getSearchCondition") - @ApiOperation("获取薪酬统计报表查询条件") - @WeaPermission(publicPermission = true) - public WeaResult getSearchCondition(@RequestParam Long id) { - return WeaResult.success(salaryStatisticsReportWrapper.getSearchCondition(id, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); - } - /** - * 保存薪酬统计报表查询条件 - * - * @param param - * @return - */ - @PostMapping("/saveSearchCondition") - @ApiOperation("保存薪酬统计报表查询条件") - @WeaPermission(publicPermission = true) - public WeaResult saveSearchCondition(@RequestBody SalaryStatisticsSearchConditionSaveParam param) { - return WeaResult.success(salaryStatisticsReportWrapper.saveSearchCondition(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); - } +// @GetMapping("/getSearchCondition") +// @ApiOperation("获取薪酬统计报表查询条件") +// @WeaPermission(publicPermission = true) +// public WeaResult getSearchCondition(@RequestParam Long id) { +// return WeaResult.success(salaryStatisticsReportWrapper.getSearchCondition(id, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); +// } + +// /** +// * 保存薪酬统计报表查询条件 +// * +// * @param param +// * @return +// */ +// @PostMapping("/saveSearchCondition") +// @ApiOperation("保存薪酬统计报表查询条件") +// @WeaPermission(publicPermission = true) +// public WeaResult saveSearchCondition(@RequestBody SalaryStatisticsSearchConditionSaveParam param) { +// return WeaResult.success(salaryStatisticsReportWrapper.saveSearchCondition(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); +// } /** * 获取薪酬统计报表数据 @@ -112,23 +113,23 @@ public class SalaryStatisticsReportController { * @param param * @return */ - @PostMapping("/getData") - @ApiOperation("获取薪酬统计报表数据") - @WeaPermission(publicPermission = true) - public WeaResult> getData(@RequestBody SalaryStatisticsReportDataQueryParam param) { - return WeaResult.success(salaryStatisticsReportWrapper.getData(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + @POST + @Path("/getData") + @Produces(MediaType.APPLICATION_JSON) + public String delete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportDataQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsReportWrapper(user)::getData, param); } - /** - * 导出报表数据 - * - * @param param - * @return - */ - @PostMapping("/exportData") - @ApiOperation("导出报表数据") - @WeaPermission(publicPermission = true) - public WeaResult> exportData(@RequestBody SalaryStatisticsReportDataQueryParam param) { - return WeaResult.success(salaryStatisticsReportWrapper.exportData(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); - } +// /** +// * 导出报表数据 +// * +// * @param param +// * @return +// */ +// @PostMapping("/exportData") +// @ApiOperation("导出报表数据") +// @WeaPermission(publicPermission = true) +// public WeaResult> exportData(@RequestBody SalaryStatisticsReportDataQueryParam param) { +// return WeaResult.success(salaryStatisticsReportWrapper.exportData(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index c7a1bc5fa..f26271fdb 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -1,44 +1,28 @@ package com.engine.salary.report.wrapper; -import com.alibaba.fastjson.JSONArray; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.core.impl.Service; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; +import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsReportQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; +import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; +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.google.common.base.Joiner; +import com.engine.salary.report.service.SubTableExportService; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Maps; -import com.weaver.common.authority.format.FormatManager; -import com.weaver.common.component.browser.entity.WeaBrowserBean; -import com.weaver.common.component.form.WeaForm; -import com.weaver.common.component.form.item.WeaFormItem; -import com.weaver.common.component.form.item.WeaFormOption; -import com.weaver.common.component.search.WeaSearchCondition; -import com.weaver.common.component.search.item.WeaSearchConditionItem; -import com.weaver.common.component.search.item.WeaSearchConditionItemType; -import com.weaver.common.component.search.layout.WeaSearchConditionLayout; -import com.weaver.common.component.table.WeaTable; -import com.weaver.common.component.table.column.WeaTableColumn; -import com.weaver.common.component.table.page.Page; -import com.weaver.framework.util.JsonUtil; -import com.weaver.salary.report.common.constant.SalaryReportModule; -import com.weaver.salary.report.entity.bo.SalaryStatisticsReportBO; -import com.weaver.salary.report.entity.dto.SalaryStatisticsReportFormDTO; -import com.weaver.salary.report.entity.param.*; -import com.weaver.salary.report.entity.po.SalaryStatisticsDimensionPO; -import com.weaver.salary.report.entity.po.SalaryStatisticsItemPO; -import com.weaver.salary.report.entity.po.SalaryStatisticsReportPO; -import com.weaver.salary.report.enums.WeaBrowserTypeEnum; -import com.weaver.salary.report.exception.SalaryRunTimeException; -import com.weaver.salary.report.service.SalaryStatisticsDimensionService; -import com.weaver.salary.report.service.SalaryStatisticsItemService; -import com.weaver.salary.report.service.SubTableExportService; -import com.weaver.salary.report.util.*; -import com.weaver.teams.security.context.TenantContext; -import com.weaver.teams.security.context.UserContext; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; @@ -48,37 +32,34 @@ import java.util.stream.Collectors; * @Date: 2022/12/15 13:46 */ @Component -public class SalaryStatisticsReportWrapper { +public class SalaryStatisticsReportWrapper extends Service { private static final String conditionId = "salaryStatisticsReportSearchCondition"; - + private SalaryStatisticsReportService salaryStatisticsReportService; - + private SalaryStatisticsItemService salaryStatisticsItemService; - + private SalaryStatisticsDimensionService salaryStatisticsDimensionService; - @Autowired + private SubTableExportService subTableExportService; /** * 报表列表 * - * * @param queryParam - * @param currentEmployeeId - * @param currentTenantKey * @return */ - public List> list(SalaryStatisticsReportQueryParam queryParam, Long currentEmployeeId, String currentTenantKey) { + public List> list(SalaryStatisticsReportQueryParam queryParam) { // 初始化 - salaryStatisticsDimensionService.init(currentEmployeeId, currentTenantKey); + salaryStatisticsDimensionService.init((long)user.getUID()); - List reportList = salaryStatisticsReportService.list(currentEmployeeId, currentTenantKey); + List reportList = salaryStatisticsReportService.list(); if (StringUtils.isNotEmpty(queryParam.getReportName())) { reportList = reportList.stream().filter(rp -> rp.getReportName().contains(queryParam.getReportName())).collect(Collectors.toList()); } - List salaryStatisticsDimensionList = this.salaryStatisticsDimensionService.listAll(currentTenantKey); + List salaryStatisticsDimensionList = this.salaryStatisticsDimensionService.listAll(); Map salaryStatisticsDimensionMap = SalaryEntityUtil.convert2Map(salaryStatisticsDimensionList, k -> k.getId().toString(), SalaryStatisticsDimensionPO::getDimName); List> result = new ArrayList<>(); reportList.forEach(po -> { @@ -86,8 +67,8 @@ public class SalaryStatisticsReportWrapper { temp.put("id", po.getId().toString()); temp.put("reportName", po.getReportName()); - List dimNames = Arrays.stream(po.getDimension().split(",")).map(dim -> Optional.ofNullable(salaryStatisticsDimensionMap.get(dim)).orElse("")).collect(Collectors.toList()); - temp.put("dimension", Joiner.on(",").join(dimNames)); + 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()); result.add(temp); }); @@ -98,246 +79,86 @@ public class SalaryStatisticsReportWrapper { * 获取薪酬统计报表表单 * * @param id - * @param currentEmployeeId - * @param currentTenantKey + * @param * @return */ - public WeaForm getFrom(Long id, Long currentEmployeeId, String currentTenantKey) { + public SalaryStatisticsReportPO getFrom(Long id) { - List salaryStatisticsDimensions = salaryStatisticsDimensionService.listAll(currentTenantKey); - List statsDimOptions = salaryStatisticsDimensions.stream().map(sd -> new WeaFormOption(sd.getId().toString(), sd.getDimName())).collect(Collectors.toList()); - // 1.构建基础信息表单 - WeaForm weaForm = FormatManager.getInstance().genForm(SalaryStatisticsReportFormDTO.class, SalaryStatisticsReportFormDTO.builder().statsDimOptions(statsDimOptions).build()); + List salaryStatisticsDimensions = salaryStatisticsDimensionService.listAll(); - String placeholder = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85987, "请输入"); + String placeholder = SalaryI18nUtil.getI18nLabel(85987, "请输入"); - WeaFormItem nameItem = weaForm.getItems().get("reportName"); - Map otherParams = Maps.newHashMap(); - otherParams.put("showCount", true); - otherParams.put("placeholder", placeholder); - nameItem.setOtherParams(otherParams); - weaForm.getItems().put("reportName", nameItem); - - if (id != null) { - SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(id, currentTenantKey); - if (po == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 161845, "薪酬统计报表不存在")); - } - Map dataMap = JsonUtil.parseMap(po, Object.class); - dataMap.put("dimension", Arrays.asList(po.getDimension().split(","))); - weaForm.setData(dataMap); + SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(id); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } - return weaForm; + return po; } /** * 保存薪酬统计报表 * * @param saveParam - * @param currentEmployeeId - * @param currentTenantKey + * @param * @return */ - public String save(SalaryStatisticsReportSaveParam saveParam, Long currentEmployeeId, String currentTenantKey) { - return salaryStatisticsReportService.save(saveParam, currentEmployeeId, currentTenantKey); + public String save(SalaryStatisticsReportSaveParam saveParam) { + return salaryStatisticsReportService.save(saveParam); } /** * 删除薪酬统计报表 * * @param ids - * @param currentEmployeeId - * @param currentTenantKey + * @param * @return */ - public Map delete(Collection ids, Long currentEmployeeId, String currentTenantKey) { - return salaryStatisticsReportService.delete(ids, currentEmployeeId, currentTenantKey); + public Map delete(Collection ids) { + return salaryStatisticsReportService.delete(ids); } + - /** - * 获取统计条件 - * - * @param id - * @param employeeId - * @param tenantKey - * @return - */ - public WeaSearchCondition getSearchCondition(Long id, Long employeeId, String tenantKey) { - // 高级搜索实例 - WeaSearchCondition weaSearchCondition = new WeaSearchCondition(conditionId); - - if (id != null) { - SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(id, tenantKey); - SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 152563, "报表不存在")); - - Map data = new HashMap<>(); - data.put("salaryStartMonth", ReportTimeUtil.getFormatYearMonth(po.getSalaryStartMonth())); - data.put("salaryEndMonth", ReportTimeUtil.getFormatYearMonth(po.getSalaryEndMonth())); - data.put("taxAgent", JSONArray.parseArray(po.getTaxAgentSetting())); - data.put("incomeCategory", JSONArray.parseArray(po.getIncomeCategorySetting())); - data.put("subCompany", JSONArray.parseArray(po.getSubCompanySetting())); - data.put("department", JSONArray.parseArray(po.getDepartSetting())); - data.put("grade", JSONArray.parseArray(po.getGradeSetting())); - data.put("position", JSONArray.parseArray(po.getPositionSetting())); - data.put("status", JSONArray.parseArray(po.getStatusSetting())); - data.put("employee", JSONArray.parseArray(po.getEmployeeSetting())); - data.put("hiredate", JSONArray.parseArray(po.getHiredateSetting())); -// data.put("leavedate", JSONArray.parseArray(po.getLeavedateSetting())); - - weaSearchCondition.setData(data); - } - - // 搜索项目 - // 个税扣缴义务人 - WeaSearchConditionItem taxAgent = new WeaSearchConditionItem(); - taxAgent.setItemType(WeaSearchConditionItemType.BROWSER); - WeaBrowserBean paymentOrgBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, WeaBrowserTypeEnum.TAX_AGENT.getBrowserType(), Boolean.TRUE); - taxAgent.setBrowserBean(paymentOrgBrowserBean); - weaSearchCondition.getItems().put("taxAgent", taxAgent); - // 收入所得项目 - WeaSearchConditionItem incomeCategory = new WeaSearchConditionItem(); - incomeCategory.setItemType(WeaSearchConditionItemType.BROWSER); - WeaBrowserBean incomeCategoryBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, WeaBrowserTypeEnum.INCOME_CATEGORY.getBrowserType(), Boolean.TRUE); - incomeCategory.setBrowserBean(incomeCategoryBrowserBean); - weaSearchCondition.getItems().put("incomeCategory", incomeCategory); - // 分部 - WeaSearchConditionItem subCompany = new WeaSearchConditionItem(); - subCompany.setItemType(WeaSearchConditionItemType.BROWSER); - WeaBrowserBean subcompanyBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "subcompany", Boolean.TRUE); - subCompany.setBrowserBean(subcompanyBrowserBean); - weaSearchCondition.getItems().put("subCompany", subCompany); - // 部门 - WeaSearchConditionItem department = new WeaSearchConditionItem(); - department.setItemType(WeaSearchConditionItemType.BROWSER); - WeaBrowserBean departmentBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "department", Boolean.TRUE); - department.setBrowserBean(departmentBrowserBean); - weaSearchCondition.getItems().put("department", department); - // 职级 - WeaSearchConditionItem grade = new WeaSearchConditionItem(); - grade.setItemType(WeaSearchConditionItemType.BROWSER); - WeaBrowserBean gradeBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "grade", Boolean.TRUE); - grade.setBrowserBean(gradeBrowserBean); - weaSearchCondition.getItems().put("grade", grade); - // 岗位 - WeaSearchConditionItem position = new WeaSearchConditionItem(); - position.setItemType(WeaSearchConditionItemType.BROWSER); - WeaBrowserBean positionBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "position", Boolean.TRUE); - position.setBrowserBean(positionBrowserBean); - weaSearchCondition.getItems().put("position", position); - // 人事状态 - WeaSearchConditionItem status = new WeaSearchConditionItem(); - status.setItemType(WeaSearchConditionItemType.BROWSER); - WeaBrowserBean statusBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, WeaBrowserTypeEnum.USER_STATUS.getBrowserType(), Boolean.TRUE); - status.setBrowserBean(statusBrowserBean); - weaSearchCondition.getItems().put("status", status); - // 人员 - WeaSearchConditionItem employee = new WeaSearchConditionItem(); - employee.setItemType(WeaSearchConditionItemType.BROWSER); - WeaBrowserBean employeeBrowserBean = new WeaBrowserBean(SalaryReportModule.BROWSER_MODULE, "resource", Boolean.TRUE); - employee.setBrowserBean(employeeBrowserBean); - weaSearchCondition.getItems().put("employee", employee); - - Map otherParams = Maps.newHashMap(); - otherParams.put("isRange", true); - otherParams.put("type", "day"); - otherParams.put("startPlaceholder", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 90648, "开始日期")); - otherParams.put("endPlaceholder", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 90649, "结束日期")); -// 在otherParams中添加 showMultiBtnGroup showUnlimit 这两个字段 并且都为false - // 入职日期 - WeaSearchConditionItem hiredate = new WeaSearchConditionItem(); - hiredate.setItemType(WeaSearchConditionItemType.DATEPICKER); - hiredate.setOtherParams(otherParams); - weaSearchCondition.getItems().put("hiredate", hiredate); - // 离职日期 - WeaSearchConditionItem leavedate = new WeaSearchConditionItem(); - leavedate.setItemType(WeaSearchConditionItemType.INPUT); - leavedate.setReadOnly(true); -// leavedate.setItemType(WeaSearchConditionItemType.DATEPICKER); -// leavedate.setOtherParams(otherParams); - weaSearchCondition.getItems().put("leavedate", leavedate); - - //layout布局 - List firstLine = new ArrayList<>(); - firstLine.add(new WeaSearchConditionLayout("taxAgent", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86184, "个税扣缴义务人"), new String[]{"taxAgent"})); - firstLine.add(new WeaSearchConditionLayout("incomeCategory", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 121908, "收入所得项目"), new String[]{"incomeCategory"})); - List secondLine = new ArrayList<>(); - secondLine.add(new WeaSearchConditionLayout("subCompany", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 107369, "分部"), new String[]{"subCompany"})); - secondLine.add(new WeaSearchConditionLayout("department", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86185, "部门"), new String[]{"department"})); - List thirdLine = new ArrayList<>(); - thirdLine.add(new WeaSearchConditionLayout("grade", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 98623, "职级"), new String[]{"grade"})); - thirdLine.add(new WeaSearchConditionLayout("position", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 90633, "岗位"), new String[]{"position"})); - List forthLine = new ArrayList<>(); - forthLine.add(new WeaSearchConditionLayout("status", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 109332, "人事状态"), new String[]{"status"})); - forthLine.add(new WeaSearchConditionLayout("employee", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100133, "人员"), new String[]{"employee"})); - List fifthLine = new ArrayList<>(); - fifthLine.add(new WeaSearchConditionLayout("hiredate", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86319, "入职日期"), new String[]{"hiredate"})); -// fifthLine.add(new WeaSearchConditionLayout("leavedate", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 95228, "离职日期"), new String[]{"leavedate"})); - fifthLine.add(new WeaSearchConditionLayout("leavedate", " ", new String[]{"leavedate"})); - - weaSearchCondition.getLayout().add(firstLine); - weaSearchCondition.getLayout().add(secondLine); - weaSearchCondition.getLayout().add(thirdLine); - weaSearchCondition.getLayout().add(forthLine); - weaSearchCondition.getLayout().add(fifthLine); - return weaSearchCondition; - } - - public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param, Long currentEmployeeId, String currentTenantKey) { - return this.salaryStatisticsReportService.saveSearchCondition(param, currentEmployeeId, currentTenantKey); + public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param) { + return this.salaryStatisticsReportService.saveSearchCondition(param); } /** * 获取报表数据 * * @param param - * @param employeeId - * @param tenantKey * @return */ - public Map getData(SalaryStatisticsReportDataQueryParam param, Long employeeId, String tenantKey) { + public Map getData(SalaryStatisticsReportDataQueryParam param) { if (param.getId() == null || param.getDimensionId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } - SalaryStatisticsDimensionPO dimension = salaryStatisticsDimensionService.getById(param.getDimensionId(), tenantKey); + SalaryStatisticsDimensionPO dimension = salaryStatisticsDimensionService.getById(param.getDimensionId()); if (dimension == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 161300, "统计维度不存在")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } // weaTable对象 - WeaTable> weaTable = new WeaTable<>(); + Map weaTable= new HashMap<>(); // 查询报表配置 - SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(param.getId(), tenantKey); + SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(param.getId()); if (po == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 161845, "薪酬统计报表不存在")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } // 查询自定义统计项目 - List salaryStatisticsItemList = this.salaryStatisticsItemService.listByStatisticsReportId(po.getId(), employeeId, tenantKey); + List salaryStatisticsItemList = this.salaryStatisticsItemService.listByStatisticsReportId(po.getId()); // 列表data - Page> page = this.salaryStatisticsReportService.buildReportRecords(dimension, param, po, salaryStatisticsItemList, employeeId, tenantKey); + PageInfo> page = this.salaryStatisticsReportService.buildReportRecords(dimension, param, po, salaryStatisticsItemList); // 组装合计 - Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, employeeId, tenantKey); + Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList,(long)user.getUID()); - // 人员维度分页 - if (Objects.equal(dimension.getDimCode(), "employee")) { - if (CollectionUtils.isNotEmpty(page.getRecords())) { - page.setRecords(SalaryPageUtil.subList((int) page.getCurrent(), (int) page.getSize(), page.getRecords())); - weaTable.setCurrent(page.getCurrent()); - weaTable.setTotal(page.getTotal()); - weaTable.setPageSize(page.getSize()); - } - } - - weaTable.setData(page.getRecords()); - weaTable.setModule(SalaryReportModule.BROWSER_MODULE); // 列表columns - List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList, employeeId, tenantKey); - weaTable.setColumns(weaTableColumns); - // pageuid - weaTable.setPageUid("salaryStatisticsReportDataPage"); + List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); Map resultMap = Maps.newHashMap(); resultMap.putAll(JsonUtil.parseMap(weaTable, Object.class)); + resultMap.put("columns", weaTableColumns); + resultMap.put("pageInfo", page); resultMap.put("countResult", countResultMap); return resultMap; } @@ -351,36 +172,37 @@ public class SalaryStatisticsReportWrapper { * @return */ public Map exportData(SalaryStatisticsReportDataQueryParam param, Long employeeId, String tenantKey) { - if (param.getId() == null || param.getDimensionId() == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); - } - - SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(param.getId(), tenantKey); - if (po == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 161845, "薪酬统计报表不存在")); - } - SalaryStatisticsDimensionPO dimension = salaryStatisticsDimensionService.getById(param.getDimensionId(), tenantKey); - if (dimension == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 161300, "统计维度不存在")); - } - // 查询自定义统计项目 - List salaryStatisticsItemList = this.salaryStatisticsItemService.listByStatisticsReportId(po.getId(), employeeId, tenantKey); - // 列表data - Page> page = this.salaryStatisticsReportService.buildReportRecords(dimension, param, po, salaryStatisticsItemList, employeeId, tenantKey); - // 组装合计 - Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, employeeId, tenantKey); - if (CollectionUtils.isNotEmpty(page.getRecords()) && MapUtils.isNotEmpty(countResultMap)) { - page.getRecords().add(countResultMap); - } - // 获取数据 - List> records = CollectionUtils.emptyIfNull(page.getRecords()).stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); - - // 获取列头 - List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList, employeeId, tenantKey); - - // 组装导出参数 - ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records); - exportParam.setSheetName(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 179263, "薪酬统计报表") + "-" + exportParam.getDimensionName()); - return subTableExportService.exportCommon(exportParam, UserContext.getCurrentUser(), TenantContext.getCurrentTenantKey()); +// if (param.getId() == null || param.getDimensionId() == null) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); +// } +// +// SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(param.getId()); +// if (po == null) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); +// } +// SalaryStatisticsDimensionPO dimension = salaryStatisticsDimensionService.getById(param.getDimensionId()); +// if (dimension == null) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); +// } +// // 查询自定义统计项目 +// List salaryStatisticsItemList = this.salaryStatisticsItemService.listByStatisticsReportId(po.getId()); +// // 列表data +// Page> page = this.salaryStatisticsReportService.buildReportRecords(dimension, param, po, salaryStatisticsItemList); +// // 组装合计 +// Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList); +// if (CollectionUtils.isNotEmpty(page.getRecords()) && MapUtils.isNotEmpty(countResultMap)) { +// page.getRecords().add(countResultMap); +// } +// // 获取数据 +// List> records = CollectionUtils.emptyIfNull(page.getRecords()).stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); +// +// // 获取列头 +// List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); +// +// // 组装导出参数 +// ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records); +// exportParam.setSheetName(SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + exportParam.getDimensionName()); +// return subTableExportService.exportCommon(exportParam, UserContext.getCurrentUser(), TenantContext.get()); + return null; } } From bbcaa1a1e88b8ad89e61f1f0d9765f6b76635e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Apr 2023 11:02:03 +0800 Subject: [PATCH 005/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 2508 ++++++++--------- 1 file changed, 1254 insertions(+), 1254 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 8b0a54444..3d7c036a1 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -4,29 +4,29 @@ import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.report.SalaryStatisticsReportMapper; import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.dto.SalaryStatisticsReportDataDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; 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.enums.SalaryStatisticsDimensionTypeEnum; import com.engine.salary.report.service.SalaryStatisticsItemService; import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.service.SalaryAcctEmployeeService; import com.engine.salary.service.SalaryAcctResultService; import com.engine.salary.service.TaxAgentService; +import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -35,7 +35,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; /** @@ -262,7 +261,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map checkMap = SalaryStatisticsReportBO.checkLoad(salaryStatisticsItemList); // 如果一个都没有,直接返回 if (!checkMap.get("isNow")) { - return new Page<>(); + return new PageInfo>(); } // 参数转换 SalaryStatisticsReportBO.poToQueryParam(param, po); @@ -305,97 +304,97 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary private PageInfo> calculateReportRecordsByDimension(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // 定性 - if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(dimension.getDimType())) { - switch (dimension.getDimCode()) { - case SalaryStatisticsDimensionConstant.DM_SALARY_MONTH: - return buildSalaryMonthRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_TAX_AGENT: - return buildTaxAgentRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY: - return buildIncomeCategoryRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_SUB_COMPANY: - return buildSubComRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_DEPARTMENT: - return buildDepartRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_POSITION: - return buildPositionRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_GRADE: - return buildGradeRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: - return buildStatusRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: - return buildTypeRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_EMPLOYEE: - return buildEmployeeRecords(param, data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_QUARTER: - return buildQuarterRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_HALF_YEAR: - return buildHalfYearRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_YEAR: - return buildYearRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_SEX: - return buildSexRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_JOB_CALL: - return buildJobCallRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_SUPERIOR: - return buildSuperiorRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: - return buildMaritalStatusRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_EDUCATION: - return buildEducationRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_DEGREE: - return buildDegreeRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_NATION: - return buildNationRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE: - return buildHouseholdTypeRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS: - return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_AGE: - return buildAgeRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: - return buildWorkYearRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: - return buildCompanyYearRecords(data, salaryAcctResultValueMap); - default: - return new Page<>(); - } - // 定量-组距式分组 - } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { - return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); - // 定量-单项式分组 - } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { - return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); - } - return new Page<>(); +// if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(dimension.getDimType())) { +// switch (dimension.getDimCode()) { +// case SalaryStatisticsDimensionConstant.DM_SALARY_MONTH: +// return buildSalaryMonthRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_TAX_AGENT: +// return buildTaxAgentRecords(data, salaryAcctResultValueMap); +//// case SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY: +//// return buildIncomeCategoryRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_SUB_COMPANY: +// return buildSubComRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_DEPARTMENT: +// return buildDepartRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_POSITION: +// return buildPositionRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_GRADE: +// return buildGradeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: +// return buildStatusRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: +// return buildTypeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_EMPLOYEE: +// return buildEmployeeRecords(param, data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_QUARTER: +// return buildQuarterRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_HALF_YEAR: +// return buildHalfYearRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_YEAR: +// return buildYearRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_SEX: +// return buildSexRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_JOB_CALL: +// return buildJobCallRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_SUPERIOR: +// return buildSuperiorRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: +// return buildMaritalStatusRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_EDUCATION: +// return buildEducationRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_DEGREE: +// return buildDegreeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_NATION: +// return buildNationRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE: +// return buildHouseholdTypeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS: +// return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_AGE: +// return buildAgeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: +// return buildWorkYearRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: +// return buildCompanyYearRecords(data, salaryAcctResultValueMap); +// default: +// return new PageInfo<>(); +// } +// // 定量-组距式分组 +// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { +// return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); +// // 定量-单项式分组 +// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { +// return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); +// } + return new PageInfo<>(); } private PageInfo> buildSalaryMonthRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); - Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); - Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); - List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); - salaryMonthList.forEach(k -> { - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - result.setRecords(records); + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); +// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); +// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); +// List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); +// salaryMonthList.forEach(k -> { +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// result.setList(records); return result; } private PageInfo> buildTaxAgentRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); + PageInfo> result = new PageInfo<>(); List> records = new ArrayList<>(); Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); - List taxAgentList = taxAgentService.listAll(data.getTenantKey()); + List taxAgentList = taxAgentService.listAll(); Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); listMap.forEach((k, v) -> { @@ -405,1230 +404,1231 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary records.add(temp); }); - result.setRecords(records); + result.setList(records); return result; } - private PageInfo> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); - Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); - Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); - - List incomeCategoryList = listMap.keySet().stream().sorted().collect(Collectors.toList()); - incomeCategoryList.forEach(k -> { - IncomeCategoryEnum incomeCategory = IncomeCategoryEnum.parseByValue(Integer.parseInt(k)); - if (Objects.nonNull(incomeCategory)) { - Map temp = new HashMap<>(); - temp.put(DM, SalaryI18nUtil.getI18nLabel(incomeCategory.getLabelId(), incomeCategory.getDefaultLabel())); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - } - }); - - result.setRecords(records); - return result; - } +// private PageInfo> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); +// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); +// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); +// +// List incomeCategoryList = listMap.keySet().stream().sorted().collect(Collectors.toList()); +// incomeCategoryList.forEach(k -> { +// IncomeCategoryEnum incomeCategory = IncomeCategoryEnum.parseByValue(Integer.parseInt(k)); +// if (Objects.nonNull(incomeCategory)) { +// Map temp = new HashMap<>(); +// temp.put(DM, SalaryI18nUtil.getI18nLabel(incomeCategory.getLabelId(), incomeCategory.getDefaultLabel())); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// } +// }); +// +// result.setList(records); +// return result; +// } private PageInfo> buildSubComRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, data.getTenantKey()); - Map lastComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(lastEmployeeIds, data.getTenantKey()); - Map sameComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(sameEmployeeIds, data.getTenantKey()); - - Set subComIds = new HashSet<>(); - Map empIdSubComMap = new HashMap<>(); - Map subComIdNameMap = new HashMap<>(); - Map lastEmpIdSubComMap = new HashMap<>(); - Map sameEmpIdSubComMap = new HashMap<>(); - comInfoMap.forEach((k, v) -> { - subComIdNameMap.put(v.getId(), v.getName()); - empIdSubComMap.put(k, v.getId()); - subComIds.add(v.getId()); - }); - lastComInfoMap.forEach((k, v) -> { - lastEmpIdSubComMap.put(k, v.getId()); - }); - sameComInfoMap.forEach((k, v) -> { - sameEmpIdSubComMap.put(k, v.getId()); - }); - - subComIds.forEach(subComId -> { - List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); - List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); - List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, subComIdNameMap.get(subComId)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, data.getTenantKey()); +// Map lastComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(lastEmployeeIds, data.getTenantKey()); +// Map sameComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(sameEmployeeIds, data.getTenantKey()); +// +// Set subComIds = new HashSet<>(); +// Map empIdSubComMap = new HashMap<>(); +// Map subComIdNameMap = new HashMap<>(); +// Map lastEmpIdSubComMap = new HashMap<>(); +// Map sameEmpIdSubComMap = new HashMap<>(); +// comInfoMap.forEach((k, v) -> { +// subComIdNameMap.put(v.getId(), v.getName()); +// empIdSubComMap.put(k, v.getId()); +// subComIds.add(v.getId()); +// }); +// lastComInfoMap.forEach((k, v) -> { +// lastEmpIdSubComMap.put(k, v.getId()); +// }); +// sameComInfoMap.forEach((k, v) -> { +// sameEmpIdSubComMap.put(k, v.getId()); +// }); +// +// subComIds.forEach(subComId -> { +// List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); +// List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); +// List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, subComIdNameMap.get(subComId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); return result; } private PageInfo> buildDepartRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); - List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); - List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); - - Set departIds = new HashSet<>(); - Map empIdDepartIdMap = new HashMap<>(); - Map lastEmpIdDepartIdMap = new HashMap<>(); - Map sameEmpIdDepartIdMap = new HashMap<>(); - Map departIdNameMap = new HashMap<>(); - simpleEmployeeList.forEach(employee -> { - if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { - departIdNameMap.put(employee.getDepartment().getId(), employee.getDepartment().getName()); - departIds.add(employee.getDepartment().getId()); - empIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); - } - }); - lastSimpleEmployeeList.forEach(employee -> { - if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { - lastEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); - } - }); - sameSimpleEmployeeList.forEach(employee -> { - if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { - sameEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); - } - }); - - departIds.forEach(departId -> { - List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); - List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); - List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, departIdNameMap.get(departId)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set departIds = new HashSet<>(); +// Map empIdDepartIdMap = new HashMap<>(); +// Map lastEmpIdDepartIdMap = new HashMap<>(); +// Map sameEmpIdDepartIdMap = new HashMap<>(); +// Map departIdNameMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { +// departIdNameMap.put(employee.getDepartment().getId(), employee.getDepartment().getName()); +// departIds.add(employee.getDepartment().getId()); +// empIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { +// lastEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { +// sameEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); +// } +// }); +// +// departIds.forEach(departId -> { +// List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); +// List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); +// List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, departIdNameMap.get(departId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); return result; } private PageInfo> buildPositionRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); - List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); - List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); - - Set positionIds = new HashSet<>(); - Map empIdPositionIdMap = new HashMap<>(); - Map lastEmpIdPositionIdMap = new HashMap<>(); - Map sameEmpIdPositionIdMap = new HashMap<>(); - Map positionIdNameMap = new HashMap<>(); - simpleEmployeeList.forEach(employee -> { - if (employee.getPosition() != null && employee.getPosition().getId() != null) { - positionIdNameMap.put(employee.getPosition().getId(), employee.getPosition().getName()); - positionIds.add(employee.getPosition().getId()); - empIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); - } - }); - lastSimpleEmployeeList.forEach(employee -> { - if (employee.getPosition() != null && employee.getPosition().getId() != null) { - lastEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); - } - }); - sameSimpleEmployeeList.forEach(employee -> { - if (employee.getPosition() != null && employee.getPosition().getId() != null) { - sameEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); - } - }); - - positionIds.forEach(positionId -> { - List positionEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); - List lastPositionEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); - List samePositionEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, positionIdNameMap.get(positionId)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(positionEmployeePOS, lastPositionEmployeePOS, samePositionEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set positionIds = new HashSet<>(); +// Map empIdPositionIdMap = new HashMap<>(); +// Map lastEmpIdPositionIdMap = new HashMap<>(); +// Map sameEmpIdPositionIdMap = new HashMap<>(); +// Map positionIdNameMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getPosition() != null && employee.getPosition().getId() != null) { +// positionIdNameMap.put(employee.getPosition().getId(), employee.getPosition().getName()); +// positionIds.add(employee.getPosition().getId()); +// empIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getPosition() != null && employee.getPosition().getId() != null) { +// lastEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getPosition() != null && employee.getPosition().getId() != null) { +// sameEmpIdPositionIdMap.put(employee.getId(), employee.getPosition().getId()); +// } +// }); +// +// positionIds.forEach(positionId -> { +// List positionEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); +// List lastPositionEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); +// List samePositionEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPositionIdMap.get(po.getEmployeeId()), positionId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, positionIdNameMap.get(positionId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(positionEmployeePOS, lastPositionEmployeePOS, samePositionEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPositionIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); return result; } private PageInfo> buildGradeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); - List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); - List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); - - Set gradeIds = new HashSet<>(); - Map empIdGradeIdMap = new HashMap<>(); - Map lastEmpIdGradeIdMap = new HashMap<>(); - Map sameEmpIdGradeIdMap = new HashMap<>(); - Map gradeIdNameMap = new HashMap<>(); - simpleEmployeeList.forEach(employee -> { - if (employee.getGrade() != null && employee.getGrade().getId() != null) { - gradeIdNameMap.put(employee.getGrade().getId(), employee.getGrade().getName()); - gradeIds.add(employee.getGrade().getId()); - empIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); - } - }); - lastSimpleEmployeeList.forEach(employee -> { - if (employee.getGrade() != null && employee.getGrade().getId() != null) { - lastEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); - } - }); - sameSimpleEmployeeList.forEach(employee -> { - if (employee.getGrade() != null && employee.getGrade().getId() != null) { - sameEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); - } - }); - - gradeIds.forEach(gradeId -> { - List gradeEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); - List lastGradeEmployeePos = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); - List sameGradeEmployeePos = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, gradeIdNameMap.get(gradeId)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(gradeEmployeePOS, lastGradeEmployeePos, sameGradeEmployeePos, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set gradeIds = new HashSet<>(); +// Map empIdGradeIdMap = new HashMap<>(); +// Map lastEmpIdGradeIdMap = new HashMap<>(); +// Map sameEmpIdGradeIdMap = new HashMap<>(); +// Map gradeIdNameMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getGrade() != null && employee.getGrade().getId() != null) { +// gradeIdNameMap.put(employee.getGrade().getId(), employee.getGrade().getName()); +// gradeIds.add(employee.getGrade().getId()); +// empIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getGrade() != null && employee.getGrade().getId() != null) { +// lastEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getGrade() != null && employee.getGrade().getId() != null) { +// sameEmpIdGradeIdMap.put(employee.getId(), employee.getGrade().getId()); +// } +// }); +// +// gradeIds.forEach(gradeId -> { +// List gradeEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); +// List lastGradeEmployeePos = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); +// List sameGradeEmployeePos = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdGradeIdMap.get(po.getEmployeeId()), gradeId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, gradeIdNameMap.get(gradeId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(gradeEmployeePOS, lastGradeEmployeePos, sameGradeEmployeePos, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdGradeIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); return result; } private PageInfo> buildStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); - List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); - List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); - Map statusIdNameMap = hrmCommonHrmStatusService.list(data.getTenantKey()).stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(HrmStatus::getCodeId))), ArrayList::new)).stream().collect(Collectors.toMap(HrmStatus::getCodeId, HrmStatus::getName)); - - Set statusIds = new HashSet<>(); - Map empIdStatusIdMap = new HashMap<>(); - Map lastEmpIdStatusIdMap = new HashMap<>(); - Map sameEmpIdStatusIdMap = new HashMap<>(); - simpleEmployeeList.forEach(employee -> { - if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { - statusIds.add(Long.valueOf(employee.getPersonnelStatus())); - empIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); - } - }); - lastSimpleEmployeeList.forEach(employee -> { - if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { - lastEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); - } - }); - sameSimpleEmployeeList.forEach(employee -> { - if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { - sameEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); - } - }); - - statusIds.forEach(statusId -> { - List statusEmployeePOS = data.getList().stream().filter(po -> com.google.common.base.Objects.equal(empIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); - List lastStatusEmployeePOS = data.getLastList().stream().filter(po -> com.google.common.base.Objects.equal(lastEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); - List sameStatusEmployeePOS = data.getSameList().stream().filter(po -> com.google.common.base.Objects.equal(sameEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, statusIdNameMap.get(statusId)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(statusEmployeePOS, lastStatusEmployeePOS, sameStatusEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// Map statusIdNameMap = hrmCommonHrmStatusService.list(data.getTenantKey()).stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(HrmStatus::getCodeId))), ArrayList::new)).stream().collect(Collectors.toMap(HrmStatus::getCodeId, HrmStatus::getName)); +// +// Set statusIds = new HashSet<>(); +// Map empIdStatusIdMap = new HashMap<>(); +// Map lastEmpIdStatusIdMap = new HashMap<>(); +// Map sameEmpIdStatusIdMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { +// statusIds.add(Long.valueOf(employee.getPersonnelStatus())); +// empIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { +// lastEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (StringUtils.isNotBlank(employee.getPersonnelStatus())) { +// sameEmpIdStatusIdMap.put(employee.getId(), Long.valueOf(employee.getPersonnelStatus())); +// } +// }); +// +// statusIds.forEach(statusId -> { +// List statusEmployeePOS = data.getList().stream().filter(po -> com.google.common.base.Objects.equal(empIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); +// List lastStatusEmployeePOS = data.getLastList().stream().filter(po -> com.google.common.base.Objects.equal(lastEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); +// List sameStatusEmployeePOS = data.getSameList().stream().filter(po -> com.google.common.base.Objects.equal(sameEmpIdStatusIdMap.get(po.getEmployeeId()), statusId)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, statusIdNameMap.get(statusId)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(statusEmployeePOS, lastStatusEmployeePOS, sameStatusEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdStatusIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); return result; } private PageInfo> buildTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - Map> typeEmployeeListMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); - Map> lastTypeEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); - Map> sameTypeEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); - - typeEmployeeListMap.forEach((k, v) -> { - Map temp = new HashMap<>(); - temp.put(DM, Objects.equals(k, EmployeeTypeEnum.ORGANIZATION.getValue()) ? SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 110538, "内部人员") : SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 119127, "非系统人员")); - temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastTypeEmployeeListMap.get(k), sameTypeEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - result.setRecords(records); + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// Map> typeEmployeeListMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); +// Map> lastTypeEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); +// Map> sameTypeEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeType)); +// +// typeEmployeeListMap.forEach((k, v) -> { +// Map temp = new HashMap<>(); +// temp.put(DM, Objects.equals(k, EmployeeTypeEnum.ORGANIZATION.getValue()) ? SalaryI18nUtil.getI18nLabel( 110538, "内部人员") : SalaryI18nUtil.getI18nLabel( 119127, "非系统人员")); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastTypeEmployeeListMap.get(k), sameTypeEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setList(records); return result; } private PageInfo> buildEmployeeRecords(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - Page> result = new Page<>(param.getCurrent(), param.getPageSize(), employeeIds.size(), true); - List> records = new ArrayList<>(); - - List pageEmployeeIds = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), employeeIds); - List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); - Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); - Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); - Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); - Map employeeByIdMap = hrmCommonEmployeeService.getEmployeeByIds(accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()).stream().collect(Collectors.toMap(SimpleEmployee::getEmployeeId, SimpleEmployee::getUsername)); - - List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); - Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); - - employeeListMap.forEach((k, v) -> { - Map temp = new HashMap<>(); - temp.put(DM, Objects.nonNull(employeeByIdMap.get(k)) ? employeeByIdMap.get(k) : employeeExtByIdMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - result.setRecords(records); - return result; +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// PageInfo> result = new PageInfo<>(param.getCurrent(), param.getPageSize(), employeeIds.size(), true); +// List> records = new ArrayList<>(); +// +// List pageEmployeeIds = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), employeeIds); +// List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); +// Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); +// Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); +// Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); +// Map employeeByIdMap = hrmCommonEmployeeService.getEmployeeByIds(accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()).stream().collect(Collectors.toMap(SimpleEmployee::getEmployeeId, SimpleEmployee::getUsername)); +// +// List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); +// Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); +// +// employeeListMap.forEach((k, v) -> { +// Map temp = new HashMap<>(); +// temp.put(DM, Objects.nonNull(employeeByIdMap.get(k)) ? employeeByIdMap.get(k) : employeeExtByIdMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setList(records); +// return result; + return null; } private PageInfo> buildQuarterRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - Set quarterSet = Sets.newHashSet(); - data.getList().forEach(sa -> quarterSet.add(ReportTimeUtil.getQuarter(sa.getSalaryMonth()))); - List quarters = Lists.newArrayList(quarterSet).stream().sorted().collect(Collectors.toList()); - Collections.reverse(quarters); - - quarters.forEach(k -> { - List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(sa.getSalaryMonth()))).collect(Collectors.toList()); - List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 3)))).collect(Collectors.toList()); - List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - result.setRecords(records); + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// Set quarterSet = Sets.newHashSet(); +// data.getList().forEach(sa -> quarterSet.add(ReportTimeUtil.getQuarter(sa.getSalaryMonth()))); +// List quarters = Lists.newArrayList(quarterSet).stream().sorted().collect(Collectors.toList()); +// Collections.reverse(quarters); +// +// quarters.forEach(k -> { +// List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(sa.getSalaryMonth()))).collect(Collectors.toList()); +// List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 3)))).collect(Collectors.toList()); +// List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setList(records); return result; } private PageInfo> buildHalfYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - Set halfYearSet = Sets.newHashSet(); - data.getList().forEach(sa -> halfYearSet.add(ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))); - List halfYears = Lists.newArrayList(halfYearSet).stream().sorted().collect(Collectors.toList()); - Collections.reverse(halfYears); - - halfYears.forEach(k -> { - List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))).collect(Collectors.toList()); - List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 6)))).collect(Collectors.toList()); - List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - result.setRecords(records); + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// Set halfYearSet = Sets.newHashSet(); +// data.getList().forEach(sa -> halfYearSet.add(ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))); +// List halfYears = Lists.newArrayList(halfYearSet).stream().sorted().collect(Collectors.toList()); +// Collections.reverse(halfYears); +// +// halfYears.forEach(k -> { +// List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))).collect(Collectors.toList()); +// List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 6)))).collect(Collectors.toList()); +// List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setList(records); return result; } - private Page> buildYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - Set yearSet = Sets.newHashSet(); - data.getList().forEach(sa -> yearSet.add(ReportTimeUtil.getYear(sa.getSalaryMonth()))); - List years = Lists.newArrayList(yearSet).stream().sorted().collect(Collectors.toList()); - Collections.reverse(years); - - years.forEach(k -> { - List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); - List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); - List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - result.setRecords(records); + private PageInfo> buildYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// Set yearSet = Sets.newHashSet(); +// data.getList().forEach(sa -> yearSet.add(ReportTimeUtil.getYear(sa.getSalaryMonth()))); +// List years = Lists.newArrayList(yearSet).stream().sorted().collect(Collectors.toList()); +// Collections.reverse(years); +// +// years.forEach(k -> { +// List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); +// List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); +// List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setList(records); return result; } - private Page> buildSexRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); - List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); - List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); - Map sexMap = Arrays.stream(Sex.values()).collect(Collectors.toMap(Sex::getName, Sex::getDescription)); - - Map empIdSexIdMap = new HashMap<>(); - Map lastEmpIdSexIdMap = new HashMap<>(); - Map sameEmpIdSexIdMap = new HashMap<>(); - simpleEmployeeList.forEach(employee -> { - if (employee.getSex() != null) { - empIdSexIdMap.put(employee.getId(), employee.getSex().getName()); - } - }); - lastSimpleEmployeeList.forEach(employee -> { - if (employee.getSex() != null) { - lastEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); - } - }); - sameSimpleEmployeeList.forEach(employee -> { - if (employee.getSex() != null) { - sameEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); - } - }); - - sexMap.forEach((k, v) -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, v); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); + private PageInfo> buildSexRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// Map sexMap = Arrays.stream(Sex.values()).collect(Collectors.toMap(Sex::getName, Sex::getDescription)); +// +// Map empIdSexIdMap = new HashMap<>(); +// Map lastEmpIdSexIdMap = new HashMap<>(); +// Map sameEmpIdSexIdMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getSex() != null) { +// empIdSexIdMap.put(employee.getId(), employee.getSex().getName()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getSex() != null) { +// lastEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getSex() != null) { +// sameEmpIdSexIdMap.put(employee.getId(), employee.getSex().getName()); +// } +// }); +// +// sexMap.forEach((k, v) -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSexIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, v); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSexIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); return result; } - private Page> buildJobCallRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); - List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); - List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); - - Set jobCallIds = Sets.newHashSet(); - Map empIdJobCallIdMap = new HashMap<>(); - Map lastEmpIdJobCallIdMap = new HashMap<>(); - Map sameEmpIdJobCallIdMap = new HashMap<>(); - simpleEmployeeList.forEach(employee -> { - if (employee.getJobCall() != null) { - empIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); - jobCallIds.add(employee.getJobCall()); - } - }); - lastSimpleEmployeeList.forEach(employee -> { - if (employee.getJobCall() != null) { - lastEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); - } - }); - sameSimpleEmployeeList.forEach(employee -> { - if (employee.getJobCall() != null) { - sameEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); - } - }); - - HrmJobCallParam jobCallParam = new HrmJobCallParam(); - jobCallParam.setIds(Lists.newArrayList(jobCallIds)); - jobCallParam.setEmployeeId(data.getEmployeeId()); - jobCallParam.setTenantKey(data.getTenantKey()); - List jobCallList = CollectionUtils.isEmpty(jobCallIds) ? Lists.newArrayList() : hrmJobCallRemoteService.getJobCallBrowserByIds(jobCallParam); - Map jobCallIdMap = jobCallList.stream().collect(Collectors.toMap(BrowserDataDto::getId, BrowserDataDto::getName)); - - jobCallIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, jobCallIdMap.get(k.toString())); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); + private PageInfo> buildJobCallRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set jobCallIds = Sets.newHashSet(); +// Map empIdJobCallIdMap = new HashMap<>(); +// Map lastEmpIdJobCallIdMap = new HashMap<>(); +// Map sameEmpIdJobCallIdMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getJobCall() != null) { +// empIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); +// jobCallIds.add(employee.getJobCall()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getJobCall() != null) { +// lastEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getJobCall() != null) { +// sameEmpIdJobCallIdMap.put(employee.getId(), employee.getJobCall()); +// } +// }); +// +// HrmJobCallParam jobCallParam = new HrmJobCallParam(); +// jobCallParam.setIds(Lists.newArrayList(jobCallIds)); +// jobCallParam.setEmployeeId(data.getEmployeeId()); +// jobCallParam.setTenantKey(data.getTenantKey()); +// List jobCallList = CollectionUtils.isEmpty(jobCallIds) ? Lists.newArrayList() : hrmJobCallRemoteService.getJobCallBrowserByIds(jobCallParam); +// Map jobCallIdMap = jobCallList.stream().collect(Collectors.toMap(BrowserDataDto::getId, BrowserDataDto::getName)); +// +// jobCallIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdJobCallIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, jobCallIdMap.get(k.toString())); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdJobCallIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); return result; } - private Page> buildSuperiorRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); - List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); - List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); - - Set superiorIds = new HashSet<>(); - Map empIdSuperiorIdMap = new HashMap<>(); - Map lastEmpIdSuperiorIdMap = new HashMap<>(); - Map sameEmpIdSuperiorIdMap = new HashMap<>(); - simpleEmployeeList.forEach(employee -> { - if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { - empIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); - superiorIds.add(employee.getSuperior().getId()); - } - }); - lastSimpleEmployeeList.forEach(employee -> { - if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { - lastEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); - } - }); - sameSimpleEmployeeList.forEach(employee -> { - if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { - sameEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); - } - }); - - List superiorList = CollectionUtils.isEmpty(superiorIds) ? Lists.newArrayList() : hrmCommonEmployeeService.getEmployeeByIds(Lists.newArrayList(superiorIds), data.getTenantKey()); - Map superiorMap = superiorList.stream().collect(Collectors.toMap(SimpleEmployee::getId, SimpleEmployee::getUsername)); - - superiorIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, superiorMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); + private PageInfo> buildSuperiorRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); +// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); +// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); +// +// Set superiorIds = new HashSet<>(); +// Map empIdSuperiorIdMap = new HashMap<>(); +// Map lastEmpIdSuperiorIdMap = new HashMap<>(); +// Map sameEmpIdSuperiorIdMap = new HashMap<>(); +// simpleEmployeeList.forEach(employee -> { +// if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { +// empIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); +// superiorIds.add(employee.getSuperior().getId()); +// } +// }); +// lastSimpleEmployeeList.forEach(employee -> { +// if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { +// lastEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); +// } +// }); +// sameSimpleEmployeeList.forEach(employee -> { +// if (employee.getSuperior() != null && employee.getSuperior().getId() != null) { +// sameEmpIdSuperiorIdMap.put(employee.getId(), employee.getSuperior().getId()); +// } +// }); +// +// List superiorList = CollectionUtils.isEmpty(superiorIds) ? Lists.newArrayList() : hrmCommonEmployeeService.getEmployeeByIds(Lists.newArrayList(superiorIds), data.getTenantKey()); +// Map superiorMap = superiorList.stream().collect(Collectors.toMap(SimpleEmployee::getId, SimpleEmployee::getUsername)); +// +// superiorIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSuperiorIdMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, superiorMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSuperiorIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); return result; } - private Page> buildMaritalStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set maritalStatusIds = new HashSet<>(); - - Map empIdMaritalStatusMap = new HashMap<>(); - Map lastEmpIdMaritalStatusMap = new HashMap<>(); - Map sameEmpIdMaritalStatusMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { - maritalStatusIds.add(employee.getMaritalStatus()); - empIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { - lastEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { - sameEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); - } - }); - Map maritalStatusMap = Maps.newHashMap(); - maritalStatusMap.put("married", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174138, "已婚")); - maritalStatusMap.put("unmarried", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174139, "未婚")); - maritalStatusMap.put("divorced", SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 174140, "离异")); - - maritalStatusIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, maritalStatusMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); + private PageInfo> buildMaritalStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set maritalStatusIds = new HashSet<>(); +// +// Map empIdMaritalStatusMap = new HashMap<>(); +// Map lastEmpIdMaritalStatusMap = new HashMap<>(); +// Map sameEmpIdMaritalStatusMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { +// maritalStatusIds.add(employee.getMaritalStatus()); +// empIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { +// lastEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getMaritalStatus())) { +// sameEmpIdMaritalStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getMaritalStatus()); +// } +// }); +// Map maritalStatusMap = Maps.newHashMap(); +// maritalStatusMap.put("married", SalaryI18nUtil.getI18nLabel( 174138, "已婚")); +// maritalStatusMap.put("unmarried", SalaryI18nUtil.getI18nLabel( 174139, "未婚")); +// maritalStatusMap.put("divorced", SalaryI18nUtil.getI18nLabel( 174140, "离异")); +// +// maritalStatusIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdMaritalStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, maritalStatusMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdMaritalStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); return result; } - private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// +// List simpleUserInfoList; +// List lastSimpleUserInfoList; +// List sameSimpleUserInfoList; +// Map> map = Maps.newHashMap(); +// try { +// simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); +// lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); +// sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); +// } catch (Exception e) { +// log.info("获取员工个人信息失败: {}", e.getMessage()); +// return map; +// } +// map.put(NOW_INFO, simpleUserInfoList); +// map.put(LAST_INFO, lastSimpleUserInfoList); +// map.put(SAME_INFO, sameSimpleUserInfoList); +// return map; +// } +// +// private PageInfo> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set educationIds = new HashSet<>(); +// Map educationMap = Maps.newHashMap(); +// +// Map empIdEducationMap = new HashMap<>(); +// Map lastEmpIdEducationMap = new HashMap<>(); +// Map sameEmpIdEducationMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getEducation() != null && employee.getEducation().getId() != null) { +// educationIds.add(employee.getEducation().getId()); +// empIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); +// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getEducation() != null && employee.getEducation().getId() != null) { +// lastEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); +// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getEducation() != null && employee.getEducation().getId() != null) { +// sameEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); +// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); +// } +// }); +// +// educationIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, educationMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set degreeIds = new HashSet<>(); +// Map degreeMap = Maps.newHashMap(); +// +// Map empIdDegreeMap = new HashMap<>(); +// Map lastEmpIdDegreeMap = new HashMap<>(); +// Map sameEmpIdDegreeMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getDegree() != null && employee.getDegree().getId() != null) { +// degreeIds.add(employee.getDegree().getId()); +// empIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); +// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getDegree() != null && employee.getDegree().getId() != null) { +// lastEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); +// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getDegree() != null && employee.getDegree().getId() != null) { +// sameEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); +// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); +// } +// }); +// +// degreeIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, degreeMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set nationIds = new HashSet<>(); +// Map nationMap = Maps.newHashMap(); +// +// Map empIdNationMap = new HashMap<>(); +// Map lastEmpIdNationMap = new HashMap<>(); +// Map sameEmpIdNationMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getNation() != null && employee.getNation().getId() != null) { +// nationIds.add(employee.getNation().getId()); +// empIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); +// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getNation() != null && employee.getNation().getId() != null) { +// lastEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); +// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getNation() != null && employee.getNation().getId() != null) { +// sameEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); +// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); +// } +// }); +// +// nationIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, nationMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set householdTypeIds = new HashSet<>(); +// Map householdTypeMap = Maps.newHashMap(); +// +// Map empIdHouseholdTypeMap = new HashMap<>(); +// Map lastEmpIdHouseholdTypeMap = new HashMap<>(); +// Map sameEmpIdHouseholdTypeMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { +// householdTypeIds.add(employee.getHouseholdType().getId()); +// empIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); +// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { +// lastEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); +// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { +// sameEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); +// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); +// } +// }); +// +// householdTypeIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, householdTypeMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set politicsStatusIds = new HashSet<>(); +// Map politicsStatusMap = Maps.newHashMap(); +// +// Map empIdPoliticsStatusMap = new HashMap<>(); +// Map lastEmpIdPoliticsStatusMap = new HashMap<>(); +// Map sameEmpIdPoliticsStatusMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { +// politicsStatusIds.add(employee.getPoliticsStatus().getId()); +// empIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); +// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { +// lastEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); +// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { +// sameEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); +// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); +// } +// }); +// +// politicsStatusIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, politicsStatusMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set ageSet = new HashSet<>(); +// +// Map empIdAgeMap = new HashMap<>(); +// Map lastEmpIdAgeMap = new HashMap<>(); +// Map sameEmpIdAgeMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getAge() != null) { +// ageSet.add(employee.getAge()); +// empIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getAge() != null) { +// lastEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getAge() != null) { +// sameEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); +// } +// }); +// +// List ages = Lists.newArrayList(ageSet); +// ages = ages.stream().sorted().collect(Collectors.toList()); +// +// ages.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set workYearSet = new HashSet<>(); +// +// Map empIdWorkYearMap = new HashMap<>(); +// Map lastEmpIdWorkYearMap = new HashMap<>(); +// Map sameEmpIdWorkYearMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getWorkYear() != null) { +// workYearSet.add(employee.getWorkYear()); +// empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getWorkYear() != null) { +// lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getWorkYear() != null) { +// sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); +// } +// }); +// List workYears = Lists.newArrayList(workYearSet); +// workYears = workYears.stream().sorted().collect(Collectors.toList()); +// +// workYears.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set companyYearSet = new HashSet<>(); +// +// Map empIdCompanyYearMap = new HashMap<>(); +// Map lastEmpIdCompanyYearMap = new HashMap<>(); +// Map sameEmpIdCompanyYearMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { +// companyYearSet.add(employee.getCompanyYear()); +// empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { +// lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { +// sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// +// List companyYears = Lists.newArrayList(companyYearSet); +// companyYears = companyYears.stream().sorted().collect(Collectors.toList()); +// +// companyYears.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组"); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// // 分组设置 +// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); +// +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// // 分组设置 +// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); +// +// Map empIdYearMap = new HashMap<>(); +// Map lastEmpIdYearMap = new HashMap<>(); +// Map sameEmpIdYearMap = new HashMap<>(); +// +// String groupBelong; +// if (StringUtils.isEmpty(dimension.getDimCode())) { +// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { +// groupBelong = SalaryStatisticsReportBO.G_YEAR; +// // 年份数据 +// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); +// } else { +// groupBelong = SalaryStatisticsReportBO.G_ITEM; +// } +// groups.forEach(k -> { +// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setList(records); +// return result; +// } +// +// private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return; +// } +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { +// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { +// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { +// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { +// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { +// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { +// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { +// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { +// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { +// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// } - List simpleUserInfoList; - List lastSimpleUserInfoList; - List sameSimpleUserInfoList; - Map> map = Maps.newHashMap(); - try { - simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); - lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); - sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); - } catch (Exception e) { - log.info("获取员工个人信息失败: {}", e.getMessage()); - return map; - } - map.put(NOW_INFO, simpleUserInfoList); - map.put(LAST_INFO, lastSimpleUserInfoList); - map.put(SAME_INFO, sameSimpleUserInfoList); - return map; - } - - private Page> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set educationIds = new HashSet<>(); - Map educationMap = Maps.newHashMap(); - - Map empIdEducationMap = new HashMap<>(); - Map lastEmpIdEducationMap = new HashMap<>(); - Map sameEmpIdEducationMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getEducation() != null && employee.getEducation().getId() != null) { - educationIds.add(employee.getEducation().getId()); - empIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); - educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getEducation() != null && employee.getEducation().getId() != null) { - lastEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); - educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getEducation() != null && employee.getEducation().getId() != null) { - sameEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); - educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); - } - }); - - educationIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, educationMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); - return result; - } - - private Page> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set degreeIds = new HashSet<>(); - Map degreeMap = Maps.newHashMap(); - - Map empIdDegreeMap = new HashMap<>(); - Map lastEmpIdDegreeMap = new HashMap<>(); - Map sameEmpIdDegreeMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getDegree() != null && employee.getDegree().getId() != null) { - degreeIds.add(employee.getDegree().getId()); - empIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); - degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getDegree() != null && employee.getDegree().getId() != null) { - lastEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); - degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getDegree() != null && employee.getDegree().getId() != null) { - sameEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); - degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); - } - }); - - degreeIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, degreeMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); - return result; - } - - private Page> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set nationIds = new HashSet<>(); - Map nationMap = Maps.newHashMap(); - - Map empIdNationMap = new HashMap<>(); - Map lastEmpIdNationMap = new HashMap<>(); - Map sameEmpIdNationMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getNation() != null && employee.getNation().getId() != null) { - nationIds.add(employee.getNation().getId()); - empIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); - nationMap.put(employee.getNation().getId(), employee.getNation().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getNation() != null && employee.getNation().getId() != null) { - lastEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); - nationMap.put(employee.getNation().getId(), employee.getNation().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getNation() != null && employee.getNation().getId() != null) { - sameEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); - nationMap.put(employee.getNation().getId(), employee.getNation().getName()); - } - }); - - nationIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, nationMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); - return result; - } - - private Page> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set householdTypeIds = new HashSet<>(); - Map householdTypeMap = Maps.newHashMap(); - - Map empIdHouseholdTypeMap = new HashMap<>(); - Map lastEmpIdHouseholdTypeMap = new HashMap<>(); - Map sameEmpIdHouseholdTypeMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { - householdTypeIds.add(employee.getHouseholdType().getId()); - empIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); - householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { - lastEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); - householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { - sameEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); - householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); - } - }); - - householdTypeIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, householdTypeMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); - return result; - } - - private Page> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set politicsStatusIds = new HashSet<>(); - Map politicsStatusMap = Maps.newHashMap(); - - Map empIdPoliticsStatusMap = new HashMap<>(); - Map lastEmpIdPoliticsStatusMap = new HashMap<>(); - Map sameEmpIdPoliticsStatusMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { - politicsStatusIds.add(employee.getPoliticsStatus().getId()); - empIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); - politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { - lastEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); - politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { - sameEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); - politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); - } - }); - - politicsStatusIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, politicsStatusMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); - return result; - } - - private Page> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set ageSet = new HashSet<>(); - - Map empIdAgeMap = new HashMap<>(); - Map lastEmpIdAgeMap = new HashMap<>(); - Map sameEmpIdAgeMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getAge() != null) { - ageSet.add(employee.getAge()); - empIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getAge() != null) { - lastEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getAge() != null) { - sameEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); - } - }); - - List ages = Lists.newArrayList(ageSet); - ages = ages.stream().sorted().collect(Collectors.toList()); - - ages.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); - return result; - } - - private Page> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set workYearSet = new HashSet<>(); - - Map empIdWorkYearMap = new HashMap<>(); - Map lastEmpIdWorkYearMap = new HashMap<>(); - Map sameEmpIdWorkYearMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getWorkYear() != null) { - workYearSet.add(employee.getWorkYear()); - empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getWorkYear() != null) { - lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getWorkYear() != null) { - sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); - } - }); - List workYears = Lists.newArrayList(workYearSet); - workYears = workYears.stream().sorted().collect(Collectors.toList()); - - workYears.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); - return result; - } - - private Page> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set companyYearSet = new HashSet<>(); - - Map empIdCompanyYearMap = new HashMap<>(); - Map lastEmpIdCompanyYearMap = new HashMap<>(); - Map sameEmpIdCompanyYearMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (StringUtils.isNotEmpty(employee.getCompanyYear())) { - companyYearSet.add(employee.getCompanyYear()); - empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (StringUtils.isNotEmpty(employee.getCompanyYear())) { - lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (StringUtils.isNotEmpty(employee.getCompanyYear())) { - sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - - List companyYears = Lists.newArrayList(companyYearSet); - companyYears = companyYears.stream().sorted().collect(Collectors.toList()); - - companyYears.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(data.getTenantKey(), data.getEmployeeId(), 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setRecords(records); - return result; - } - - private Page> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - // 分组设置 - List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); - - - result.setRecords(records); - return result; - } - - private Page> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); - List> records = new ArrayList<>(); - - // 分组设置 - List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); - - Map empIdYearMap = new HashMap<>(); - Map lastEmpIdYearMap = new HashMap<>(); - Map sameEmpIdYearMap = new HashMap<>(); - - String groupBelong; - if (StringUtils.isEmpty(dimension.getDimCode())) { - groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { - groupBelong = SalaryStatisticsReportBO.G_YEAR; - // 年份数据 - handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); - } else { - groupBelong = SalaryStatisticsReportBO.G_ITEM; - } - groups.forEach(k -> { - List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - Map temp = new HashMap<>(); - temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - result.setRecords(records); - return result; - } - - private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return; - } - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { - empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { - empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { - empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { - lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { - lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { - lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { - sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { - sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { - sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - } - - private Page> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - Page> result = new Page<>(); + private PageInfo> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); List> records = new ArrayList<>(); // 分组设置 @@ -1644,7 +1644,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary groupBelong = SalaryStatisticsReportBO.G_YEAR; // 年份数据 - handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); +// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); } else { groupBelong = SalaryStatisticsReportBO.G_ITEM; } @@ -1659,7 +1659,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary records.add(temp); }); - result.setRecords(records); + result.setList(records); return result; } } From 95c8ee6a4f2d85b85964bd9ae06bf820454099d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Apr 2023 11:31:20 +0800 Subject: [PATCH 006/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dmybatis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/entity/bo/SalaryStatisticsReportBO.java | 6 ++---- .../salary/report/entity/po/SalaryStatisticsReportPO.java | 5 ++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index d4a32742e..b7c9a2ab6 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -86,8 +86,8 @@ public class SalaryStatisticsReportBO { * @param po */ public static void poToQueryParam(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po) { - param.setSalaryStartMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryStartMonth())); - param.setSalaryEndMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryEndMonth())); +// param.setSalaryStartMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryStartMonth())); +// param.setSalaryEndMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryEndMonth())); // todo 待优化 // String key = "id"; @@ -822,8 +822,6 @@ public class SalaryStatisticsReportBO { * * @param dimensionName * @param salaryStatisticsItemList - * @param employeeId - * @param tenantKey * @return */ public static List buildReportColumns(String dimensionName, List salaryStatisticsItemList) { diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java index 142d18623..8d371dc68 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java @@ -6,7 +6,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; -import java.time.LocalDate; import java.util.Collection; import java.util.Date; @@ -40,10 +39,10 @@ public class SalaryStatisticsReportPO implements Serializable { private String dimension; //薪资所属月-起始") - private LocalDate salaryStartMonth; + private Date salaryStartMonth; //薪资所属月-截止") - private LocalDate salaryEndMonth; + private Date salaryEndMonth; //个税扣缴义务人配置") private String taxAgentSetting; From d7ab77dab19d9e08a5b22fac0c68162beefec91e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Apr 2023 13:43:00 +0800 Subject: [PATCH 007/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/enums/SalaryStatisticsDimensionTypeEnum.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java b/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java index 91ec04a2c..5eaf9d942 100644 --- a/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java +++ b/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java @@ -1,5 +1,6 @@ package com.engine.salary.report.enums; +import com.engine.salary.enums.BaseEnum; import com.engine.salary.util.SalaryI18nUtil; import java.util.Arrays; @@ -10,7 +11,7 @@ import java.util.Optional; * @Author: wangxiangzhong * @Date: 2022/12/15 11:28 */ -public enum SalaryStatisticsDimensionTypeEnum { +public enum SalaryStatisticsDimensionTypeEnum implements BaseEnum { QUALITATIVE("QUALITATIVE", "定性", 161086), RATION_GROUP_SPACING("RATION_GROUP_SPACING", "定量-组距式分组", 161087), RATION_GROUP_INDIVIDUAL("RATION_GROUP_INDIVIDUAL", "定量-单项式分组", 161088); @@ -35,7 +36,7 @@ public enum SalaryStatisticsDimensionTypeEnum { return defaultLabel; } - public int getLabelId() { + public Integer getLabelId() { return labelId; } From 0749fffcdb98841f9de37cdd3dd53de3696433be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Apr 2023 14:00:41 +0800 Subject: [PATCH 008/245] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E7=BB=B4=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsDimensionWrapper.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java index d7a8d4540..50f9bce7d 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java @@ -2,7 +2,11 @@ package com.engine.salary.report.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.component.WeaFormOption; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; import com.engine.salary.report.entity.dto.SalaryStatisticsDimensionFormDTO; import com.engine.salary.report.entity.dto.SalaryStatisticsDimensionListDTO; import com.engine.salary.report.entity.param.SalaryStatisticsDimensionQueryParam; @@ -17,6 +21,7 @@ import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; +import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; import weaver.hrm.User; @@ -71,12 +76,36 @@ public class SalaryStatisticsDimensionWrapper extends Service { */ public SalaryStatisticsDimensionFormDTO getFrom(Long id) { + List statsDimOptions = Lists.newArrayList(); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_SEX, SalaryI18nUtil.getI18nLabel(98622, "性别"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_JOB_CALL, SalaryI18nUtil.getI18nLabel(173995, "职称"))); +// statsDimOptions.add(new WeaFormOption("", SalaryI18nUtil.getI18nLabel(173996, "办公地点"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_SUPERIOR, SalaryI18nUtil.getI18nLabel(173997, "上级"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS, SalaryI18nUtil.getI18nLabel(174007, "婚姻状况"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_EDUCATION, SalaryI18nUtil.getI18nLabel(174005, "学历"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_DEGREE, SalaryI18nUtil.getI18nLabel(174004, "学位"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_NATION, SalaryI18nUtil.getI18nLabel(174107, "民族"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE, SalaryI18nUtil.getI18nLabel(174106, "户口类型"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS, SalaryI18nUtil.getI18nLabel(174105, "政治面貌"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_AGE, SalaryI18nUtil.getI18nLabel(174001, "年龄"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_WORK_YEAR, SalaryI18nUtil.getI18nLabel(174000, "工龄"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR, SalaryI18nUtil.getI18nLabel(174003, "司龄"))); + + List groupDimOptions = Lists.newArrayList(); + groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_AGE, SalaryI18nUtil.getI18nLabel(174001, "年龄"))); + groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_WORK_YEAR, SalaryI18nUtil.getI18nLabel(174000, "工龄"))); +// groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR, SalaryI18nUtil.getI18nLabel(174003, "司龄"))); + List salaryItemList = salaryItemService(user).listAll(); + groupDimOptions.addAll(salaryItemList.stream() + .filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())) + .map(item -> new WeaFormOption(item.getId().toString(), item.getName())).collect(Collectors.toList())); + // 1.构建基础信息表单 Map baseForm = new HashMap<>(); + baseForm.put("statsDimOptions",statsDimOptions); + baseForm.put("groupDimOptions",groupDimOptions); // 2.分组设置 String groupSetting = "[]"; if (id != null) { - - SalaryStatisticsDimensionPO po = this.salaryStatisticsDimensionService(user).getById(id); if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161116, "薪酬统计维度不存在")); From 1cbb8897483f80a72a915aa438cfcab1e2001ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Apr 2023 18:43:33 +0800 Subject: [PATCH 009/245] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/report/SalaryStatisticsDimensionMapper.java | 3 ++- .../salary/mapper/report/SalaryStatisticsDimensionMapper.xml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.java index c4e5c266a..a941af555 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.java +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.java @@ -1,6 +1,7 @@ package com.engine.salary.mapper.report; import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -61,5 +62,5 @@ public interface SalaryStatisticsDimensionMapper { */ int delete(SalaryStatisticsDimensionPO salaryStatsDim); - void batDelete(List deleteIds); + void batDelete(@Param("ids") List ids); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.xml index dfe698fe6..09890b22b 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.xml +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsDimensionMapper.xml @@ -291,7 +291,8 @@ UPDATE hrsa_salary_stats_dim SET delete_type=1 - WHERE id IN + WHERE + id IN #{id} From dc5c776d9790e7b129b8548ad2d79248699a60b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 12 Apr 2023 15:03:19 +0800 Subject: [PATCH 010/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 158 +++++++++--------- .../salary/report/util/ReportTimeUtil.java | 10 ++ 2 files changed, 90 insertions(+), 78 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 3d7c036a1..4fce6de56 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -17,8 +17,10 @@ import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSave 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.enums.SalaryStatisticsDimensionTypeEnum; import com.engine.salary.report.service.SalaryStatisticsItemService; import com.engine.salary.report.service.SalaryStatisticsReportService; +import com.engine.salary.report.util.ReportTimeUtil; import com.engine.salary.service.SalaryAcctEmployeeService; import com.engine.salary.service.SalaryAcctResultService; import com.engine.salary.service.TaxAgentService; @@ -304,85 +306,85 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary private PageInfo> calculateReportRecordsByDimension(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // 定性 -// if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(dimension.getDimType())) { -// switch (dimension.getDimCode()) { -// case SalaryStatisticsDimensionConstant.DM_SALARY_MONTH: -// return buildSalaryMonthRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_TAX_AGENT: -// return buildTaxAgentRecords(data, salaryAcctResultValueMap); -//// case SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY: -//// return buildIncomeCategoryRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_SUB_COMPANY: -// return buildSubComRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_DEPARTMENT: -// return buildDepartRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_POSITION: -// return buildPositionRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_GRADE: -// return buildGradeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: -// return buildStatusRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: -// return buildTypeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_EMPLOYEE: -// return buildEmployeeRecords(param, data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_QUARTER: -// return buildQuarterRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_HALF_YEAR: -// return buildHalfYearRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_YEAR: -// return buildYearRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_SEX: -// return buildSexRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_JOB_CALL: -// return buildJobCallRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_SUPERIOR: -// return buildSuperiorRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: -// return buildMaritalStatusRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_EDUCATION: -// return buildEducationRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_DEGREE: -// return buildDegreeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_NATION: -// return buildNationRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE: -// return buildHouseholdTypeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS: -// return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_AGE: -// return buildAgeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: -// return buildWorkYearRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: -// return buildCompanyYearRecords(data, salaryAcctResultValueMap); -// default: -// return new PageInfo<>(); -// } -// // 定量-组距式分组 -// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { -// return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); -// // 定量-单项式分组 -// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { -// return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); -// } + if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(dimension.getDimType())) { + switch (dimension.getDimCode()) { + case SalaryStatisticsDimensionConstant.DM_SALARY_MONTH: + return buildSalaryMonthRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_TAX_AGENT: + return buildTaxAgentRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY: +// return buildIncomeCategoryRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_SUB_COMPANY: + return buildSubComRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_DEPARTMENT: + return buildDepartRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_POSITION: + return buildPositionRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_GRADE: + return buildGradeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: + return buildStatusRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: + return buildTypeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_EMPLOYEE: + return buildEmployeeRecords(param, data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_QUARTER: + return buildQuarterRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_HALF_YEAR: + return buildHalfYearRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_YEAR: + return buildYearRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_SEX: + return buildSexRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_JOB_CALL: + return buildJobCallRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_SUPERIOR: + return buildSuperiorRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: + return buildMaritalStatusRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_EDUCATION: + return buildEducationRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_DEGREE: + return buildDegreeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_NATION: + return buildNationRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE: + return buildHouseholdTypeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS: + return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_AGE: + return buildAgeRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: + return buildWorkYearRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: + return buildCompanyYearRecords(data, salaryAcctResultValueMap); + default: + return new PageInfo<>(); + } + // 定量-组距式分组 + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { + return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); + // 定量-单项式分组 + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { + return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); + } return new PageInfo<>(); } private PageInfo> buildSalaryMonthRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); -// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); -// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); -// List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); -// salaryMonthList.forEach(k -> { -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// result.setList(records); + List> records = new ArrayList<>(); + Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); + Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); + Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); + List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); + salaryMonthList.forEach(k -> { + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + result.setList(records); return result; } @@ -408,8 +410,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } -// private PageInfo> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); + private PageInfo> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); // // Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); @@ -428,8 +430,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // }); // // result.setList(records); -// return result; -// } + return result; + } private PageInfo> buildSubComRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); diff --git a/src/com/engine/salary/report/util/ReportTimeUtil.java b/src/com/engine/salary/report/util/ReportTimeUtil.java index df7d82007..21351ee87 100644 --- a/src/com/engine/salary/report/util/ReportTimeUtil.java +++ b/src/com/engine/salary/report/util/ReportTimeUtil.java @@ -1,5 +1,7 @@ package com.engine.salary.report.util; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -109,6 +111,14 @@ public class ReportTimeUtil { return YEAR_MONTH.format(LocalDate.parse(yearMonth + "-01").plusYears(-1)); } + public static Date getLastYearMonth(Date yearMonth) { + return DateUtil.offsetMonth(yearMonth,-1); + } + + public static Date getSameYearMonth(Date yearMonth) { + return DateUtil.offset(yearMonth, DateField.YEAR,-1); + } + public static String getPlusYearMonth(String yearMonth, long months) { return YEAR_MONTH.format(LocalDate.parse(yearMonth + "-01").plusMonths(months)); } From 82ee707f16f4bd5da3d5d3fbb52172b1f12e71a9 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 12 Apr 2023 15:27:35 +0800 Subject: [PATCH 011/245] =?UTF-8?q?employebiz=E6=94=B9=E6=88=90employeeser?= =?UTF-8?q?vice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/EmployBiz.java | 21 +++++++++ src/com/engine/salary/biz/SIArchivesBiz.java | 9 +++- .../salary/service/SalaryEmployeeService.java | 19 +++++++- .../impl/AddUpDeductionServiceImpl.java | 13 ++--- .../impl/AddUpSituationServiceImpl.java | 9 ++-- .../impl/AttendQuoteDataServiceImpl.java | 3 +- .../impl/OtherDeductionServiceImpl.java | 9 ++-- .../service/impl/SIAccountServiceImpl.java | 16 ++----- .../service/impl/SISchemeServiceImpl.java | 6 +-- .../impl/SalaryAcctCalculateServiceImpl.java | 2 +- .../impl/SalaryAcctExcelServiceImpl.java | 2 +- .../impl/SalaryAcctResultServiceImpl.java | 2 +- .../impl/SalaryArchiveExcelServiceImpl.java | 1 - .../impl/SalaryArchiveServiceImpl.java | 1 - .../SalaryComparisonResultServiceImpl.java | 2 +- .../impl/SalaryEmployeeServiceImpl.java | 47 ++++++++++++++++++- .../impl/SalarySendRangeServiceImpl.java | 7 ++- .../impl/SalarySobRangeServiceImpl.java | 7 ++- .../impl/SpecialAddDeductionServiceImpl.java | 9 ++-- .../impl/TaxAgentManageRangeServiceImpl.java | 12 ++--- .../impl/TaxDeclarationDetailServiceImpl.java | 6 +-- .../wrapper/SalaryAcctEmployeeWrapper.java | 2 +- .../wrapper/SalaryAcctRecordWrapper.java | 17 +++---- .../salary/wrapper/SalaryArchiveWrapper.java | 8 +++- .../wrapper/TaxAgentSubAdminWrapper.java | 13 +++-- .../salary/wrapper/TaxAgentWrapper.java | 2 +- .../salary/wrapper/TaxDeclarationWrapper.java | 10 ++-- 27 files changed, 162 insertions(+), 93 deletions(-) diff --git a/src/com/engine/salary/biz/EmployBiz.java b/src/com/engine/salary/biz/EmployBiz.java index 5b2e288ba..beb8c4741 100644 --- a/src/com/engine/salary/biz/EmployBiz.java +++ b/src/com/engine/salary/biz/EmployBiz.java @@ -17,6 +17,16 @@ import java.util.List; public class EmployBiz extends BaseBean { + public List listAll(){ + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + EmployMapper mapper = sqlSession.getMapper(EmployMapper.class); + return mapper.listAll(); + } finally { + sqlSession.close(); + } + } + /** * 查询人员列表 * @@ -158,4 +168,15 @@ public class EmployBiz extends BaseBean { sqlSession.close(); } } + + public List listAllForReport() { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + EmployMapper mapper = sqlSession.getMapper(EmployMapper.class); + return mapper.listAllForReport(); + } finally { + sqlSession.close(); + } + } + } diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index a41f1f72a..43c72f76b 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -40,6 +40,8 @@ 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.mapper.taxagent.TaxAgentMapper; +import com.engine.salary.service.SalaryEmployeeService; +import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryFormItemUtil; @@ -110,6 +112,10 @@ public class SIArchivesBiz { return ServiceUtil.getService(TaxAgentWrapper.class, user); } + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + /** * @param welfareType * @param employeeId @@ -120,8 +126,7 @@ public class SIArchivesBiz { public Map getBaseForm(WelfareTypeEnum welfareType, Long employeeId, Long operateId, User user, Long paymentOrganization) { Map data = new HashMap<>(16); SalaryAssert.notNull(employeeId, "员工id不可为空"); - EmployBiz employBiz = new EmployBiz(); - List employeeByIds = employBiz.getEmployeeByIdsAll(Collections.singletonList(employeeId)); + List employeeByIds = getSalaryEmployeeService(user).getEmployeeByIdsAll(Collections.singletonList(employeeId)); SalaryAssert.notEmpty(employeeByIds, "员工信息不存在"); DataCollectionEmployee item = employeeByIds.get(0); diff --git a/src/com/engine/salary/service/SalaryEmployeeService.java b/src/com/engine/salary/service/SalaryEmployeeService.java index a31b12692..eb7d56277 100644 --- a/src/com/engine/salary/service/SalaryEmployeeService.java +++ b/src/com/engine/salary/service/SalaryEmployeeService.java @@ -1,6 +1,10 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.PositionInfo; +import com.engine.salary.entity.hrm.SubCompanyInfo; +import com.engine.salary.entity.salarysob.param.SalarySobRangeEmpQueryParam; import java.util.List; @@ -40,7 +44,7 @@ public interface SalaryEmployeeService { * @param ids * @return 全量 */ - List listByIds(List ids); + List getEmployeeByIdsAll(List ids); /** * 获取人员信息 @@ -73,4 +77,17 @@ public interface SalaryEmployeeService { * @param uid 人员id */ List matchImportEmployee(List employeeList, String userName, String deparmentName, String mobile, String workcode, Long uid); + + String empValidType(); + + List getDeptInfoList(List departmentIds); + + List getSubCompanyInfoList(List subDepartmentIds); + + List listPositionInfo(List positionIds); + + List listEmployee(); + + List listByParams(List includeQueryParams); + } diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index edeb2ed77..0927159f2 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -195,7 +195,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); Map apidatas = new HashMap(); - EmployBiz employBiz = new EmployBiz(); + AddUpDeductionBiz addUpDeductionBiz = new AddUpDeductionBiz(); //检验参数 @@ -211,7 +211,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction //个税扣缴义务人 String taxAgentId = Util.null2String(importParam.getTaxAgentId()); // 获取租户下所有的人员 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 已经核算过的不可操作 // 获取已经核算的数据 List salaryAcctEmployees = getAccountedEmployeeData(declareMonthStr); @@ -437,7 +437,6 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction public void createAddUpDeduction(AddUpDeductionRecordParam addUpDeductionRecordParam) { long currentEmployeeId = user.getUID(); Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); - EmployBiz employBiz = new EmployBiz(); AddUpDeductionBiz addUpDeductionBiz = new AddUpDeductionBiz(); //税款所属期 @@ -450,7 +449,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction //个税扣缴义务人 String taxAgentId = Util.null2String(addUpDeductionRecordParam.getTaxAgentId()); // 获取租户下所有的人员 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 已经核算过的不可操作 // 获取已经核算的数据 List salaryAcctEmployees = getAccountedEmployeeData(declareMonthStr); @@ -729,7 +728,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction .forEach(l -> getAddUpDeductionMapper().updateDataAndDeclareMonth((List) l)); if (!errorMessages.isEmpty()) { String userNames = getSalaryEmployeeService(user) - .listByIds(errorMessages) + .getEmployeeByIdsAll(errorMessages) .stream() .map(DataCollectionEmployee::getUsername) .collect(Collectors.joining(",")); @@ -885,8 +884,6 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction @Override public XSSFWorkbook exportDetail(Long beLongEmployeeId, boolean isChief, AddUpDeductionQueryParam queryParam) { queryParam.setEmployeeId(beLongEmployeeId); - - EmployBiz employBiz = new EmployBiz(); AddUpDeductionBiz biz = new AddUpDeductionBiz(); Long id = queryParam.getAccumulatedSpecialAdditionalDeductionId(); @@ -899,7 +896,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction throw new SalaryRunTimeException(String.format("累计专项附加扣除不存在" + "[id:%s]", id)); } - List employeeList = employBiz.getEmployeeByIds(Collections.singletonList(po.getEmployeeId())); + List employeeList = getSalaryEmployeeService(user).getEmployeeByIds(Collections.singletonList(po.getEmployeeId())); if (CollectionUtils.isEmpty(employeeList)) { throw new SalaryRunTimeException("员工信息不存在"); } diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index f3b04ecf1..305cac028 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -395,7 +395,6 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation @Override public XSSFWorkbook exportDetail(AddUpSituationQueryParam queryParam) { AddUpSituationBiz biz = new AddUpSituationBiz(); - EmployBiz employBiz = new EmployBiz(); Long id = queryParam.getAccumulatedSituationId(); if (id == null) { @@ -407,7 +406,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation throw new SalaryRunTimeException(String.format("累计情况不存在" + "[id:%s]", id)); } - List employeeList = employBiz.getEmployeeByIds(Collections.singletonList(po.getEmployeeId())); + List employeeList = getSalaryEmployeeService(user).getEmployeeByIds(Collections.singletonList(po.getEmployeeId())); if (CollectionUtils.isEmpty(employeeList)) { throw new SalaryRunTimeException("员工信息不存在"); } @@ -583,7 +582,6 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); Map apidatas = new HashMap(); - EmployBiz employBiz = new EmployBiz(); AddUpSituationBiz biz = new AddUpSituationBiz(); //查询对于人员信息导入筛选的全局配置 @@ -603,7 +601,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // 获取所有个税扣缴义务人 Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); // 获取租户下所有的人员 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 已经核算过的不可操作 // 获取已经核算的数据(获取税款所属期下一个月的数据) YearMonth nextTaxYearMonth = SalaryDateUtil.String2YearMonth(taxYearMonthStr); @@ -907,7 +905,6 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation @Override public void createAddUpSituation(AddUpSituationParam addUpSituationParam) { Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); - EmployBiz employBiz = new EmployBiz(); AddUpSituationBiz biz = new AddUpSituationBiz(); //查询对于人员信息导入筛选的全局配置 @@ -919,7 +916,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // 获取所有个税扣缴义务人 Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); // 获取租户下所有的人员 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 已经核算过的不可操作 // 获取已经核算的数据 List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(taxYearMonthStr); diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index fd91d82b6..a3e279fec 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -91,7 +91,6 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa private AttendQuoteDataBiz dataBiz = new AttendQuoteDataBiz(); private AttendQuoteDataValueBiz dataValueBiz = new AttendQuoteDataValueBiz(); private AttendQuoteFieldBiz fieldBiz = new AttendQuoteFieldBiz(); - private EmployBiz employeeBiz = new EmployBiz(); private AttendQuoteFieldSettingService getFieldSettingService(User user) { return ServiceUtil.getService(AttendQuoteFieldSettingServiceImpl.class, user); @@ -596,7 +595,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; // 获取租户下所有的人员 - List employees = employeeBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 获取已设置的可同步的考勤字段 List attendQuoteFields = getAttendQuoteSetFields(AttendQuoteSourceTypeEnum.IMPORT); // 生成获取考勤引用 diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index e080fb0c3..445c49c3f 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -177,7 +177,6 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction long currentEmployeeId = user.getUID(); Map apidatas = new HashMap(); - EmployBiz employBiz = new EmployBiz(); OtherDeductionBiz OtherDeductionBiz = new OtherDeductionBiz(); //查询对于人员信息导入筛选的全局配置 @@ -206,7 +205,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction int errorCount = 0; //人员信息 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 获取所有个税扣缴义务人 Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); //税款所属期 @@ -480,7 +479,6 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction public XSSFWorkbook exportDetail(OtherDeductionQueryParam param) { OtherDeductionBiz biz = new OtherDeductionBiz(); - EmployBiz employBiz = new EmployBiz(); Long id = param.getOtherTaxExemptDeductionId(); if (id == null) { @@ -492,7 +490,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction throw new SalaryRunTimeException(String.format("其他免税扣除不存在" + "[id:%s]", id)); } - List employeeList = employBiz.getEmployeeByIds(Collections.singletonList(po.getEmployeeId())); + List employeeList = getSalaryEmployeeService(user).getEmployeeByIds(Collections.singletonList(po.getEmployeeId())); if (CollectionUtils.isEmpty(employeeList)) { throw new SalaryRunTimeException("员工信息不存在"); } @@ -601,7 +599,6 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction long currentEmployeeId = user.getUID(); Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); OtherDeductionBiz OtherDeductionBiz = new OtherDeductionBiz(); - EmployBiz employBiz = new EmployBiz(); //查询对于人员信息导入筛选的全局配置 SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; @@ -609,7 +606,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction //税款所属期 String declareMonthStr = Util.null2String(otherDeductionParam.getDeclareMonth()); //人员信息 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 获取所有个税扣缴义务人 Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); //税款所属期 diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index e5e6f8672..3d33bbff1 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -171,8 +171,6 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return MapperProxyFactory.getProxy(FundSchemeMapper.class); } - private EmployBiz employeeBiz = new EmployBiz(); - private TaxAgentBiz taxAgentBiz = new TaxAgentBiz(); private ICategoryMapper getICategoryMapper() { @@ -1242,7 +1240,6 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); Map apidatas = new HashMap(); - EmployBiz employBiz = new EmployBiz(); //查询对于人员信息导入筛选的全局配置 SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); @@ -1259,7 +1256,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId); // 获取租户下所有的人员 - List salaryEmployees = employBiz.listEmployee(); + List salaryEmployees = getSalaryEmployeeService(user).listEmployee(); // 失败的数量 int failCount = 0; @@ -1535,7 +1532,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for(InsuranceAccountDetailPO po : supplyDataList) { Map resultMap = new HashMap<>(); - employee = employeeBiz.getEmployeeById(po.getEmployeeId()); + employee = getSalaryEmployeeService(user).getEmployeeById(po.getEmployeeId()); resultMap.put("username", employee.getUsername()); resultMap.put("departmentName", employee.getDepartmentName()); resultMap.put("mobile", employee.getMobile()); @@ -1575,7 +1572,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for(InsuranceAccountDetailPO po : normalDataList) { Map resultMap = new HashMap<>(); - employee = employeeBiz.getEmployeeById(po.getEmployeeId()); + employee = getSalaryEmployeeService(user).getEmployeeById(po.getEmployeeId()); resultMap.put("username", employee.getUsername()); resultMap.put("departmentName", employee.getDepartmentName()); resultMap.put("mobile", employee.getMobile()); @@ -1910,8 +1907,6 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { public Map importExcelInsuranceDetail(ExcelInsuranceImportParam importParam) { Map apidatas = new HashMap(); - EmployBiz employBiz = new EmployBiz(); - //查询对于人员信息导入筛选的全局配置 SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; @@ -1924,7 +1919,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } // 获取租户下所有的人员 - List salaryEmployees = employBiz.listEmployee(); + List salaryEmployees = getSalaryEmployeeService(user).listEmployee(); // 失败的数量 int failCount = 0; @@ -2599,7 +2594,6 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); Map apidatas = new HashMap(); - EmployBiz employBiz = new EmployBiz(); //查询对于人员信息导入筛选的全局配置 SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); @@ -2616,7 +2610,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId); // 获取租户下所有的人员 - List salaryEmployees = employBiz.listEmployee(); + List salaryEmployees = getSalaryEmployeeService(user).listEmployee(); List insuranceCategoryPOS = getICategoryMapper().listAll(); // 失败的数量 diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 0e91bce27..1a7908aaf 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -124,8 +124,6 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { return ServiceUtil.getService(SIImportServiceImpl.class, user); } - private EmployBiz employeeBiz = new EmployBiz(); - private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); private SalaryEmployeeService getSalaryEmployeeService(User user) { @@ -635,7 +633,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { List taxAgentManageRangeEmployeeTree = getTaxAgentService().listTaxAgentAndEmployeeTree(); // 获取所有人员信息 - List employeeByIds = employeeBiz.listEmployee(); + List employeeByIds = getSalaryEmployeeService(user).listEmployee(); int total = 0; int index = 0; @@ -1402,7 +1400,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { List taxAgentManageRangeEmployeeTree = getTaxAgentService().listTaxAgentAndEmployeeTree(); // 获取所有人员信息 - List employeeByIds = employeeBiz.listEmployee(); + List employeeByIds = getSalaryEmployeeService(user).listEmployee(); int total = 0; int index = 0; diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index e2752a3d1..7ad03955c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -110,7 +110,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc // 数据库字段加密用 // 1、查询人员信息 List employeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); - List simpleEmployees = getSalaryEmployeeService(user).listByIds(employeeIds); + List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); SalarySobCycleDTO salarySobCycleDTO = salaryAcctCalculateBO.getSalarySobCycleDTO(); Long taxAgentId = salaryAcctCalculateBO.getSalarySobPO().getTaxAgentId(); // 2、查询薪资档案的数据 diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 11bb3bd78..035f36a73 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -242,7 +242,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc for (List tempList : partition) { // 人员 List employeeIds = tempList.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); - List simpleEmployees = getSalaryEmployeeService(user).listByIds(employeeIds); + List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); // 个税扣缴义务人 List taxAgentIds = tempList.stream().map(SalaryAcctEmployeePO::getTaxAgentId).distinct().collect(Collectors.toList()); List taxAgents = getTaxAgentService(user).listByIds(taxAgentIds); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 1f1bd0c68..7bf2a532d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -361,7 +361,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 查询人员信息 List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); - List simpleEmployees = getSalaryEmployeeService(user).listByIds(employeeIds); + List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); // 查询个税扣缴义务人 Set taxAgentIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getTaxAgentId); List taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds); diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 421af7ebd..5c3b72f25 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -88,7 +88,6 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch } private SalaryArchiveBiz salaryArchiveMapper = new SalaryArchiveBiz(); - private EmployBiz employBiz = new EmployBiz(); private SalaryArchiveItemBiz salaryArchiveItemMapper = new SalaryArchiveItemBiz(); private SalaryArchiveTaxAgentBiz salaryArchiveTaxAgentMapper = new SalaryArchiveTaxAgentBiz(); private SalaryArchiveDimissionBiz salaryArchiveDimissionMapper = new SalaryArchiveDimissionBiz(); diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index e10db85dc..4e93bfb3a 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -79,7 +79,6 @@ import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveService { private SalaryArchiveBiz salaryArchiveMapper = new SalaryArchiveBiz(); - private EmployBiz employBiz = new EmployBiz(); private SalaryArchiveItemBiz salaryArchiveItemMapper = new SalaryArchiveItemBiz(); private SalaryArchiveTaxAgentBiz salaryArchiveTaxAgentMapper = new SalaryArchiveTaxAgentBiz(); private SalaryArchiveDimissionBiz salaryArchiveDimissionMapper = new SalaryArchiveDimissionBiz(); diff --git a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java index 8d99c24da..6b364347c 100644 --- a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java @@ -195,7 +195,7 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary List taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds); // 查询人员信息 List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); - List simpleEmployees = getSalaryEmployeeService(user).listByIds(employeeIds); + List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); // 判断是否存在合并计税 Set salaryAcctEmployeeIds4ConsolidatedTax; if (StringUtils.isEmpty(queryParam.getConsolidatedTaxation())) { diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index ccc16521a..aa3db586b 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -5,6 +5,9 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.EmployBiz; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.PositionInfo; +import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.salarysob.bo.SalarySobRangeBO; import com.engine.salary.entity.salarysob.param.SalarySobRangeEmpQueryParam; import com.engine.salary.entity.salarysob.po.SalarySobRangePO; @@ -93,7 +96,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } @Override - public List listByIds(List ids) { + public List getEmployeeByIdsAll(List ids) { return employBiz.getEmployeeByIdsAll(ids); } @@ -110,7 +113,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee List employeeList = new ArrayList<>(); List> partition = Lists.partition(simpleEmployeeIds, 1000); for (List longs : partition) { - employeeList.addAll(getEmployMapper().getEmployeeByIds(longs)); + employeeList.addAll(employBiz.getEmployeeByIds(longs)); } return employeeList; @@ -156,4 +159,44 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee return employees; } + + /** + * 人员定位方式 + * “0”代表姓名+部门+手机号的匹配原则,“1”代表工号为唯一匹配原则 + * + * @return + */ + @Override + public String empValidType() { + SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); + return (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; + } + + @Override + public List getDeptInfoList(List departmentIds) { + return employBiz.getDeptInfoList(departmentIds); + } + + @Override + public List getSubCompanyInfoList(List subDepartmentIds) { + return employBiz.getSubCompanyInfoList(subDepartmentIds); + } + + @Override + public List listPositionInfo(List positionIds) { + return employBiz.listPositionInfo(positionIds); + } + + @Override + public List listEmployee() { + List result = employBiz.listEmployee(); + return result; + } + + @Override + public List listByParams(List includeQueryParams) { + List result = employBiz.listByParams(includeQueryParams); + return result; + } + } diff --git a/src/com/engine/salary/service/impl/SalarySendRangeServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendRangeServiceImpl.java index bf15ff818..98e1b3e0f 100644 --- a/src/com/engine/salary/service/impl/SalarySendRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendRangeServiceImpl.java @@ -45,7 +45,6 @@ public class SalarySendRangeServiceImpl extends Service implements SalarySendRan return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } - private EmployBiz employBiz = new EmployBiz(); private R applyMapper(Function mapper) { try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) { @@ -116,17 +115,17 @@ public class SalarySendRangeServiceImpl extends Service implements SalarySendRan .orElse(null); break; case DEPT: - targetName = employBiz.getDeptInfoList(Collections.singletonList(rangeObj.getTargetId())) + targetName = getSalaryEmployeeService().getDeptInfoList(Collections.singletonList(rangeObj.getTargetId())) .stream().findFirst() .map(DeptInfo::getName).orElse(null); break; case SUB_COMPANY: - targetName = employBiz.getSubCompanyInfoList(Collections.singletonList(rangeObj.getTargetId())) + targetName = getSalaryEmployeeService().getSubCompanyInfoList(Collections.singletonList(rangeObj.getTargetId())) .stream().findFirst() .map(SubCompanyInfo::getName).orElse(null); break; case POSITION: - targetName = employBiz.listPositionInfo(Collections.singletonList(rangeObj.getTargetId())) + targetName = getSalaryEmployeeService().listPositionInfo(Collections.singletonList(rangeObj.getTargetId())) .stream().findFirst() .map(PositionInfo::getName).orElse(null); break; diff --git a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java index 9a6e12409..7a263ccff 100644 --- a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java @@ -66,7 +66,6 @@ import java.util.stream.Collectors; public class SalarySobRangeServiceImpl extends Service implements SalarySobRangeService { private SalarySobRangeBiz salarySobRangeBiz = new SalarySobRangeBiz(); - private EmployBiz employBiz = new EmployBiz(); private OrganizationShowSetBiz orgBiz = new OrganizationShowSetBiz(); @@ -116,7 +115,7 @@ public class SalarySobRangeServiceImpl extends Service implements SalarySobRange .filter(e -> Objects.equals(e.getTargetType(), TargetTypeEnum.EMPLOYEE.getValue())) .map(SalarySobRangePO::getTargetId) .collect(Collectors.toList()); - List empInfos = employBiz.getEmployeeByIds(employeeIds); + List empInfos = getSalaryEmployeeService(user).getEmployeeByIds(employeeIds); // 查询部门信息 @@ -143,7 +142,7 @@ public class SalarySobRangeServiceImpl extends Service implements SalarySobRange .filter(e -> Objects.equals(e.getTargetType(), TargetTypeEnum.POSITION.getValue())) .map(SalarySobRangePO::getTargetId) .collect(Collectors.toList()); - List positionInfos = employBiz.listPositionInfo(positionIds); + List positionInfos = getSalaryEmployeeService(user).listPositionInfo(positionIds); // 薪资账套的人员范围po转换成列表dto List salarySobRangeListDTOS = SalarySobRangeBO.convert2ListDTO(salarySobRangePOS, empInfos, deptInfos,subCompanyInfos, positionInfos); @@ -294,7 +293,7 @@ public class SalarySobRangeServiceImpl extends Service implements SalarySobRange int errorCount = 0; //人员信息 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 获取所有个税扣缴义务人 Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); // 错误excel内容 diff --git a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java index 18ea0cf0c..0921ab7ff 100644 --- a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java @@ -175,7 +175,6 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd long currentEmployeeId = user.getUID(); Map apidatas = new HashMap(); - EmployBiz employBiz = new EmployBiz(); SpecialAddDeductionBiz SpecialAddDeductionBiz = new SpecialAddDeductionBiz(); //查询对于人员信息导入筛选的全局配置 @@ -202,7 +201,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd int errorCount = 0; //人员信息 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 获取所有个税扣缴义务人 Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); // 查询已有数据 @@ -402,7 +401,6 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd public XSSFWorkbook exportDetail(SpecialAddDeductionQueryParam param) { SpecialAddDeductionBiz biz = new SpecialAddDeductionBiz(); - EmployBiz employBiz = new EmployBiz(); Long id = param.getSpecialAddDeductionId(); if (id == null) { @@ -414,7 +412,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd throw new SalaryRunTimeException(String.format("专项附加扣除不存在" + "[id:%s]", id)); } - List employeeList = employBiz.getEmployeeByIds(Collections.singletonList(po.getEmployeeId())); + List employeeList = getSalaryEmployeeService(user).getEmployeeByIds(Collections.singletonList(po.getEmployeeId())); if (CollectionUtils.isEmpty(employeeList)) { throw new SalaryRunTimeException("员工信息不存在"); } @@ -519,13 +517,12 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd long currentEmployeeId = user.getUID(); Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); SpecialAddDeductionBiz SpecialAddDeductionBiz = new SpecialAddDeductionBiz(); - EmployBiz employBiz = new EmployBiz(); //查询对于人员信息导入筛选的全局配置 SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; //人员信息 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService(user).listEmployee(); // 获取所有个税扣缴义务人 Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); // 查询已有数据 diff --git a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java index b70fb2a91..680eb9337 100644 --- a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java @@ -98,8 +98,6 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM return ServiceUtil.getService(SIArchivesServiceImpl.class, user); } - private EmployBiz employBiz = new EmployBiz(); - private List listByTaxAgentIds(List taxAgentIds) { if (CollectionUtils.isEmpty(taxAgentIds)) { return Lists.newArrayList(); @@ -233,17 +231,17 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM // 查询人员信息 List employeeIds = taxAgentManageRanges.stream().filter(e -> Objects.equals(e.getTargetType(), TargetTypeEnum.EMPLOYEE.getValue())).map(TaxAgentManageRangePO::getTargetId).collect(Collectors.toList()); // List employeeComInfos = comInfoCache.getCacheList(HrmEmployeeComInfo.class, employeeIds); - List employeeComInfos = employBiz.getEmployeeByIdsAll(employeeIds); + List employeeComInfos = getSalaryEmployeeService().getEmployeeByIdsAll(employeeIds); // 查询部门信息 List departmentIds = taxAgentManageRanges.stream().filter(e -> Objects.equals(e.getTargetType(), TargetTypeEnum.DEPT.getValue())).map(TaxAgentManageRangePO::getTargetId).collect(Collectors.toList()); - List departmentComInfos = employBiz.getDeptInfoList(departmentIds); + List departmentComInfos = getSalaryEmployeeService().getDeptInfoList(departmentIds); // 查询分部信息 List subDepartmentIds = taxAgentManageRanges.stream().filter(e -> Objects.equals(e.getTargetType(), TargetTypeEnum.SUBCOMPANY.getValue())).map(TaxAgentManageRangePO::getTargetId).collect(Collectors.toList()); - List subDepartmentComInfos = employBiz.getSubCompanyInfoList(subDepartmentIds); + List subDepartmentComInfos = getSalaryEmployeeService().getSubCompanyInfoList(subDepartmentIds); // 查询岗位信息 List positionIds = taxAgentManageRanges.stream().filter(e -> Objects.equals(e.getTargetType(), TargetTypeEnum.POSITION.getValue())).map(TaxAgentManageRangePO::getTargetId).collect(Collectors.toList()); - List positionComInfos = employBiz.listPositionInfo(positionIds); + List positionComInfos = getSalaryEmployeeService().listPositionInfo(positionIds); // 分页参数 PageInfo dtoPage = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), TaxAgentManageRangeListDTO.class); // 查询人员状态 @@ -589,7 +587,7 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM int errorCount = 0; //人员信息 - List employees = employBiz.listEmployee(); + List employees = getSalaryEmployeeService().listEmployee(); // 错误excel内容 List errorData = new ArrayList<>(); diff --git a/src/com/engine/salary/service/impl/TaxDeclarationDetailServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationDetailServiceImpl.java index 1bf1bc94c..a21906a39 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationDetailServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationDetailServiceImpl.java @@ -110,7 +110,7 @@ public class TaxDeclarationDetailServiceImpl extends Service implements TaxDecla // 查询个税申报表明细 List taxDeclarationDetailPOS = listByTaxDeclarationIdAndEmployeeIds(queryParam.getTaxDeclarationId(), employeeIdPage); // 查询人员 - List simpleEmployees = getSalaryEmployeeService().listByIds(employeeIdPage); + List simpleEmployees = getSalaryEmployeeService().getEmployeeByIdsAll(employeeIdPage); // List simpleEmployees = hrmCommonEmployeeService.getEmployeeByIds(employeeIdPage.getRecords(), tenantKey); // 转换成列表dto TaxDeclarationBO.buildDetailListDTO(queryParam.getTaxDeclarationId(), dtoPage, taxDeclarationDetailPOS, simpleEmployees); @@ -181,7 +181,7 @@ public class TaxDeclarationDetailServiceImpl extends Service implements TaxDecla List employeeIds = taxDeclarationEmployees.stream().map(TaxDeclarationEmployeeDTO::getEmployeeId).collect(Collectors.toList()); List taxDeclarationDetailPOS = listByTaxDeclarationIdAndEmployeeIds(taxDeclarationId, employeeIds); // 查询人员信息 - List simpleEmployees = getSalaryEmployeeService().listByIds(employeeIds); + List simpleEmployees = getSalaryEmployeeService().getEmployeeByIdsAll(employeeIds); // 转换成列表dto return TaxDeclarationDetailBO.convert2ListDTO4Labor(taxDeclarationDetailPOS, taxDeclarationEmployees, simpleEmployees); } @@ -199,7 +199,7 @@ public class TaxDeclarationDetailServiceImpl extends Service implements TaxDecla List employeeIds = taxDeclarationEmployees.stream().map(TaxDeclarationEmployeeDTO::getEmployeeId).collect(Collectors.toList()); List taxDeclarationDetailPOS = listByTaxDeclarationIdAndEmployeeIds(taxDeclarationId, employeeIds); // 查询人员信息 - List simpleEmployees = getSalaryEmployeeService().listByIds(employeeIds); + List simpleEmployees = getSalaryEmployeeService().getEmployeeByIdsAll(employeeIds); // 转换成列表dto return TaxDeclarationDetailBO.convert2ListDTO4Annual(taxDeclarationDetailPOS, taxDeclarationEmployees, simpleEmployees); } diff --git a/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java index 150ccfa06..526fbfcb5 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java @@ -107,7 +107,7 @@ public class SalaryAcctEmployeeWrapper extends Service { } // 查询人员信息 List employeeIds = list.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); - List simpleEmployees = getSalaryEmployeeService(user).listByIds(employeeIds); + List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); // 查询个税扣缴义务人 List taxAgentIds = list.stream().map(SalaryAcctEmployeePO::getTaxAgentId).collect(Collectors.toList()); List taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds); diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index 66f83facf..1d4e98899 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -15,14 +15,8 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.exception.SalaryRunTimeException; -import com.engine.salary.service.SalaryAcctEmployeeService; -import com.engine.salary.service.SalaryAcctRecordService; -import com.engine.salary.service.SalarySendService; -import com.engine.salary.service.SalarySobService; -import com.engine.salary.service.impl.SalaryAcctEmployeeServiceImpl; -import com.engine.salary.service.impl.SalaryAcctRecordServiceImpl; -import com.engine.salary.service.impl.SalarySendServiceImpl; -import com.engine.salary.service.impl.SalarySobServiceImpl; +import com.engine.salary.service.*; +import com.engine.salary.service.impl.*; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -62,6 +56,10 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord return ServiceUtil.getService(SalarySendServiceImpl.class, user); } + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + // private ComInfoCache comInfoCache; public PageInfo listPage(SalaryAcctRecordQueryParam queryParam) { @@ -70,7 +68,6 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord SalarySobUtil.handleEmployeeStatusHistory(); // 处理工资单发放历史数据 getSalarySendService(user).handleHistory(); - EmployBiz employBiz = new EmployBiz(); // 查询薪资核算记录(分页) PageInfo page = getSalaryAcctRecordService(user).listPageByParam(queryParam); PageInfo dtoPage = new PageInfo(SalaryAcctRecordListDTO.class); @@ -84,7 +81,7 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord List salarySobPOS = getSalarySobService(user).listByIds(salarySobIds); // 查询薪资核算记录的创建人员的人员信息 List employeeIds = SalaryEntityUtil.properties(list, SalaryAcctRecordPO::getCreator, Collectors.toList()); - List employeeComInfos = employBiz.getEmployeeByIdsAll(employeeIds); + List employeeComInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); // 查询薪资核算人数的数量 Set salaryAcctRecordIds = SalaryEntityUtil.properties(list, SalaryAcctRecordPO::getId); List salaryAcctEmployeeCountDTOS = getSalaryAcctEmployeeService(user).countBySalaryAcctRecordId(salaryAcctRecordIds); diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 300f0dda2..10c83de05 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -53,7 +53,7 @@ public class SalaryArchiveWrapper extends Service { return ServiceUtil.getService(SalaryArchiveItemServiceImpl.class, user); } - private EmployBiz employeeService = new EmployBiz(); + private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); @@ -67,6 +67,10 @@ public class SalaryArchiveWrapper extends Service { return ServiceUtil.getService(SalaryArchiveExcelServiceImpl.class, user); } + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + /** * 薪资档案列表(分页) @@ -320,7 +324,7 @@ public class SalaryArchiveWrapper extends Service { throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel(100463, "薪资档案不存在") + "[id:%s]", salaryArchiveId)); } - List employeeList = employeeService.getEmployeeByIdsAll(Collections.singletonList(po.getEmployeeId())); + List employeeList = getSalaryEmployeeService(user).getEmployeeByIdsAll(Collections.singletonList(po.getEmployeeId())); if (CollectionUtils.isEmpty(employeeList)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100465, "薪资档案员工信息不存在")); } diff --git a/src/com/engine/salary/wrapper/TaxAgentSubAdminWrapper.java b/src/com/engine/salary/wrapper/TaxAgentSubAdminWrapper.java index b9025ead9..65341f888 100644 --- a/src/com/engine/salary/wrapper/TaxAgentSubAdminWrapper.java +++ b/src/com/engine/salary/wrapper/TaxAgentSubAdminWrapper.java @@ -1,5 +1,6 @@ package com.engine.salary.wrapper; +import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.EmployBiz; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -9,8 +10,10 @@ import com.engine.salary.entity.taxagent.param.*; import com.engine.salary.entity.taxagent.po.TaxAgentSubAdminPO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentManageRangeService; import com.engine.salary.service.TaxAgentSubAdminService; +import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -34,12 +37,14 @@ import java.util.stream.Collectors; **/ public class TaxAgentSubAdminWrapper extends Service { + private SalaryEmployeeService getSalaryEmployeeService() { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + private TaxAgentSubAdminService taxAgentSubAdminService; private TaxAgentManageRangeService taxAgentManageRangeService; // private HrmCommonEmployeeService hrmCommonEmployeeService; - private EmployBiz employBiz = new EmployBiz(); - /** * 获取分管理员列表 * @@ -51,7 +56,7 @@ public class TaxAgentSubAdminWrapper extends Service { List list = taxAgentSubAdminService.listByTaxAgentIds(Collections.singletonList(queryParam.getTaxAgentId())); String range = SalaryI18nUtil.getI18nLabel(106290, "详情"); - List subAdminList = employBiz.getEmployeeByIds(list.stream().map(TaxAgentSubAdminPO::getEmployeeId).distinct().collect(Collectors.toList())); + List subAdminList = getSalaryEmployeeService().getEmployeeByIds(list.stream().map(TaxAgentSubAdminPO::getEmployeeId).distinct().collect(Collectors.toList())); List records = TaxAgentBO.convertToSubAdminListDTO(list, range, subAdminList); PageInfo listPage = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), TaxAgentSubAdminListDTO.class); @@ -95,7 +100,7 @@ public class TaxAgentSubAdminWrapper extends Service { taxAgentSubAdminBaseFormDTO.setDescription(taxAgentSubAdmin.getRemark()); TaxAgentEmployeeOptionDTO taxAgentEmployee = new TaxAgentEmployeeOptionDTO(); taxAgentEmployee.setId(taxAgentSubAdmin.getEmployeeId()); - DataCollectionEmployee employee = employBiz.getEmployeeById(taxAgentEmployee.getId()); + DataCollectionEmployee employee = getSalaryEmployeeService().getEmployeeById(taxAgentEmployee.getId()); taxAgentEmployee.setContent(employee == null ? "" : employee.getUsername()); taxAgentSubAdminBaseFormDTO.setSubAdminUser(Collections.singletonList(taxAgentEmployee)); diff --git a/src/com/engine/salary/wrapper/TaxAgentWrapper.java b/src/com/engine/salary/wrapper/TaxAgentWrapper.java index 9f9fa2f1f..86df32a70 100644 --- a/src/com/engine/salary/wrapper/TaxAgentWrapper.java +++ b/src/com/engine/salary/wrapper/TaxAgentWrapper.java @@ -146,7 +146,7 @@ public class TaxAgentWrapper extends Service { List list = page.getList(); List taxAgentIds = list.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); List taxAgentAdmins = getTaxAgentAdminService(user).listByTaxAgentIds(taxAgentIds); - List adminList = getSalaryEmployeeService(user).listByIds(taxAgentAdmins.stream().map(TaxAgentAdminPO::getEmployeeId).distinct().collect(Collectors.toList())); + List adminList = getSalaryEmployeeService(user).getEmployeeByIdsAll(taxAgentAdmins.stream().map(TaxAgentAdminPO::getEmployeeId).distinct().collect(Collectors.toList())); listPage.setList(TaxAgentBO.convertToTableListDTO(page.getList(), null, taxAgentAdmins, adminList, setLabel)); } else { listPage.setList(TaxAgentBO.convertToTableListDTO(page.getList(), null, setLabel)); diff --git a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java index b3f4a23c5..c29ee4f46 100644 --- a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java @@ -2,7 +2,6 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.EmployBiz; import com.engine.salary.component.WeaFormOption; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.taxagent.po.TaxAgentPO; @@ -14,8 +13,10 @@ import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryPara import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.TaxDeclarationService; +import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.service.impl.TaxDeclarationServiceImpl; import com.engine.salary.util.SalaryDateUtil; @@ -48,6 +49,10 @@ public class TaxDeclarationWrapper extends Service { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + /** * 个税申报表列表 * @@ -56,7 +61,6 @@ public class TaxDeclarationWrapper extends Service { * @return */ public PageInfo listPage(TaxDeclarationListQueryParam queryParam) { - EmployBiz employBiz = new EmployBiz(); // 询个税申报表(分页) PageInfo page = getTaxDeclarationService(user).listPageByParam(queryParam); PageInfo dtoPage = new PageInfo(TaxDeclarationListDTO.class); @@ -67,7 +71,7 @@ public class TaxDeclarationWrapper extends Service { if (CollectionUtils.isNotEmpty(list)) { // 查询人员 List employeeIds = SalaryEntityUtil.properties(list, TaxDeclarationPO::getCreator, Collectors.toList()); - List employeeComInfos = employBiz.getEmployeeByIdsAll(employeeIds); + List employeeComInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); // 查询个税扣缴义务人 Set taxAgentIds = SalaryEntityUtil.properties(list, TaxDeclarationPO::getTaxAgentId); List taxAgentPOS = getTaxDeclarationService(user).countByTaxDeclarationId(taxAgentIds); From 5ec4f9e649291dd32b57acf1557ef396e8f288ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 13 Apr 2023 09:32:20 +0800 Subject: [PATCH 012/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formlua/core/AttendanceQlExpress.java | 316 + .../salary/formlua/core/QLExpressContext.java | 19 + .../formlua/core/exception/ErrorType.java | 69 + .../core/exception/ExcelRunTimeException.java | 24 + .../formlua/data/ExpressDataService.java | 85 + .../formlua/data/ExpressDataServiceImpl.java | 662 ++ .../salary/formlua/data/func/EqOperator.java | 117 + .../formlua/data/func/LessMoreOperator.java | 115 + .../salary/formlua/data/func/LogicFunc.java | 99 + .../formlua/data/func/NotEqOperator.java | 112 + .../formlua/data/func/QLExpressContext.java | 47 + .../formlua/data/func/QlExpressUtil.java | 148 + .../entity/parameter/DateAndString.java | 5 + .../formlua/entity/parameter/ExcelFunc.java | 138 + .../formlua/entity/parameter/ExcelFuncs.java | 495 ++ .../entity/parameter/FormulaContext.java | 35 + .../entity/parameter/FuncDescUtil.java | 132 + .../formlua/entity/parameter/FuncNames.java | 20 + .../formlua/entity/parameter/IllegalList.java | 19 + .../entity/parameter/ParamContext.java | 30 + .../entity/parameter/ParamFactory.java | 127 + .../formlua/entity/parameter/ParamType.java | 15 + .../formlua/entity/parameter/ReturnType.java | 13 + .../entity/parameter/ThreadLocalData.java | 59 + .../formlua/entity/standard/AggFunc.java | 8 + .../entity/standard/ExcelModuleFixField.java | 34 + .../formlua/entity/standard/ExcelPage.java | 56 + .../formlua/entity/standard/ExcelResult.java | 87 + .../entity/standard/FormulaCategory.java | 58 + .../entity/standard/FormulaDataSource.java | 37 + .../entity/standard/FormulaFilterData.java | 303 + .../standard/FormulaModuleCategory.java | 34 + .../formlua/func/compare/CommonOper.java | 71 + .../formlua/func/compare/Compareutils.java | 310 + .../formlua/func/compare/EqOperator.java | 243 + .../func/compare/GreaterEqOperator.java | 104 + .../formlua/func/compare/GreaterOperator.java | 105 + .../formlua/func/compare/InOperator.java | 97 + .../formlua/func/compare/LessEqOperator.java | 103 + .../formlua/func/compare/LessOperator.java | 104 + .../formlua/func/compare/NotEqueOperator.java | 102 + .../formlua/func/compare/OperatorInTest.java | 38 + .../formlua/func/compare/WOperatorAdd.java | 60 + .../formlua/func/compare/WOperatorDiv.java | 66 + .../formlua/func/compare/WOperatorMulti.java | 55 + .../formlua/func/compare/WOperatorReduce.java | 59 + .../formlua/func/date/DateTimeService.java | 92 + .../func/date/DateTimeServiceImpl.java | 1324 +++ .../func/date/DateTimeTestServiceImpl.java | 1208 +++ .../formlua/func/finance/FinanceService.java | 15 + .../func/finance/FinanceServiceImpl.java | 119 + .../func/finance/FinanceServiceTestImpl.java | 45 + .../formlua/func/find/FindFuncsService.java | 31 + .../func/find/FindFuncsServiceImpl.java | 193 + .../func/find/FindFuncsTestServiceImpl.java | 166 + .../salary/formlua/func/logic/IfOperator.java | 97 + .../formlua/func/logic/LogicService.java | 17 + .../formlua/func/logic/LogicServiceImpl.java | 495 ++ .../salary/formlua/func/logic/LogicUtils.java | 110 + .../formlua/func/math/MathFuncsService.java | 79 + .../func/math/MathFuncsServiceImpl.java | 468 ++ .../func/math/MathFuncsServiceTestImpl.java | 486 ++ .../formlua/func/string/ExtractType.java | 7 + .../func/string/StringFormulaService.java | 186 + .../func/string/StringFormulaServiceImpl.java | 820 ++ .../string/StringFormulaServiceTestImpl.java | 555 ++ .../salary/formlua/util/CompareUtil.java | 24 + .../engine/salary/formlua/util/DateUtil.java | 212 + .../engine/salary/formlua/util/ErrorUtil.java | 33 + .../salary/formlua/util/ExcelParamUtil.java | 1104 +++ .../salary/formlua/util/ExcelResult.java | 36 + .../formlua/util/ExcelStandardUtil.java | 492 ++ .../salary/formlua/util/ExecuteTest.java | 47 + .../formlua/util/ExpressRegularUtil.java | 227 + .../salary/formlua/util/IgnoreFilter.java | 21 + .../formlua/util/IgnoreParamFilter.java | 769 ++ .../salary/formlua/util/NativePlace.java | 7162 +++++++++++++++++ .../salary/formlua/util/RegularUtil.java | 241 + .../engine/salary/formlua/util/SortUtil.java | 49 + .../engine/salary/formlua/util/TestUtil.java | 403 + .../formlua/util/standard/ExcelDataType.java | 8 + .../formlua/util/standard/ExcelTransUtil.java | 320 + 82 files changed, 22696 insertions(+) create mode 100644 src/com/engine/salary/formlua/core/AttendanceQlExpress.java create mode 100644 src/com/engine/salary/formlua/core/QLExpressContext.java create mode 100644 src/com/engine/salary/formlua/core/exception/ErrorType.java create mode 100644 src/com/engine/salary/formlua/core/exception/ExcelRunTimeException.java create mode 100644 src/com/engine/salary/formlua/data/ExpressDataService.java create mode 100644 src/com/engine/salary/formlua/data/ExpressDataServiceImpl.java create mode 100644 src/com/engine/salary/formlua/data/func/EqOperator.java create mode 100644 src/com/engine/salary/formlua/data/func/LessMoreOperator.java create mode 100644 src/com/engine/salary/formlua/data/func/LogicFunc.java create mode 100644 src/com/engine/salary/formlua/data/func/NotEqOperator.java create mode 100644 src/com/engine/salary/formlua/data/func/QLExpressContext.java create mode 100644 src/com/engine/salary/formlua/data/func/QlExpressUtil.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/DateAndString.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/ExcelFunc.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/FormulaContext.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/FuncNames.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/IllegalList.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/ParamContext.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/ParamFactory.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/ParamType.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/ReturnType.java create mode 100644 src/com/engine/salary/formlua/entity/parameter/ThreadLocalData.java create mode 100644 src/com/engine/salary/formlua/entity/standard/AggFunc.java create mode 100644 src/com/engine/salary/formlua/entity/standard/ExcelModuleFixField.java create mode 100644 src/com/engine/salary/formlua/entity/standard/ExcelPage.java create mode 100644 src/com/engine/salary/formlua/entity/standard/ExcelResult.java create mode 100644 src/com/engine/salary/formlua/entity/standard/FormulaCategory.java create mode 100644 src/com/engine/salary/formlua/entity/standard/FormulaDataSource.java create mode 100644 src/com/engine/salary/formlua/entity/standard/FormulaFilterData.java create mode 100644 src/com/engine/salary/formlua/entity/standard/FormulaModuleCategory.java create mode 100644 src/com/engine/salary/formlua/func/compare/CommonOper.java create mode 100644 src/com/engine/salary/formlua/func/compare/Compareutils.java create mode 100644 src/com/engine/salary/formlua/func/compare/EqOperator.java create mode 100644 src/com/engine/salary/formlua/func/compare/GreaterEqOperator.java create mode 100644 src/com/engine/salary/formlua/func/compare/GreaterOperator.java create mode 100644 src/com/engine/salary/formlua/func/compare/InOperator.java create mode 100644 src/com/engine/salary/formlua/func/compare/LessEqOperator.java create mode 100644 src/com/engine/salary/formlua/func/compare/LessOperator.java create mode 100644 src/com/engine/salary/formlua/func/compare/NotEqueOperator.java create mode 100644 src/com/engine/salary/formlua/func/compare/OperatorInTest.java create mode 100644 src/com/engine/salary/formlua/func/compare/WOperatorAdd.java create mode 100644 src/com/engine/salary/formlua/func/compare/WOperatorDiv.java create mode 100644 src/com/engine/salary/formlua/func/compare/WOperatorMulti.java create mode 100644 src/com/engine/salary/formlua/func/compare/WOperatorReduce.java create mode 100644 src/com/engine/salary/formlua/func/date/DateTimeService.java create mode 100644 src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java create mode 100644 src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java create mode 100644 src/com/engine/salary/formlua/func/finance/FinanceService.java create mode 100644 src/com/engine/salary/formlua/func/finance/FinanceServiceImpl.java create mode 100644 src/com/engine/salary/formlua/func/finance/FinanceServiceTestImpl.java create mode 100644 src/com/engine/salary/formlua/func/find/FindFuncsService.java create mode 100644 src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java create mode 100644 src/com/engine/salary/formlua/func/find/FindFuncsTestServiceImpl.java create mode 100644 src/com/engine/salary/formlua/func/logic/IfOperator.java create mode 100644 src/com/engine/salary/formlua/func/logic/LogicService.java create mode 100644 src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java create mode 100644 src/com/engine/salary/formlua/func/logic/LogicUtils.java create mode 100644 src/com/engine/salary/formlua/func/math/MathFuncsService.java create mode 100644 src/com/engine/salary/formlua/func/math/MathFuncsServiceImpl.java create mode 100644 src/com/engine/salary/formlua/func/math/MathFuncsServiceTestImpl.java create mode 100644 src/com/engine/salary/formlua/func/string/ExtractType.java create mode 100644 src/com/engine/salary/formlua/func/string/StringFormulaService.java create mode 100644 src/com/engine/salary/formlua/func/string/StringFormulaServiceImpl.java create mode 100644 src/com/engine/salary/formlua/func/string/StringFormulaServiceTestImpl.java create mode 100644 src/com/engine/salary/formlua/util/CompareUtil.java create mode 100644 src/com/engine/salary/formlua/util/DateUtil.java create mode 100644 src/com/engine/salary/formlua/util/ErrorUtil.java create mode 100644 src/com/engine/salary/formlua/util/ExcelParamUtil.java create mode 100644 src/com/engine/salary/formlua/util/ExcelResult.java create mode 100644 src/com/engine/salary/formlua/util/ExcelStandardUtil.java create mode 100644 src/com/engine/salary/formlua/util/ExecuteTest.java create mode 100644 src/com/engine/salary/formlua/util/ExpressRegularUtil.java create mode 100644 src/com/engine/salary/formlua/util/IgnoreFilter.java create mode 100644 src/com/engine/salary/formlua/util/IgnoreParamFilter.java create mode 100644 src/com/engine/salary/formlua/util/NativePlace.java create mode 100644 src/com/engine/salary/formlua/util/RegularUtil.java create mode 100644 src/com/engine/salary/formlua/util/SortUtil.java create mode 100644 src/com/engine/salary/formlua/util/TestUtil.java create mode 100644 src/com/engine/salary/formlua/util/standard/ExcelDataType.java create mode 100644 src/com/engine/salary/formlua/util/standard/ExcelTransUtil.java diff --git a/src/com/engine/salary/formlua/core/AttendanceQlExpress.java b/src/com/engine/salary/formlua/core/AttendanceQlExpress.java new file mode 100644 index 000000000..4b7f07d34 --- /dev/null +++ b/src/com/engine/salary/formlua/core/AttendanceQlExpress.java @@ -0,0 +1,316 @@ +package com.engine.salary.formlua.core; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.entity.parameter.FuncNames; +import com.engine.salary.formlua.func.compare.*; +import com.engine.salary.formlua.func.date.DateTimeService; +import com.engine.salary.formlua.func.finance.FinanceService; +import com.engine.salary.formlua.func.find.FindFuncsService; +import com.engine.salary.formlua.func.logic.LogicService; +import com.engine.salary.formlua.func.math.MathFuncsService; +import com.engine.salary.formlua.func.string.StringFormulaService; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.engine.salary.formlua.util.ExpressRegularUtil; +import com.ql.util.express.DynamicParamsUtil; +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.IExpressContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.InvocationTargetException; +import java.util.Map; +import java.util.regex.PatternSyntaxException; + +/** + * 考勤执行业务类 + */ +public class AttendanceQlExpress { + + public static ExpressRunner runner; + + static { + runner = new ExpressRunner(true, false); + } + + private static boolean isInitialRunner = false; + + +// AggregationFunc aggregationFunc; + + LogicService logicService; + + DateTimeService dateTimeService; + + StringFormulaService stringFormulaService; + + MathFuncsService mathFuncsService; + + FindFuncsService findFuncsService; + +// private ExcelFuncs excelFuncs; +// +// private HrmDbService hrmDbService; + + private FinanceService financeService; +// private RemoteExcelformulaService remoteExcelformulaService; + private String errorInfo; + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + + /** + * @param statement 执行语句 + * @param context 上下文 + * @throws Exception + */ + public Object execute(String statement, Map context) + throws Exception { + String expressSql = statement; + initRunner(runner); + DynamicParamsUtil.supportDynamicParams = true; + //初步的语法的格式校验 + IExpressContext expressContext = new QLExpressContext(context); +// ThreadLocalData threadLocalData=new ThreadLocalData(); +// threadLocalData.setExpressContext(context); +// ParamContext.get().setValue("formulaParam",threadLocalData); +// ParamContext.get().setValue("currentUser",simpleEmployee); + Object obj = null; + try { + ExpressRegularUtil.checkFuncExpress(expressSql); + expressSql = expressSql.replaceAll("\\{", ""); + expressSql = expressSql.replaceAll("\\}", ""); + obj = runner.execute(expressSql, expressContext, null, true, false); + JSONObject resultObj = new JSONObject(); + if (obj != null) { + resultObj.put("excute", true); + if (obj instanceof DataType) { + DataType dataType = (DataType) obj; + resultObj.put("data", dataType.getContent()); + resultObj.put("boolData", dataType.getContent()); + } else { + resultObj.put("data", obj); + resultObj.put("boolData", obj); + } + } else { + resultObj.put("excute", false); + } + return resultObj; + } catch (Exception e) { + logger.error("err", e); + String jsonError = e.getMessage(); + if (e instanceof PatternSyntaxException) { + PatternSyntaxException patternSyntaxException = (PatternSyntaxException) e; + jsonError = patternSyntaxException.getDescription(); + } else { + if (null != e.getCause()) { + jsonError = e.getCause().getMessage(); + if (e.getCause() instanceof InvocationTargetException) { + InvocationTargetException invocationTargetException = (InvocationTargetException) e.getCause(); + jsonError = invocationTargetException.getTargetException().getMessage(); + } + } + } + JSONObject errorJSON = new JSONObject(); + if (null == jsonError) { + errorJSON.put("error", "参数为空"); + obj = errorJSON; + + JSONObject resultObj = new JSONObject(); + resultObj.put("data", ""); + resultObj.put("excute", true); + return resultObj; + } + try { + errorJSON = JSON.parseObject(jsonError); + } catch (Exception ex) { + errorJSON.put("error", "参数为空"); + obj = errorJSON; + + JSONObject resultObj = new JSONObject(); + resultObj.put("data", ""); + resultObj.put("excute", true); + return resultObj; + } + if (!(e instanceof PatternSyntaxException)) { + String func = errorJSON.getString("func"); + int funcIdx = errorJSON.getInteger("errorFunc"); + String[] funcSplit = statement.split(func); + int startError = 1; + int loopLength = funcSplit.length - funcIdx; + for (int i = 0; i < loopLength; i++) { + if (loopLength > 1 && i == 0) { + startError += funcSplit[i].length() + func.length(); + } else { + startError += funcSplit[i].length(); + } + } + int startIdx = startError; + int endIdx = startError + func.length() - 1; + Map replaceMap = ExcelParamUtil.replaceErrorPlace(startIdx, endIdx, func, expressSql, context); + errorJSON.put("errorIdx", replaceMap.get("startIdx")); + errorJSON.put("errorEndIdx", replaceMap.get("endIdx")); + + } + if (errorJSON.containsKey("error") && null != errorJSON.getString("msg") && !ExpressRegularUtil.isContainChinese(errorJSON.getString("msg"))) { + errorJSON.put("error", "校验失败或参数错误"); + } + + errorJSON.remove("errorFunc"); + errorJSON.remove("formula"); + errorJSON.remove("func"); + errorJSON.remove("errorData"); + obj = errorJSON; + } + return obj; + } + + private void initRunner(ExpressRunner runner) { + if (isInitialRunner) { + return; + } + synchronized (runner) { + if (isInitialRunner) { + return; + } + try { + //比较函数 + runner.replaceOperator("=", new EqOperator("=")); + runner.replaceOperator("==", new EqOperator("=")); + runner.replaceOperator("!=", new NotEqueOperator("!=")); + + runner.replaceOperator(">", new GreaterOperator(">")); + runner.replaceOperator("<", new LessOperator("<")); + runner.replaceOperator(">=", new GreaterEqOperator(">=")); + runner.replaceOperator("<=", new LessEqOperator("<=")); + + runner.replaceOperator("+", new WOperatorAdd("+")); + runner.replaceOperator("-", new WOperatorReduce("-")); + runner.replaceOperator("*", new WOperatorMulti("*")); + runner.replaceOperator("/", new WOperatorDiv("/")); + //逻辑函数 + runner.replaceOperator("IN", new InOperator("in")); + runner.replaceOperator("IF", new InOperator("IF")); + runner.addFunctionOfServiceMethod(FuncNames.AND.toString(), logicService, FuncNames.AND.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.OR.toString(), logicService, FuncNames.OR.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.LIKE.toString(), logicService, FuncNames.LIKE.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.TRUE.toString(), logicService, FuncNames.TRUE.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.FALSE.toString(), logicService, FuncNames.FALSE.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.ISEMPTY.toString(), logicService, FuncNames.ISEMPTY.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.NOT.toString(), logicService, FuncNames.NOT.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.IFS.toString(), logicService, FuncNames.IFS.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.FIND.toString(), logicService, FuncNames.FIND.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.SWITCH.toString(), logicService, FuncNames.SWITCH.getName(), new Class[]{Object[].class}, ""); + + //日期函数 + runner.addFunctionOfServiceMethod("DATEDIFF", dateTimeService, "dateDiff", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("DATEADD", dateTimeService, "dateAdd", new Class[]{Object[].class}, errorInfo); + runner.addFunctionOfServiceMethod("YEAR", dateTimeService, "year", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("MONTH", dateTimeService, "month", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("DAY", dateTimeService, "day", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("HOUR", dateTimeService, "hour", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("MINUTE", dateTimeService, "minute", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("SECOND", dateTimeService, "seconds", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("WEEKNUM", dateTimeService, "weekNum", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("WEEKDAY", dateTimeService, "weekDay", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("NOW", dateTimeService, "now", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("TODAY", dateTimeService, "today", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("DATEFORMAT", dateTimeService, "dateFormat", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("DAYOFMONTH", dateTimeService, "dayOfMonth", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("EOMONTH", dateTimeService, "eoMonth", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("NETWORKDAYSPI", dateTimeService, "workdayIntl", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("CURRYEAR", dateTimeService, "currYear", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("CURRMONTH", dateTimeService, "currMonth", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("CURRDAY", dateTimeService, "currDay", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("CURRWEEK", dateTimeService, "currWeek", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("CURRHOUR", dateTimeService, "currHour", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("CURRMINUTE", dateTimeService, "currMinute", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("CURRSECOND", dateTimeService, "currSecond", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("MAXDATE", dateTimeService, "maxDate", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("MINDATE", dateTimeService, "minDate", new Class[]{Object[].class}, ""); + + //聚合函数 +// runner.addFunctionOfServiceMethod("COUNT", aggregationFunc, "counts", new Class[]{Object[].class}, "COUNT参数错误"); +// runner.addFunctionOfServiceMethod("AVG", aggregationFunc, "avgs", new Class[]{Object[].class}, "AVG参数错误"); +// runner.addFunctionOfServiceMethod("SUM", aggregationFunc, "sumNumber", new Class[]{Object[].class}, "SUM参数错误"); +// runner.addFunctionOfServiceMethod("MAX", aggregationFunc, "maxNumber", new Class[]{Object[].class}, "MAX参数错误"); +// runner.addFunctionOfServiceMethod("MIN", aggregationFunc, "minNumber", new Class[]{Object[].class}, "MIN参数错误"); + + //字符串函数 + runner.addFunctionOfServiceMethod("CONCAT", stringFormulaService, "concatString", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("SEARCH", stringFormulaService, "search", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("TEXT", stringFormulaService, "text", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("PAD", stringFormulaService, "pad", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("REPLACE", stringFormulaService, "replace", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("VALUE", stringFormulaService, "value", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("LEN", stringFormulaService, "len", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("LEFT", stringFormulaService, "left", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("RIGHT", stringFormulaService, "right", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("MID", stringFormulaService, "mid", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("REPT", stringFormulaService, "repeat", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("TRIM", stringFormulaService, "trim", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("SCORE", stringFormulaService, "score", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("IDCARD", stringFormulaService, "idCard", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.ISSTRING.toString(), stringFormulaService, FuncNames.ISSTRING.getName(), new Class[]{Object[].class}, ""); + + //数学函数 + runner.addFunctionOfServiceMethod("ROUNDUP", mathFuncsService, "roundUp", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("ROUNDDOWN", mathFuncsService, "roundDown", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("ROUND", mathFuncsService, "round", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.AGGREGATION.toString(), mathFuncsService, FuncNames.AGGREGATION.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.MOD.toString(), mathFuncsService, FuncNames.MOD.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.TRUNC.toString(), mathFuncsService, FuncNames.TRUNC.getName(), new Class[]{Object.class, Object.class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.ISINT.toString(), mathFuncsService, FuncNames.ISINT.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.ISNUMBER.toString(), mathFuncsService, FuncNames.ISNUMBER.getName(), new Class[]{Object[].class}, ""); + + //查找函数 + runner.addFunctionOfServiceMethod(FuncNames.CHOOSE.toString(), findFuncsService, "chooseOne", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.MATCH.toString(), findFuncsService, "match", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.VLOOKUPS.toString(), findFuncsService, "vlookups", new Class[]{Object[].class}, ""); + + //数据库函数-hrm +// runner.addFunctionOfServiceMethod(FuncNames.GETHRMNAME.toString(), hrmDbService, FuncNames.GETHRMNAME.getName(), new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETHRMMOBILE.toString(), hrmDbService, FuncNames.GETHRMMOBILE.getName(), new Class[]{Object[].class}, ""); + + //财务函数 + runner.addFunctionOfServiceMethod(FuncNames.GETMONEY.toString(), financeService, FuncNames.GETMONEY.getName(), new Class[]{Object[].class}, ""); + + //数据库函数-hrm +// runner.addFunctionOfServiceMethod(FuncNames.GETHRMLOGINID.toString(), hrmDbService, "getHrmLoginId", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETHRMWORKCODE.toString(), hrmDbService, "getHrmWorkcode", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETHRMMANAGER.toString(), hrmDbService, "getHrmManager", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETHRMALLMANAGER.toString(), hrmDbService, "getHrmAllManager", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETHRMDEPARTMENT.toString(), hrmDbService, "getHrmDepartment", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETHRMSUBCOMPANY.toString(), hrmDbService, "getHrmSubcompany", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETDEPARTMENTNAME.toString(), hrmDbService, "getDepartmentName", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETDEPARTMENTCODE.toString(), hrmDbService, "getDepartmentCode", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETSUPERDEPARTMENT.toString(), hrmDbService, "getSuperDepartment", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETALLSUPERDEPARTMENT.toString(), hrmDbService, "getAllSuperDepartment", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETSUBCOMPANYNAME.toString(), hrmDbService, "getSubcompanyName", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETSUBCOMPANYCODE.toString(), hrmDbService, "getSubcompanyCode", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETSUPERSUBCOMPANY.toString(), hrmDbService, "getSuperSubcompany", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.GETALLSUPERSUBCOMPANY.toString(), hrmDbService, "getAllSuperSubcompany", new Class[]{Object[].class}, ""); + + //加载模块自定义函数 +// try { +// List otherFuncList=excelFuncs.getOtherFuncs(); +// if(otherFuncList!=null && otherFuncList.size()>0){ +// //为每个方法实例化一个ExcelExtendFuncService +// for (ExcelFunc excelFunc:otherFuncList){ +// //每个接口调度类实例化时指定模块和函数名 +// ExcelExtendFuncService excelExtendFuncService=new ExcelExtendFuncServiceImpl(excelFunc.getModule(),excelFunc.getName()); +// //将自定义函数放入context上下文中 +// runner.addFunctionOfServiceMethod(excelFunc.getName(),excelExtendFuncService, RpcMethod.execute.toString(),new Class[]{Object[].class},""); +// } +// } +// } catch (Exception e) { +// logger.error("err",e); +// } + } catch (Exception e) { + logger.error("err", e); + throw new RuntimeException("初始化失败表达式"); + } + } + isInitialRunner = true; + } +} diff --git a/src/com/engine/salary/formlua/core/QLExpressContext.java b/src/com/engine/salary/formlua/core/QLExpressContext.java new file mode 100644 index 000000000..d9db4a6ff --- /dev/null +++ b/src/com/engine/salary/formlua/core/QLExpressContext.java @@ -0,0 +1,19 @@ +package com.engine.salary.formlua.core; + +import com.ql.util.express.IExpressContext; + +import java.util.HashMap; +import java.util.Map; + +@SuppressWarnings("serial") +public class QLExpressContext extends HashMap implements + IExpressContext { + + + + public QLExpressContext(Map aProperties) { + super(aProperties); + } + + +} diff --git a/src/com/engine/salary/formlua/core/exception/ErrorType.java b/src/com/engine/salary/formlua/core/exception/ErrorType.java new file mode 100644 index 000000000..58f97671a --- /dev/null +++ b/src/com/engine/salary/formlua/core/exception/ErrorType.java @@ -0,0 +1,69 @@ +package com.engine.salary.formlua.core.exception; + +import com.engine.salary.util.SalaryI18nUtil; + +public enum ErrorType { + /** + *函数参数不能为空 + */ + NOT_NULL(SalaryI18nUtil.getI18nLabel(91326,"函数参数不能为空")), + /** + * 参数不能为空 + */ + VAR_NOT_NULL(SalaryI18nUtil.getI18nLabel(32804,"参数不能为空")), + /** + *函数参数错误,参数类型需为数字字段 + */ + MUST_NUM(SalaryI18nUtil.getI18nLabel(91327,"函数参数错误,参数类型需为数字字段")), + /** + *函数参数类型错误,参数需为表格 + */ + MUST_FORM(SalaryI18nUtil.getI18nLabel(91330,"函数参数类型错误,参数需为表格")), + /** + * + */ + MUST_FORM_FIELD(SalaryI18nUtil.getI18nLabel(91331,"函数参数错误,参数类型需为表格字段")), + CANT_FORM_FIELD(SalaryI18nUtil.getI18nLabel(91427,"比较操作符参数不能是表格字段")), + /** + * + */ + CND_NOT_NULL(SalaryI18nUtil.getI18nLabel(11575,"条件不能为空")), + /** + * + */ + MIN_VAR_COUNT(SalaryI18nUtil.getI18nLabel(91332,"函数的最少参数个数")), + /** + * + */ + MAX_VAR_COUNT(SalaryI18nUtil.getI18nLabel(91333,"函数的最多参数个数")), + /** + * + */ + CANNOT_HAVE_VAR(SalaryI18nUtil.getI18nLabel(91334,"函数不能有参数")), + /** + * + */ + RETURN_TYPE_DIFF(SalaryI18nUtil.getI18nLabel(91335,"函数多个条件的返回值必须一致")), + /** + * + */ + VAR_COUNT_MUST_Odd(SalaryI18nUtil.getI18nLabel(91336,"函数最后一个参数需为默认返回值")), + /** + * + */ + VAR_TYPE_WRONG(SalaryI18nUtil.getI18nLabel(91337,"函数参数类型错误")), + /** + * + */ + VAR_MUST_HAVE_DATE(SalaryI18nUtil.getI18nLabel(91338,"函数日期参数必须包含年月日")), + /** + * + */ + VAR_TYPE_MUST_BE(SalaryI18nUtil.getI18nLabel(91339,"函数参数类型错误,参数类型需为")), + /** + * + */ + CANNOT_FIND_TEN(SalaryI18nUtil.getI18nLabel(91361,"函数未能获取到租户")); + ErrorType(String name) { + } +} diff --git a/src/com/engine/salary/formlua/core/exception/ExcelRunTimeException.java b/src/com/engine/salary/formlua/core/exception/ExcelRunTimeException.java new file mode 100644 index 000000000..cd4a7736f --- /dev/null +++ b/src/com/engine/salary/formlua/core/exception/ExcelRunTimeException.java @@ -0,0 +1,24 @@ +package com.engine.salary.formlua.core.exception; + + + +public class ExcelRunTimeException extends Exception{ + private String info; + + public ExcelRunTimeException(String info) { + super(info,new Exception(info)); + this.info = info; + } + + public ExcelRunTimeException() { + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + +} diff --git a/src/com/engine/salary/formlua/data/ExpressDataService.java b/src/com/engine/salary/formlua/data/ExpressDataService.java new file mode 100644 index 000000000..239974af7 --- /dev/null +++ b/src/com/engine/salary/formlua/data/ExpressDataService.java @@ -0,0 +1,85 @@ +package com.engine.salary.formlua.data; + +import com.weaver.common.form.data.FormData; +import com.weaver.excel.formula.api.entity.ExpressFormula; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.teams.domain.user.SimpleEmployee; + +import java.util.List; +import java.util.Map; + +/** + * 公式数据交互service + * @author Failymiss + * + */ +public interface ExpressDataService { + + public Map buildCndFilter(Long formId, Long fieldId, String express, Map params, String module, SimpleEmployee employee); + + /** + * 统计函数条件校验 + * @param formId + * @param fieldId + * @param funcName + * @param express + * @param params + * @param module + * @param employee + * @return + * @throws Exception + */ + public Double getAggregateDataTest(Long formId, Long fieldId, String funcName,String module,Map params,SimpleEmployee employee) throws Exception; + + /** + * @param formId + * @param fieldId + * @param funcName + * @param express + * @param params + * @param module + * @param employee + * @return + */ + public Double getAggregateData(Long formId, Long fieldId, String funcName, String express, Map params, String module, SimpleEmployee employee); + + public Double getCommonAggregateData(Long formId,Long fieldId,String funcName,List cndDataType,String moduleSource,SimpleEmployee employee); + + /** + * formdata封装成函数需要的数据结构 + * @param fieldIds 字段id + * @param dataId 当前数据id(上报id,审批id) + * @param module 当前数据module + * @param employee 操作人 + * @return + */ +// public Map bulidDataType(List fieldIds, Long dataId, ModuleSource module, SimpleEmployee employee); + + /** + * @param fieldIds + * @param formData + * @param module + * @param employee + * @return + */ + public Map bulidDataType(List fieldIds, FormData formData, String module,SimpleEmployee employee); + + /** + * 测试统计筛选条件 + */ + public void testFunc(SimpleEmployee employee); + + String getDataType(String componentKey); + + /** + * 给规则库更新时构建筛选条件的一个接口 + * @param formula + * @param targetFormId + * @param employee + * @param formData + * @param module + * @return + */ + Map buildFilterParam(ExpressFormula formula, Long targetFormId, SimpleEmployee employee, FormData formData, String module); + +} diff --git a/src/com/engine/salary/formlua/data/ExpressDataServiceImpl.java b/src/com/engine/salary/formlua/data/ExpressDataServiceImpl.java new file mode 100644 index 000000000..5d6991b5f --- /dev/null +++ b/src/com/engine/salary/formlua/data/ExpressDataServiceImpl.java @@ -0,0 +1,662 @@ +package com.engine.salary.formlua.data; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Maps; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.form.FreeFormAssistService; +import com.weaver.common.form.FreeFormService; +import com.weaver.common.form.FreeStatAssistService; +import com.weaver.common.form.component.base.ComponentConfig; +import com.weaver.common.form.component.base.ComponentType; +import com.weaver.common.form.constant.FormGroup; +import com.weaver.common.form.data.FormData; +import com.weaver.common.form.data.FormDataStatus; +import com.weaver.common.form.data.detail.FormDataDetail; +import com.weaver.common.form.data.option.FormDataOption; +import com.weaver.common.form.data.text.FormDataText; +import com.weaver.common.form.metadata.ModuleSource; +import com.weaver.common.form.metadata.field.FormField; +import com.weaver.common.form.remoteService.RemoteFreeStatService; +import com.weaver.common.form.stat.FilterFormData; +import com.weaver.common.form.stat.domain.search.FilterFormDataParam; +import com.weaver.common.form.stat.service.serarch.FilterFormDataSearchService; +import com.weaver.context.WeaverSentinelContext; +import com.weaver.excel.formula.api.entity.ExpressFormula; +import com.weaver.excel.formula.api.entity.FormulaVar; +import com.weaver.excel.formula.core.rpc.ExcelDubboInvoker; +import com.weaver.excel.formula.core.rpc.RemoteExcelService; +import com.weaver.excel.formula.data.func.QlExpressUtil; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.excel.formula.entity.parameter.FormulaContext; +import com.weaver.excel.formula.entity.parameter.standard.AggFunc; +import com.weaver.excel.formula.entity.parameter.standard.ExcelResult; +import com.weaver.excel.formula.entity.parameter.standard.FormulaFilterData; +import com.weaver.excel.formula.util.ExcelParamUtil; +import com.weaver.excel.formula.util.standard.ExcelTransUtil; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.teams.core.orm.mybatis.Page; +import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.formreport.remote.RemoteFormReportService; +import com.weaver.utils.WeaverDubboSentinelUtil; +import com.weaver.workflow.common.entity.list.requestlist.RequestListDataVoEntity; +import com.weaver.workflow.common.entity.list.requestlist.RequestListSearchConditionEntity; +import com.weaver.workflow.list.api.rest.publicapi.WflRequestListFormRest; +import com.weaver.workflow.list.api.rest.publicapi.WflSearchConditionRest; +import com.weaver.workflow.report.api.rest.reportstat.WfcReportStatRest; +import org.apache.dubbo.rpc.RpcException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.*; + +@Service +@SuppressWarnings("unused") +public class ExpressDataServiceImpl implements ExpressDataService { + + protected final Logger logger = LoggerFactory.getLogger(getClass()); + @Autowired + protected FreeFormAssistService freeFormAssistService; + @RpcReference(group = FormGroup.WORKFLOW) + protected RemoteFreeStatService remoteFlowFreeStatService; + @Autowired + private FreeStatAssistService freeStatAssistService; + @RpcReference(group = "biaoge") + protected RemoteExcelService remoteExcelService; + @RpcReference(group = FormGroup.FORMREPORT) + protected RemoteFreeStatService remoteReportFreeStatService; + @Autowired + private QlExpressUtil qlExpressUtil; + @RpcReference + RemoteFormReportService remoteFormReportService; +// @RpcReference +// private WfcSearchConditionRest wfcSearchConditionRest; + @RpcReference(group = "workflow") + private WflSearchConditionRest wflSearchConditionRest; +// @RpcReference(group = "workflow",timeout = 300000) +// private WfcRequestListFormRest wfcRequestListFormRpc; + @RpcReference(group = "workflow") + private WflRequestListFormRest wflRequestListFormRest; + @Autowired + private ExcelDubboInvoker excelDubboInvoker; + @Autowired + private ExcelTransUtil excelTransUtil; +// @RpcReference(group = "workflow") +// private WfcRequestListFormRest wfcRequestListFormRest; + @RpcReference(group = "hrmsalary") + private RemoteExcelService remoteExcelServiceHrmSalary; + @RpcReference(group = "workflow") + private WfcReportStatRest wfcReportStatRest; + @Autowired + private FilterFormDataSearchService filterFormDataSearchService; + @Override + public void testFunc(SimpleEmployee employee) { + + try { + Map params = new HashMap(); + List formFields = bulidFreeFormService(ModuleSource.biaoge).getFormFieldListByStatus(2598433966837708893L, null, employee); + if(formFields != null && formFields.size() > 0) { + for(FormField formField:formFields) { + params.put("fieldId_"+formField.getId(), formField); + } + } + + String str = "2=5"; + + //测试= ==方法 + logger.info("测试=,==方法"); + + String str2 = "fieldId_2598434392040299458=5"; + + String str3 = "fieldId_3419471597648354446=5"; + logger.info("数字控件:"+JSON.toJSONString(qlExpressUtil.execute(str3, params))); + + String str4 = "fieldId_2598434963895899468='2020-07-14'"; + logger.info("日期控件:"+JSON.toJSONString(qlExpressUtil.execute(str4, params))); + + String str5 = "fieldId_3419471597648354447=5"; + logger.info("选项控件:"+JSON.toJSONString(qlExpressUtil.execute(str5, params))); + + //测试= ==方法 + logger.info("测试 >= <= > < 方法"); + + String str7 = "fieldId_3419471597648354446=5"; + logger.info("数字控件:"+JSON.toJSONString(qlExpressUtil.execute(str3, params))); + + String str8 = "fieldId_2598434963895899468='2020-07-14'"; + logger.info("日期控件:"+JSON.toJSONString(qlExpressUtil.execute(str4, params))); + + logger.info("测试 >= =< !=方法"); + } catch (Exception e) { + logger.error("err",e); + } + } + + @Override + public Double getAggregateDataTest(Long formId, Long fieldId, String funcName,String module,Map params,SimpleEmployee employee) throws Exception { + Double value = 0d; + return 1d; + } + + @SuppressWarnings("unchecked") + @Override + public Map buildCndFilter(Long formId, Long fieldId, String express, Map params, String module, SimpleEmployee employee) { + Map paramMap=new HashMap<>(); + List filterFormDatas = new ArrayList(); + if(express != null) { + if(params == null) { + params = new HashMap(); + } + List formFields = bulidFreeFormService(ModuleSource.valueOf(module)).getFormFieldListByStatus(formId, null, employee); + if(formFields != null && formFields.size() > 0) { + for(FormField formField:formFields) { + params.put("field"+formField.getId(), formField); + } + } + try { + Object object = qlExpressUtil.execute(express, params); + if(object instanceof FilterFormData) { + filterFormDatas.add((FilterFormData) object); + }else if((object instanceof List) && (((List) object).get(0) instanceof FilterFormData)) { + filterFormDatas.addAll((List)object); + } + } catch (Exception e) { + logger.error("err",e); + } + } + Map param = assemblyParam(formId, employee); + if(filterFormDatas != null && filterFormDatas.size() > 0) { + param.put("condition", filterFormDatas.get(0).getCondition()); + } + paramMap.put("param",param); + paramMap.put("filterFormDatas",filterFormDatas); + return paramMap; + } + + @Override + @SuppressWarnings("unchecked") + public Double getAggregateData(Long formId, Long fieldId, String funcName,String express, Map params, String module, SimpleEmployee employee) { + Double value = 0d; + List filterFormDatas = new ArrayList(); + if(express != null) { + if(params == null) { + params = new HashMap(); + } + + List formFields = bulidFreeFormService(ModuleSource.valueOf(module)).getFormFieldListByStatus(formId, null, employee); + if(formFields != null && formFields.size() > 0) { + for(FormField formField:formFields) { + boolean isput=false; + Iterator keysets=params.keySet().iterator(); + while (keysets.hasNext()){ + String key=keysets.next(); + Object obj=params.get(key); + logger.info("聚合函数匹配表单控件:"+key+"-->"+formField.getId()); + if(obj instanceof DataType){ + DataType dataType=(DataType)obj; + if(null!=dataType.getFieldId()&&Long.parseLong(dataType.getFieldId())==formField.getId() && !dataType.getName().equals("当前数据")){ + params.put(key, formField); + }else if(key.indexOf(formField.getId()+"")>0){ + params.put(key, formField); + } + }else if(key.indexOf(formField.getId()+"")>0){ + params.put(key, formField); + } + } + if(!isput){ + params.put("field"+formField.getId(), formField); + } + } + } + logger.info(formId+"aggregate express:"+express); + try { + Object object = qlExpressUtil.execute(express, params); + if(object instanceof FilterFormData) { + filterFormDatas.add((FilterFormData) object); + }else if((object instanceof List) && (((List) object).get(0) instanceof FilterFormData)) { + filterFormDatas.addAll((List)object); + } + } catch (Exception e) { + logger.error("err",e); + } + } + Map param = assemblyParam(formId, employee); + if(filterFormDatas != null && filterFormDatas.size() > 0) { + logger.info(filterFormDatas.get(0).getCondition()); + param.put("condition", StringUtils.isEmpty(filterFormDatas.get(0).getCondition())?"AND":filterFormDatas.get(0).getCondition()); + } +// logger.info(formId+"param聚合参数:"+(param!=null?JSON.toJSONString(param):"NULL")); +// logger.info(formId+"filterFormDatas聚合参数:"+(filterFormDatas!=null?JSON.toJSONString(filterFormDatas):"NULL")); +// logger.info(formId+"fieldId聚合参数:"+fieldId); + if("count".equalsIgnoreCase(funcName)) { + if(module.equalsIgnoreCase(ModuleSource.biaoge.toString())){ + value=Double.valueOf(remoteFormReportService.countStatFormDatasForReportNum(param, filterFormDatas, null, employee)); + } else if(module.equalsIgnoreCase(ModuleSource.workflow.toString())){ +// value=Double.valueOf(remoteFlowDataStatQueryService.countStatFormDatasForFlowNum(param, filterFormDatas, employee)); + value = getFlowData(param, filterFormDatas, employee, formId); + } + }else { + if (module.equalsIgnoreCase(ModuleSource.workflow.toString())) { + value = remoteFlowFreeStatService.findFieldStatByField(param, filterFormDatas, + fieldId, funcName,employee); + } else if(module.equalsIgnoreCase(ModuleSource.biaoge.toString())){ + value = remoteReportFreeStatService.findFieldStatByField(param, filterFormDatas, + fieldId, funcName,employee); + } + } + logger.info(funcName+"聚合结果:"+value); + return value; + } + + @Override + public Double getCommonAggregateData(Long formId, Long fieldId, String funcName, List cndDataType, String moduleSource, SimpleEmployee employee) { + Double value=0d; + funcName=funcName.toLowerCase(); + List filterFormDatas=null; + List formulaFilterDataList=new ArrayList<>(); + for (int i=1;i paramFilterList=paramObj.getFormulaFilterDataList(); +// logger.info(JSON.toJSONString(paramFilterList)); + formulaFilterDataList.addAll(paramFilterList); + } + } + + //审批、上报使用老条件 + if(moduleSource.equalsIgnoreCase(ModuleSource.workflow.toString()) || moduleSource.equalsIgnoreCase(ModuleSource.biaoge.toString())){ + JSONArray jsonArray=JSON.parseArray(JSON.toJSONString(formulaFilterDataList)); + filterFormDatas=jsonArray.toJavaList(FilterFormData.class); +// logger.info("函数条件新转老结果:"+(JSON.toJSONString(filterFormDatas))); + } + logger.info("条件参数:"+JSON.toJSONString(filterFormDatas)); + Map param = assemblyParam(formId, employee); + if(filterFormDatas != null && filterFormDatas.size() > 0) { + param.put("condition", StringUtils.isEmpty(filterFormDatas.get(0).getCondition())?"AND":filterFormDatas.get(0).getCondition()); + } + if(formulaFilterDataList !=null && formulaFilterDataList.size()>0){ + param.put("condition", StringUtils.isEmpty(formulaFilterDataList.get(0).getCondition())?"AND":formulaFilterDataList.get(0).getCondition()); + } + + + if(moduleSource.equalsIgnoreCase(ModuleSource.workflow.toString())){ + if("count".equalsIgnoreCase(funcName)) { + value = getFlowData(param, filterFormDatas, employee, formId); + }else { +// value = freeStatAssistService.buildFreeStatService("workflow").findFieldStatByField(param, filterFormDatas, +// fieldId, funcName,employee); + List filterFormDataParamList=filterFormDataSearchService.conversionOldFilterFormDataToNew(filterFormDatas,employee); + logger.info("conversionOldFilterFormDataToNew函数统计转换条件:"+JSON.toJSONString(filterFormDataParamList)); + Map aggResultMap= null; + try { + WeaverSentinelContext.setDowngradeType(false); + aggResultMap = wfcReportStatRest.findFieldCalculateByCondition(formId,fieldId,filterFormDataParamList,funcName,employee); + } catch (RpcException e) { + logger.error("err",e); + if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { + //降级逻辑编写 + logger.error("审批服务不可用"); + } + } + logger.info("审批新统计结果:"+JSON.toJSONString(aggResultMap)); + Object aggResultObject=aggResultMap.get(funcName.toLowerCase()); + if(aggResultObject!=null){ + BigDecimal bigDecimal=new BigDecimal(aggResultObject+""); + value=bigDecimal.doubleValue(); + } + } + logger.info("审批聚合结果:"+value); + }else if(moduleSource.equalsIgnoreCase(ModuleSource.biaoge.toString())){ + ExcelResult excelResult= null; + try { + WeaverSentinelContext.setDowngradeType(false); + excelResult = remoteExcelService.aggregation(AggFunc.valueOf(funcName.toLowerCase()),formId+"",fieldId+"",formulaFilterDataList,null,employee); + } catch (IllegalArgumentException e) { + logger.error("err",e); + }catch (RpcException e){ + logger.error("err",e); + if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { + //降级逻辑编写 + logger.error("上报服务不可用"); + } + } + try { + value=Double.parseDouble(excelResult.getData()+""); + } catch (NumberFormatException e) { + logger.error("err",e); + } + logger.info("上报聚合结果:"+JSON.toJSONString(excelResult)); + }else if(moduleSource.equalsIgnoreCase("hrmsalary")){ + ExcelResult excelResult= null; + try { + excelResult = remoteExcelServiceHrmSalary.aggregation(AggFunc.valueOf(funcName.toLowerCase()),formId+"",fieldId+"",formulaFilterDataList,null,employee); + } catch (IllegalArgumentException e) { + logger.error("err",e); + }catch (RpcException e){ + logger.error("err",e); + if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { + //降级逻辑编写 + logger.error("薪酬服务不可用"); + } + } + try { + value=Double.parseDouble(excelResult.getData()+""); + } catch (NumberFormatException e) { + logger.error("err",e); + } + logger.info("薪酬聚合结果:"+JSON.toJSONString(excelResult)); + } + return value; + } + + /** + * 根据表单参数查询审批数据量 + * @param paramMap + * @param filterFormDatas + * @param employee + * @return + */ + private Double getFlowData(Map paramMap, List filterFormDatas, SimpleEmployee employee, Long formId) { + List datas =null; + FormDataOption formDataOption=new FormDataOption(); + Page pageDatas=new Page(); + + JSONObject filter=new JSONObject(); + JSONArray filterArray=JSON.parseArray(JSON.toJSONString(filterFormDatas)); + + for(int i=0;i weaResult= null; + try { + WeaverSentinelContext.setDowngradeType(false); + weaResult = wflSearchConditionRest.convertCondition(cndString); +// weaResult = wfcSearchConditionRest.convertCondition(cndString); + } catch (RpcException e) { + if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { + //降级逻辑编写 + logger.error("审批服务不可用"); + logger.error("err",e); + } + } + JSONObject flowJson=JSON.parseObject(weaResult.getData()); + JSONObject formDatas=new JSONObject(); + formDatas.put("formDatas",flowJson); + cndString=formDatas.toJSONString(); + logger.error("转换审批条件后:"+cndString); + RequestListSearchConditionEntity listSearchCondition =new RequestListSearchConditionEntity(); + JSONObject newFlowCndJson=JSON.parseObject(cndString); + if(paramMap != null) listSearchCondition = newFlowCndJson.toJavaObject(RequestListSearchConditionEntity.class); + if(paramMap.get("condition")!=null){ + listSearchCondition.setType(paramMap.get("condition")+""); + } + logger.info("JSON转换成审批条件对象:"+(listSearchCondition!=null?JSON.toJSONString(listSearchCondition):"NULL")); + //listSearchCondition.setType(paramMap.get("condition")!=null?paramMap.get("condition")+"":"AND"); + com.weaver.common.component.table.page.Page page = new com.weaver.common.component.table.page.Page(1, 10); + page.setSize(Integer.MAX_VALUE); + paramMap.put("isAdmin",true); + paramMap.remove("filterFormDatas"); + logger.error("函数执行条件paramMap:"+JSON.toJSONString(paramMap)); + Long flowCount = wflRequestListFormRest.getFormFilterRequestCount(paramMap, formId, listSearchCondition, employee); + if(flowCount==null){ + flowCount=0L; + } + return flowCount.doubleValue(); +// List tempDatas=wfcRequestListFormRest.getFormFilterRequestDatasByWfId(paramMap,formId,listSearchCondition,page,employee); +// List tempDatas=wfcRequestListFormRpc.getFormFilterRequestDatas(paramMap,formId,listSearchCondition,page,employee); +// return new Double(tempDatas.size()); + } + + // 封装高级搜索参数 + private Map assemblyParam(Long formId, SimpleEmployee employee) { + Map param = new HashMap(); + + param.put("employeeId", employee.getUserId()); + param.put("formId", formId); // 表单id + param.put("isAdmin", true); // 统计默认有管理元权限 + param.put("status", FormDataStatus.submit.toString()); // 统计默认有管理元权限 + + return param; + } + + + public FreeFormService bulidFreeFormService(ModuleSource module) { + return freeFormAssistService.buildFreeFormService(module.toString()); + } + + @Override + public Map bulidDataType(List fieldIds, FormData formData, String module, + SimpleEmployee employee) { + Map dataMap = new HashMap(); + if(fieldIds != null && fieldIds.size() > 0 && formData != null) { + List dataDetails = formData.getDataDetails(); + Map> dataDetailMap = new HashMap>(); + if(dataDetails != null && dataDetails.size() > 0) { + for(FormDataDetail dataDetail : dataDetails) { + if(dataDetailMap.containsKey(dataDetail.getFormField().getId())) { + dataDetailMap.get(dataDetail.getFormField().getId()).add(dataDetail); + }else { + List values = new ArrayList(); + values.add(dataDetail); + dataDetailMap.put(dataDetail.getFormField().getId(), values); + } + + } + } + Map fieldMap = bulidFreeFormService(ModuleSource.valueOf(module)).getFieldMapByFormId(formData.getForm().getId(), employee); + for(String field : fieldIds) { + Long fieldId = Long.parseLong(field); + FormField formField = fieldMap.get(fieldId); + if(formField != null) { + DataType dataType = new DataType(); + dataType.setFieldId(field); + dataType.setDataType(getDataType(formField.getComponentKey())); + if(dataDetailMap.containsKey(fieldId)) { + dataType.setContent(getDetailValue(dataDetailMap.get(fieldId))); + dataType.setText(getDetailContent(dataDetailMap.get(fieldId))); + if( ComponentType.RadioBox.toString().equals(formField.getComponentKey()) + || ComponentType.CheckBox.toString().equals(formField.getComponentKey()) + || ComponentType.Select.toString().equals(formField.getComponentKey())) { + dataType.setScore(getDetailScore(dataDetailMap.get(fieldId),ModuleSource.valueOf(module),formData.getFormLayout().getId(),employee)); + } + }else { + dataType.setContent(""); + dataType.setText(""); + } + dataMap.put(field, dataType); + } + } + } + return dataMap; + } + + private Double getDetailScore(List dataDetails, ModuleSource module,Long layoutId,SimpleEmployee employee) { + Double score =0d; + for (FormDataDetail formDataDetail :dataDetails){ + score=excelTransUtil.getDetailScore(formDataDetail,module,layoutId,employee); + } +// if(dataDetails != null && dataDetails.size() > 0) { +// FormDataDetail dataDetail = dataDetails.get(0); +// if(dataDetail != null) { +// score = bulidFreeFormService(module).getOptionScore(dataDetail.getFormField().getId()+"", layoutId, dataDetail, employee).doubleValue(); +// } +// } + return score; + } + + private String getDetailValue(List dataDetails) { + String content =""; + if(dataDetails != null && dataDetails.size() > 0) { + FormDataDetail dataDetail = dataDetails.get(0); + if(dataDetail != null) { + content = dataDetail.getContent() == null ? "" : dataDetail.getContent(); // 字段新数据 + FormDataText formDataText = dataDetail.getDataText(); + if (formDataText != null) { // 如果是多行文本框 + content = formDataText.getContent(); + } + List optDetails = dataDetail.getDataOptions(); // 填写选项明细 + if ((optDetails != null) && (optDetails.size() > 0)) {// 如果是选项类型控件 + for (FormDataOption formDataOption : optDetails) { + content += formDataOption.getOptionId()+","; + } + if ((content != null) && (content.length() > 0)) { + content = content.substring(0, content.length() - 1); // 去掉最后一个逗号 + } + } + } + } + return content; + } + + private String getDetailContent(List dataDetails) { + String content =""; + if(dataDetails != null && dataDetails.size() > 0) { + FormDataDetail dataDetail = dataDetails.get(0); + if(dataDetail != null) { + content = dataDetail.getContent() == null ? "" : dataDetail.getContent(); // 字段新数据 + FormDataText formDataText = dataDetail.getDataText(); + if (formDataText != null) { // 如果是多行文本框 + content = formDataText.getContent(); + } + List optDetails = dataDetail.getDataOptions(); // 填写选项明细 + if ((optDetails != null) && (optDetails.size() > 0)) {// 如果是选项类型控件 + for (FormDataOption formDataOption : optDetails) { + content += formDataOption.getContent() + ","; + } + if ((content != null) && (content.length() > 0)) { + content = content.substring(0, content.length() - 1); // 去掉最后一个逗号 + } + } + } + } + return content; + } + + /** + * 检查控件类型 + * @param componentKey + * @return + */ + @Override + public String getDataType(String componentKey){ + DataType dataType = new DataType(); + if(ComponentConfig.isNumberComponent(componentKey)) { + return DataType.NUMBER; + }else if(ComponentConfig.isOptionComponent(componentKey)) { + return DataType.OPTION; + }else if(componentKey.equals(ComponentType.DateComponent.toString())) { + return DataType.STRING; + }else { + return DataType.STRING; + } + } + + @Override + public Map buildFilterParam(ExpressFormula dataExpressFormula, Long targetFormId, SimpleEmployee employee, FormData formData, String module) { + String moduleStr=module.toString(); + FormulaContext.get().setValue(moduleStr); + + Map expressMap=new HashMap<>(); + Map paramMap = Maps.newHashMap(); + if(dataExpressFormula==null) throw new RuntimeException("公式不存在"); + + try { + JSONObject paramJson= JSON.parseObject(dataExpressFormula.getParameter()); + List varList=null; + if(dataExpressFormula.getParameter()!=null){ + JSONArray paramArray=paramJson.getJSONArray("formulavars"); + varList=paramArray.toJavaList(FormulaVar.class); + List fieldIds=new ArrayList<>(); + for(FormulaVar formulaVar:varList){ + if(formulaVar.getFieldId()!=null&&formulaVar.getOptionId()==null&&!formulaVar.getFormId().equalsIgnoreCase(targetFormId.toString())){ + fieldIds.add(formulaVar.getFieldId().toString()); + } + } + + Map dataTypeMap=bulidDataType(fieldIds,formData,module,employee); + for(FormulaVar formulaVar:varList){ + if(formulaVar.getFieldId()!=null&&dataTypeMap.containsKey(formulaVar.getFieldId().toString())){ + DataType dataType=dataTypeMap.get(formulaVar.getFieldId().toString()); + if(formulaVar.getFormId()!=null){ + dataType.setFormId(Long.parseLong(formulaVar.getFormId())); + } + + try { + dataType.setModule(formulaVar.getModule()); + } catch (IllegalArgumentException e) { + logger.error("err",e); + dataType.setModule(formulaVar.getModule()); + } + dataType.setEmployee(employee); + if(formulaVar.getName()!=null){ + if(dataType.getContent()==null){ + dataType.setContent(formulaVar.getOptionId()); + } + if(dataType.getText()==null){ + dataType.setText(formulaVar.getName()); + } + } + expressMap.put(formulaVar.getKey(),dataType); + }else{ + DataType dataType=new DataType(); + + if(formulaVar.getKey().equals("current_operator")){ + dataType.setContent(employee.getId()); + dataType.setText(employee.getUsername()); + dataType.setDataType(DataType.OPTION); + expressMap.put(formulaVar.getKey(),dataType); + }else if(formulaVar.getOptionId()!=null){ + dataType.setDataType(DataType.OPTION); + dataType.setContent(formulaVar.getOptionId()); + dataType.setText(formulaVar.getName()); + expressMap.put(formulaVar.getKey(),dataType); + }else { + dataType.setContent(formulaVar.getFormId()); + try { + dataType.setModule(formulaVar.getModule()); + } catch (IllegalArgumentException e) { + logger.error("err",e); + dataType.setModule(formulaVar.getModule()); + } + dataType.setEmployee(employee); + } + dataType.setFormId(formulaVar.getFormId()!=null?Long.parseLong(formulaVar.getFormId()):null); + expressMap.put(formulaVar.getKey(),dataType); + } + } + + List paramDatas=paramJson.getJSONArray("formulavars").toJavaList(FormulaVar.class); + String filterGenFormula= ExcelParamUtil.replaceAllParam(dataExpressFormula.getFormula(),paramDatas); + filterGenFormula= ExcelParamUtil.spliteSql(filterGenFormula,expressMap); + filterGenFormula=filterGenFormula.replaceAll("\\{",""); + filterGenFormula=filterGenFormula.replaceAll("\\}",""); + paramMap=this.buildCndFilter(targetFormId,null,filterGenFormula,expressMap,module,employee); + } + } catch (Exception e) { + logger.error("err",e); + } + return paramMap; + } + +} diff --git a/src/com/engine/salary/formlua/data/func/EqOperator.java b/src/com/engine/salary/formlua/data/func/EqOperator.java new file mode 100644 index 000000000..83ef15e15 --- /dev/null +++ b/src/com/engine/salary/formlua/data/func/EqOperator.java @@ -0,0 +1,117 @@ +package com.engine.salary.formlua.data.func; + +import com.ql.util.express.Operator; +import com.weaver.common.form.component.base.ComponentConfig; +import com.weaver.common.form.component.base.ComponentType; +import com.weaver.common.form.excel.validator.Validator; +import com.weaver.common.form.metadata.field.FormField; +import com.weaver.common.form.stat.FilterFormData; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.teams.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + + +/** + * equals转成筛选条件 + * @author Failymiss + */ +public class EqOperator extends Operator { + + private static final long serialVersionUID = -6647187680280498682L; + + + public Object executeInner(Object[] list) throws Exception { + Object obj=executeInner(list[0], list[1]); + return obj; + } + + public Object executeInner(Object obj1,Object obj2) throws Exception { + FilterFormData filterFormData = null; + String content = null; + FormField field = null; + if(checkParam(obj1, obj2)) { + field = (FormField) obj1; + if(obj2 instanceof DataType) { + content = ((DataType) obj2).getContent()+""; + }else { + content = obj2+""; + } + } + if (field != null && content != null) { + String componentKey = field.getComponentKey(); + filterFormData = new FilterFormData(); + filterFormData.setFieldId(field.getId()+""); + if(field.getSubForm() != null) { + filterFormData.setSubFormId(field.getSubForm().getId()+""); + } + filterFormData.setComponentKey(componentKey); + if(StringUtils.isEmpty(content)) { + filterFormData.setTerm(FilterFormData.TERM_NULL); + }else{ + filterFormData.setTerm(FilterFormData.TERM_EQ); + //数字类型 + if(ComponentConfig.isNumberComponent(componentKey) + || componentKey.equals(ComponentType.DateComponent.toString()) + || componentKey.equals(ComponentType.TimeComponent.toString())) { + filterFormData.setContent(content); + //选项控件 + }else if(ComponentConfig.isOptionComponent(componentKey)) { + List ids = new ArrayList<>(); + String[] idsArray = content.split(","); + for(String idStr : idsArray) { + if(StringUtils.isNotBlank(idStr)) { + ids.add(idStr); + } + } + filterFormData.setIds(ids); + //文本型 + }else { + filterFormData.setContent(content); + } + } + } + return filterFormData; + } + + private boolean checkParam(Object obj1,Object obj2) { + if(obj1 instanceof FormField) { + String componentKey = ((FormField) obj1).getComponentKey(); + if(ComponentConfig.isNumberComponent(componentKey)) { + if(obj2 instanceof DataType) { + if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)){ + return true; + }else { + throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); + } + }else if(StringUtils.isEmpty(obj2+"") || Validator.isFloat(obj2+"") ){ + return true; + }else { + throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); + } + }else if(ComponentConfig.isOptionComponent(componentKey)){ + if(StringUtils.isEmpty(obj2+"") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { + return true; + }else { + throw new RuntimeException("筛选条件[=]:选项控件右边必须是选项"); + } + } else { + if(StringUtils.isEmpty(obj2+"") || obj2 instanceof String || obj2 instanceof Character) { + return true; + }else if(obj2 instanceof DataType){ + if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ + return true; + }else if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ + return true; + }else { + throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); + } + }else { + throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); + } + } + } + throw new RuntimeException("筛选条件[=]:左边必须是表单控件"); + } +} \ No newline at end of file diff --git a/src/com/engine/salary/formlua/data/func/LessMoreOperator.java b/src/com/engine/salary/formlua/data/func/LessMoreOperator.java new file mode 100644 index 000000000..35cf47591 --- /dev/null +++ b/src/com/engine/salary/formlua/data/func/LessMoreOperator.java @@ -0,0 +1,115 @@ +package com.engine.salary.formlua.data.func; + +import com.alibaba.fastjson.JSON; +import com.ql.util.express.Operator; +import com.weaver.common.form.component.base.ComponentConfig; +import com.weaver.common.form.component.base.ComponentType; +import com.weaver.common.form.excel.validator.Validator; +import com.weaver.common.form.metadata.field.FormField; +import com.weaver.common.form.stat.FilterFormData; +import com.weaver.excel.formula.entity.parameter.DataType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * >= <= > < 转成筛选条件 + * @author Failymiss + */ +public class LessMoreOperator extends Operator{ + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + private static final long serialVersionUID = -1001332992613137814L; + + public LessMoreOperator(String aName) { + this.name = aName; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + + return executeInner(list[0], list[1]); + } + + private Object executeInner(Object obj1, Object obj2) { + FilterFormData filterFormData = null; + FormField field = null; + String content = null; + if(checkParam(obj1, obj2)) { + field = (FormField) obj1; + if(obj2 instanceof DataType) { + content = ((DataType) obj2).getContent()+""; + }else { + content = obj2+""; + } + } + if (field != null && content != null) { + String componentKey = field.getComponentKey(); + if(ComponentConfig.isNumberComponent(componentKey) + || componentKey.equals(ComponentType.DateComponent.toString()) + || componentKey.equals(ComponentType.TimeComponent.toString())) { + + filterFormData = new FilterFormData(); + filterFormData.setFieldId(field.getId()+""); + if(field.getSubForm() != null) { + filterFormData.setSubFormId(field.getSubForm().getId()+""); + } + filterFormData.setComponentKey(componentKey); + switch (this.name) { + case ">=": + filterFormData.setTerm(FilterFormData.TERM_GE); + break; + case ">": + filterFormData.setTerm(FilterFormData.TERM_GT); + break; + case "<=": + filterFormData.setTerm(FilterFormData.TERM_LE); + break; + case "<": + filterFormData.setTerm(FilterFormData.TERM_LT); + break; + default: + break; + } + filterFormData.setContent(content); + } + } + return filterFormData; + } + + private boolean checkParam(Object obj1,Object obj2) { + logger.info("聚合函数校验,第一个参数:"+ JSON.toJSONString(obj1)); + logger.info("聚合函数校验,第二个参数:"+ JSON.toJSONString(obj2)); + if(obj1 instanceof FormField) { + String componentKey = ((FormField) obj1).getComponentKey(); + if(ComponentConfig.isNumberComponent(componentKey)) { + if(obj2 instanceof Number) { + return true; + }else if(obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)){ + return true; + }else { + throw new RuntimeException("筛选条件["+this.name+"]:数字控件右边必须是数字"); + } + } + if(componentKey.equals(ComponentType.DateComponent.toString())) { + if(obj2 instanceof String && Validator.isDate((String)obj2)) { + return true; + }else if(obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ + return true; + }else { + throw new RuntimeException("筛选条件["+this.name+"]:日期控件右边必须是日期字符串"); + } + + } + if(componentKey.equals(ComponentType.TimeComponent.toString())) { + if(obj2 instanceof String && Validator.isTime((String)obj2)) { + return true; + }else if(obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING) ){ + return true; + }else { + throw new RuntimeException("筛选条件["+this.name+"]:时间控件右边必须是时间字符串"); + } + } + } + throw new RuntimeException("筛选条件["+this.name+"]:左边必须是数字控件或时间控件"); + } + +} diff --git a/src/com/engine/salary/formlua/data/func/LogicFunc.java b/src/com/engine/salary/formlua/data/func/LogicFunc.java new file mode 100644 index 000000000..655aaf249 --- /dev/null +++ b/src/com/engine/salary/formlua/data/func/LogicFunc.java @@ -0,0 +1,99 @@ +package com.engine.salary.formlua.data.func; + +import com.weaver.common.form.component.base.ComponentConfig; +import com.weaver.common.form.metadata.field.FormField; +import com.weaver.common.form.stat.FilterFormData; +import com.weaver.excel.formula.entity.parameter.DataType; + +import java.util.ArrayList; +import java.util.List; + +public class LogicFunc { + + public static List and(Object... objs){ + List filterFormDatas = new ArrayList<>(); + if(objs != null && objs.length > 0) { + for(int i=0;i,>=,<,<=,LIKE,AND,OR'条件公式"); + } + } + } + return filterFormDatas; + } + + /** + * + * @param objs + * @return + */ + public static List or(Object... objs){ + List filterFormDatas = new ArrayList<>(); + if(objs != null && objs.length > 0) { + for(int i=0;i,>=,<,<=,LIKE,AND,OR'条件公式"); + } + } + } + return filterFormDatas; + } + + /** + * 支持文本、数字、日期 + * @param formField + * @param strs + * @return + */ + public static FilterFormData like(FormField formField,Object[] strs){ + if(formField != null && strs.length > 0) { + if(ComponentConfig.isOptionComponent(formField.getComponentKey())) { + throw new RuntimeException("筛选条件函数[LIKE]:第一个参数不能是选项控件"); + } + FilterFormData filterFormData = new FilterFormData(); + List contents = new ArrayList(); + for(Object str : strs) { + contents.add(str+""); + } + filterFormData.setContents(contents); + filterFormData.setTerm(FilterFormData.TERM_LIKE); + filterFormData.setFieldId(formField.getId()+""); + return filterFormData; + }else { + throw new RuntimeException("筛选条件函数[LIKE]:参数异常"); + } + } + + /** + * 仅支持选项型控件 + * @param formField + * @param options + * @return + */ + public static FilterFormData in(FormField formField,DataType[] options){ + if(formField != null && options.length > 0) { + if(!ComponentConfig.isOptionComponent(formField.getComponentKey())) { + throw new RuntimeException("筛选条件函数[IN]:第一个参数必须选项控件"); + } + FilterFormData filterFormData = new FilterFormData(); + List ids = new ArrayList(); + for(DataType option : options) { + ids.add(option.getContent()+""); + } + filterFormData.setIds(ids); + filterFormData.setFieldId(formField.getId()+""); + filterFormData.setTerm(FilterFormData.TERM_EQ); + return filterFormData; + }else { + throw new RuntimeException("筛选条件函数[IN]:参数异常"); + } + } +} diff --git a/src/com/engine/salary/formlua/data/func/NotEqOperator.java b/src/com/engine/salary/formlua/data/func/NotEqOperator.java new file mode 100644 index 000000000..494e291a8 --- /dev/null +++ b/src/com/engine/salary/formlua/data/func/NotEqOperator.java @@ -0,0 +1,112 @@ +package com.engine.salary.formlua.data.func; + +import com.ql.util.express.Operator; +import com.weaver.common.form.component.base.ComponentConfig; +import com.weaver.common.form.excel.validator.Validator; +import com.weaver.common.form.metadata.field.FormField; +import com.weaver.common.form.stat.FilterFormData; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.teams.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + + +/** + * equals转成筛选条件 + * @author Failymiss + */ +public class NotEqOperator extends Operator { + + private static final long serialVersionUID = -6647187680280498682L; + + public Object executeInner(Object[] list) throws Exception { + return executeInner(list[0], list[1]); + } + + public Object executeInner(Object obj1,Object obj2) throws Exception { + FilterFormData filterFormData = null; + String content = null; + FormField field = null; + if(checkParam(obj1, obj2)) { + field = (FormField) obj1; + if(obj2 instanceof DataType) { + content = ((DataType) obj2).getContent()+""; + }else { + content = obj2+""; + } + } + if (field != null && content != null) { + String componentKey = field.getComponentKey(); + filterFormData = new FilterFormData(); + filterFormData.setFieldId(field.getId()+""); + if(field.getSubForm() != null) { + filterFormData.setSubFormId(field.getSubForm().getId()+""); + } + filterFormData.setComponentKey(componentKey); + if(StringUtils.isEmpty(content)) { + filterFormData.setTerm(FilterFormData.TERM_NOT_NULL); + }else{ + //选项控件 + if(ComponentConfig.isOptionComponent(componentKey)) { + filterFormData.setTerm(FilterFormData.TERM_NOT_EQ); + List ids = new ArrayList<>(); + String[] idsArray = content.split(","); + for(String idStr : idsArray) { + if(StringUtils.isNotBlank(idStr)) { + ids.add(idStr); + } + } + filterFormData.setIds(ids); + //其他 + }else { + filterFormData.setTerm(FilterFormData.TERM_NOT_EQ); + filterFormData.setContent(content); + } + } + } + return filterFormData; + } + + private boolean checkParam(Object obj1,Object obj2) { + if(obj1 instanceof FormField) { + String componentKey = ((FormField) obj1).getComponentKey(); + if(ComponentConfig.isNumberComponent(componentKey)) { + if(obj2 instanceof DataType) { + if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)){ + return true; + }else { + throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); + } + }else if(StringUtils.isEmpty(obj2+"") || Validator.isFloat(obj2+"") ){ + return true; + }else { + throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); + } + }else if(ComponentConfig.isOptionComponent(componentKey)){ + if(StringUtils.isEmpty(obj2+"") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { + return true; + }else { + throw new RuntimeException("筛选条件[!=]:选项控件右边必须是选项"); + } + } else { + if(StringUtils.isEmpty(obj2+"") || obj2 instanceof String || obj2 instanceof Character) { + return true; + }else if(obj2 instanceof DataType){ + if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING) ){ + return true; + }else if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ + return true; + }else if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ + return true; + }else { + throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); + } + }else { + throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); + } + } + } + throw new RuntimeException("筛选条件[!=]:左边必须是表单控件"); + } +} diff --git a/src/com/engine/salary/formlua/data/func/QLExpressContext.java b/src/com/engine/salary/formlua/data/func/QLExpressContext.java new file mode 100644 index 000000000..86cf3d8af --- /dev/null +++ b/src/com/engine/salary/formlua/data/func/QLExpressContext.java @@ -0,0 +1,47 @@ +package com.engine.salary.formlua.data.func; + + +import com.ql.util.express.IExpressContext; +import org.springframework.context.ApplicationContext; + +import java.util.HashMap; +import java.util.Map; + +@SuppressWarnings("serial") +public class QLExpressContext extends HashMap implements + IExpressContext { + + private ApplicationContext context; + + public QLExpressContext(ApplicationContext aContext) { + this.context = aContext; + } + + public QLExpressContext(Map aProperties,ApplicationContext aContext) { + super(aProperties); + this.context = aContext; + } + + /** + * 抽象方法:根据名称从属性列表中提取属性值 + */ + public Object get(Object name) { + Object result = null; + result = super.get(name); + try { + if (result == null && this.context != null + && this.context.containsBean((String) name)) { + // 如果在Spring容器中包含bean,则返回String的Bean + result = this.context.getBean((String) name); + } + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + return result; + } + + public Object put(String name, Object object) { + return super.put(name, object); + } + +} \ No newline at end of file diff --git a/src/com/engine/salary/formlua/data/func/QlExpressUtil.java b/src/com/engine/salary/formlua/data/func/QlExpressUtil.java new file mode 100644 index 000000000..8f254735d --- /dev/null +++ b/src/com/engine/salary/formlua/data/func/QlExpressUtil.java @@ -0,0 +1,148 @@ +package com.engine.salary.formlua.data.func; + +import com.ql.util.express.DynamicParamsUtil; +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.IExpressContext; +import com.weaver.common.form.metadata.field.FormField; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.excel.formula.entity.parameter.FuncNames; +import com.weaver.excel.formula.func.aggregate.AggregationFunc; +import com.weaver.excel.formula.func.compare.WOperatorAdd; +import com.weaver.excel.formula.func.compare.WOperatorDiv; +import com.weaver.excel.formula.func.compare.WOperatorMulti; +import com.weaver.excel.formula.func.compare.WOperatorReduce; +import com.weaver.excel.formula.func.date.DateTimeService; +import com.weaver.excel.formula.func.logic.IfOperator; +import com.weaver.excel.formula.func.logic.LogicService; +import com.weaver.excel.formula.func.math.MathFuncsService; +import com.weaver.excel.formula.func.string.StringFormulaService; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 函数转换筛选条件类 + * @author Failymiss + */ +@Component +public class QlExpressUtil { + @Autowired + AggregationFunc aggregationFunc; + @Autowired + LogicService logicService; + @Autowired + DateTimeService dateTimeService; + @Autowired + StringFormulaService stringFormulaService; + @Autowired + MathFuncsService mathFuncsService; + + + private static ExpressRunner runner; + static { + runner = new ExpressRunner(true,false); + } + private static boolean isInitialRunner = false; + private ApplicationContext applicationContext;// spring上下文 + + /** + * + * @param statement + * 执行语句 + * @param context + * 上下文 + * @throws Exception + */ + public Object execute(String statement, Map context) + throws Exception { + DynamicParamsUtil.supportDynamicParams = true; + initRunner(runner); + IExpressContext expressContext = new QLExpressContext(context, + applicationContext); + return runner.execute(statement, expressContext, null, true, false); + } + + private void initRunner(ExpressRunner runner) { + if (isInitialRunner == true) { + return; + } + synchronized (runner) { + if (isInitialRunner == true) { + return; + } + try { + runner.replaceOperator("=",new EqOperator()); + runner.replaceOperator("==",new EqOperator()); + runner.replaceOperator("!=",new NotEqOperator()); + runner.replaceOperator(">=",new LessMoreOperator(">=")); + runner.replaceOperator(">",new LessMoreOperator(">")); + runner.replaceOperator("<=",new LessMoreOperator("<=")); + runner.replaceOperator("<",new LessMoreOperator("<")); + runner.addFunctionOfClassMethod("LIKE",LogicFunc.class.getName(),"like", new Class[] {FormField.class, Object[].class},""); + runner.addFunctionOfClassMethod("IN",LogicFunc.class.getName(),"in",new Class[] {FormField.class, DataType[].class},""); + runner.addFunctionOfClassMethod("AND",LogicFunc.class.getName(),"and",new Class[]{Object[].class},""); + runner.addFunctionOfClassMethod("OR",LogicFunc.class.getName(),"or",new Class[]{Object[].class},""); + + /**********************一下函数引入后不会构建成高级搜索条件***********************/ + + //字符串函数 + runner.addFunctionOfServiceMethod("CONCAT",stringFormulaService,"concatString",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("SEARCH",stringFormulaService,"search",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("TEXT",stringFormulaService,"text",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("PAD",stringFormulaService,"pad",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("REPLACE",stringFormulaService,"replace",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("VALUE",stringFormulaService,"value",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("LEN",stringFormulaService,"len",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("LEFT",stringFormulaService,"left",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("RIGHT",stringFormulaService,"right",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("MID",stringFormulaService,"mid",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("REPT",stringFormulaService,"repeat",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("TRIM",stringFormulaService,"trim",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("SCORE",stringFormulaService,"score",new Class[]{Object[].class},""); + + //数学函数 + runner.addFunctionOfServiceMethod("ROUNDUP",mathFuncsService,"roundUp",new Class[]{Object.class},""); + runner.addFunctionOfServiceMethod("ROUNDDOWN",mathFuncsService,"roundDown",new Class[]{Object.class},""); + + //日期函数 + runner.addFunctionOfServiceMethod( "DATEDIFF",dateTimeService,"dateDiff",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "DATEADD",dateTimeService,"dateAdd",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "YEAR",dateTimeService,"year",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "MONTH",dateTimeService,"month",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "DAY",dateTimeService,"day",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "HOUR",dateTimeService,"hour",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "MINUTE",dateTimeService,"minute",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "SECOND",dateTimeService,"seconds",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "WEEKNUM",dateTimeService,"weekNum",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "WEEKDAY",dateTimeService,"weekDay",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "NOW",dateTimeService,"now",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "TODAY",dateTimeService,"today",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod("DATEFORMAT",dateTimeService,"dateFormat",new Class[]{Object[].class},""); + + //逻辑函数 + runner.replaceOperator("IF",new IfOperator("IF")); + runner.addFunctionOfServiceMethod(FuncNames.TRUE.toString(),logicService,FuncNames.TRUE.getName(),new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod(FuncNames.FALSE.toString(),logicService,FuncNames.FALSE.getName(),new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod(FuncNames.ISEMPTY.toString(),logicService,FuncNames.ISEMPTY.getName(),new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod(FuncNames.NOT.toString(),logicService,FuncNames.NOT.getName(),new Class[]{Object[].class},""); + + runner.replaceOperator("+",new WOperatorAdd("+")); + runner.replaceOperator("-",new WOperatorReduce("-")); + runner.replaceOperator("*",new WOperatorMulti("*")); + runner.replaceOperator("/",new WOperatorDiv("/")); + + } catch (Exception e) { + throw new RuntimeException("初始化失败表达式"); + } + } + isInitialRunner = true; + } + + public void setApplicationContext(ApplicationContext aContext) + throws BeansException { + applicationContext = aContext; + } +} diff --git a/src/com/engine/salary/formlua/entity/parameter/DateAndString.java b/src/com/engine/salary/formlua/entity/parameter/DateAndString.java new file mode 100644 index 000000000..4e660c0af --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/DateAndString.java @@ -0,0 +1,5 @@ +package com.engine.salary.formlua.entity.parameter; + + +public class DateAndString { +} diff --git a/src/com/engine/salary/formlua/entity/parameter/ExcelFunc.java b/src/com/engine/salary/formlua/entity/parameter/ExcelFunc.java new file mode 100644 index 000000000..83d23af7f --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/ExcelFunc.java @@ -0,0 +1,138 @@ +package com.engine.salary.formlua.entity.parameter; + +import com.alibaba.fastjson.JSONObject; + + +public class ExcelFunc { + + private String name;//函数名称 + private String chineseName;//中文 + private String description;//函数描述 + private String formatString;//函数格式 + private String[] paramArray;//函数参数列表 + private String[] paramData;//参数默认数据 + private String returnType;//返回类型 + private String type="function";// + private String validForm;//有效的表单类型 current用户当前表单、all 用户所有表单 + private JSONObject jsonFormat; + private String module; + public ExcelFunc(){} + + /** + * + * @param name 名称 + * @param description 描述 + * @param formatString 格式 + * @param paramArray 参数列表 + * @param returnType 返回类型 + */ + public ExcelFunc(String name,String chineseName, String description, String formatString, String[] paramArray,String[] paramData, String returnType,JSONObject jsonFormat,String validForm) { + this.name = name; + this.chineseName=chineseName; + this.description = description; + this.formatString = formatString; + this.paramArray = paramArray; + this.returnType = returnType; + this.jsonFormat=jsonFormat; + this.paramData=paramData; + this.validForm=validForm; + } + public ExcelFunc(String name,String chineseName, String description, String formatString, String[] paramArray,String[] paramData, String returnType,String validForm) { + this.name = name; + this.chineseName=chineseName; + this.description = description; + this.formatString = formatString; + this.paramArray = paramArray; + this.returnType = returnType; + this.paramData=paramData; + this.validForm=validForm; + } + + public String getModule() { + return module; + } + + public void setModule(String module) { + this.module = module; + } + + public String getValidForm() { + return validForm; + } + + public void setValidForm(String validForm) { + this.validForm = validForm; + } + + public String getChineseName() { + return chineseName; + } + + public void setChineseName(String chineseName) { + this.chineseName = chineseName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getFormatString() { + return formatString; + } + + public void setFormatString(String formatString) { + this.formatString = formatString; + } + + public String[] getParamArray() { + return paramArray; + } + + public void setParamArray(String[] paramArray) { + this.paramArray = paramArray; + } + + public String getReturnType() { + return returnType; + } + + public void setReturnType(String returnType) { + this.returnType = returnType; + } + + public JSONObject getJsonFormat() { + return jsonFormat; + } + + public void setJsonFormat(JSONObject jsonFormat) { + this.jsonFormat = jsonFormat; + } + + public String[] getParamData() { + return paramData; + } + + public void setParamData(String[] paramData) { + this.paramData = paramData; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java b/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java new file mode 100644 index 000000000..92ddf028d --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java @@ -0,0 +1,495 @@ +package com.engine.salary.formlua.entity.parameter; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.i18n.label.SystemEnv; +import com.weaver.excel.formula.core.rpc.ExcelDubboInvoker; +import com.weaver.excel.formula.core.rpc.RemoteExcelExtendFuncService; +import com.weaver.excel.formula.core.rpc.RpcMethod; +import org.apache.commons.compress.utils.Lists; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + + +@Component +public class ExcelFuncs { + protected final Logger logger = LoggerFactory.getLogger(getClass()); + final static private String ALLFORM="all"; + final static private String CURRENTDATA="current_data"; + static String normalStr="{\"key\":\"\",\"fieldId\":\"\",\"componentKey\":\"\",\"term\":\"\",\"formId\":\"\",\"content\":\"\",\"fieldType\":\"\"}"; + static public JSONObject normalJson= JSON.parseObject(normalStr); + static private String[] nullParamDatas=new String[]{}; + static private String[] paramDatas=new String[]{}; + static private String[] allParamDatas=new String[]{"{}","[]"}; + static private String[] moduleList=new String[]{"biaoge","workflow"}; + @Autowired + ExcelDubboInvoker excelDubboInvoker; + + @Autowired + private FuncDescUtil funcDescUtil; + public List getCompList(){ + //比较操作符 + List compList=new LinkedList<>(); + ExcelFunc excelFunc=null; + String [] paramArray=new String[]{}; + excelFunc=new ExcelFunc(">",SystemEnv.getHtmlLabelName(12132,"大于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + compList.add(excelFunc); + + excelFunc=new ExcelFunc(">=",SystemEnv.getHtmlLabelName(27694,"大于等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + compList.add(excelFunc); + + excelFunc=new ExcelFunc("<",SystemEnv.getHtmlLabelName(20009,"小于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + compList.add(excelFunc); + + excelFunc=new ExcelFunc("<=",SystemEnv.getHtmlLabelName(15251,"小于等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + compList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("=",SystemEnv.getHtmlLabelName(15112,"等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + compList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("!=",SystemEnv.getHtmlLabelName(14897,"不等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + compList.add(excelFunc); + + return compList; + } + + /** + * 日期函数的列表 + * @return + */ + public List getDateList(){ + //日期函数 + List dateList=new LinkedList<>(); + ExcelFunc excelFunc=null; + String [] paramArray=new String[]{}; + excelFunc=new ExcelFunc("TODAY",SystemEnv.getHtmlLabelName(94924,"当前日期"), funcDescUtil.get("TODAY"),"TODAY()",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("NOW",SystemEnv.getHtmlLabelName(94925,"当前日期时间"), funcDescUtil.get("NOW"),"NOW()",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("DATEADD",SystemEnv.getHtmlLabelName(94926,"对日期加减年、月、日"), funcDescUtil.get("DATEADD"),"DATEADD(日期, 数值, ['单位'])",nullParamDatas,paramArray,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("DATEDIFF",SystemEnv.getHtmlLabelName(94927,"返回两个日期的差值"), funcDescUtil.get("DATEDIFF"),"DATEDIFF(日期1, 日期2, ['单位'])",nullParamDatas,paramArray,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("DATEFORMAT",SystemEnv.getHtmlLabelName(94928,"返回指定格式的日期"), funcDescUtil.get("DATEFORMAT"),"DATEFORMAT(日期, '可选格式')",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("YEAR",SystemEnv.getHtmlLabelName(94929,"返回日期中的年"), funcDescUtil.get("YEAR"),"YEAR(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{"String"}; + excelFunc=new ExcelFunc("MONTH",SystemEnv.getHtmlLabelName(94930,"返回日期中的月"), funcDescUtil.get("MONTH"),"MONTH(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("DAY",SystemEnv.getHtmlLabelName(94931,"返回日期中的日"), funcDescUtil.get("DAY"),"DAY(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("HOUR",SystemEnv.getHtmlLabelName(94932,"返回日期中的小时"), funcDescUtil.get("HOUR"),"HOUR(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("MINUTE",SystemEnv.getHtmlLabelName(94933,"返回日期中的分钟"), funcDescUtil.get("MINUTE"),"MINUTE(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("SECOND",SystemEnv.getHtmlLabelName(94934,"返回日期中的秒"), funcDescUtil.get("SECOND"),"SECOND(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("WEEKNUM",SystemEnv.getHtmlLabelName(94936,"返回日期为第几周"), funcDescUtil.get("WEEKNUM"),"WEEKNUM(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("WEEKDAY",SystemEnv.getHtmlLabelName(94937,"返回日期为星期几"), funcDescUtil.get("WEEKDAY"),"WEEKDAY(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("NETWORKDAYSPI",SystemEnv.getHtmlLabelName(94938,"返回指定日期之间包含的工作日天数(仅限的过去时间)"), funcDescUtil.get("NETWORKDAYSPI"),"NETWORKDAYSPI(日期1, 日期2, 成员)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("EOMONTH",SystemEnv.getHtmlLabelName(94939,"返回某月最后一天日期"), funcDescUtil.get("EOMONTH"),"EOMONTH(日期,指定日期之前或之后的月数)",paramArray,nullParamDatas,"Number",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("CURRYEAR",SystemEnv.getHtmlLabelName(101059,"返回当前年份"), funcDescUtil.get("CURRYEAR"),"CURRYEAR()",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("CURRMONTH",SystemEnv.getHtmlLabelName(101060,"返回当前月份"), funcDescUtil.get("CURRMONTH"),"CURRMONTH()",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("CURRDAY",SystemEnv.getHtmlLabelName(101061,"返回当前第几日(当月)"), funcDescUtil.get("CURRDAY"),"CURRDAY()",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("CURRWEEK",SystemEnv.getHtmlLabelName(101062,"返回当前是周几"), funcDescUtil.get("CURRWEEK"),"CURRWEEK()",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("CURRHOUR",SystemEnv.getHtmlLabelName(101063,"返回当前小时"), funcDescUtil.get("CURRHOUR"),"CURRHOUR()",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("CURRMINUTE",SystemEnv.getHtmlLabelName(101064,"返回当前分"), funcDescUtil.get("CURRMINUTE"),"CURRMINUTE()",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("CURRSECOND",SystemEnv.getHtmlLabelName(101065,"返回当前秒"), funcDescUtil.get("CURRSECOND"),"CURRSECOND()",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + paramArray=new String[]{}; + excelFunc=new ExcelFunc("MAXDATE",SystemEnv.getHtmlLabelName(100803,"返回一组日期中的最大值"), funcDescUtil.get("MAXDATE"),"MAXDATE(日期1,日期2,……)",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("MINDATE",SystemEnv.getHtmlLabelName(100805,"返回一组日期中的最小值"), funcDescUtil.get("MINDATE"),"MINDATE(日期1,日期2,……)",paramArray,nullParamDatas,"String",CURRENTDATA); + dateList.add(excelFunc); + return dateList; + } + + /** + * 逻辑函数的列表 + * @return + */ + public List getLogicList(){ + //逻辑函数 + List logicList=new LinkedList<>(); + ExcelFunc excelFunc=null; + String [] paramArray=new String[]{}; + excelFunc=new ExcelFunc("IF",SystemEnv.getHtmlLabelName(94940,"如果条件为真,则...否则..."), funcDescUtil.get("IF"),"IF(条件, 表达式1, 表达式2)",paramArray,nullParamDatas,"Object",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("AND",SystemEnv.getHtmlLabelName(51100,"且"), funcDescUtil.get("AND"),"AND(条件1, 条件2, [条件3, …])",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("OR",SystemEnv.getHtmlLabelName(35824,"或"), funcDescUtil.get("OR"),"OR(条件1, 条件2, [条件3, …])",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("NOT",SystemEnv.getHtmlLabelName(94942,"反转真假结果"), funcDescUtil.get("NOT"),"NOT(逻辑结果)",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("IN",SystemEnv.getHtmlLabelName(94943,"变量是否包含在一组结果中"), funcDescUtil.get("IN"),"IN(变量, [变量1, 变量2, …])",paramArray,allParamDatas,"Boolean",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("LIKE",SystemEnv.getHtmlLabelName(94944,"文本是否包含任意一个关键字"), funcDescUtil.get("LIKE"),"LIKE(文本, [文本1, 文本2, …])",paramArray,allParamDatas,"Boolean",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("ISEMPTY",SystemEnv.getHtmlLabelName(94945,"是否为空"), funcDescUtil.get("ISEMPTY"),"ISEMPTY(变量)",paramArray,paramDatas,"Boolean",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("TRUE",SystemEnv.getHtmlLabelName(94946,"返回真"), funcDescUtil.get("TRUE"),"TRUE()",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("FALSE",SystemEnv.getHtmlLabelName(94947,"返回假"), funcDescUtil.get("FALSE"),"FALSE()",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("IFS",SystemEnv.getHtmlLabelName(94948,"多条件"), funcDescUtil.get("IFS"),"IFS({条件1},{结果1},{条件2},{结果2}...{默认结果})",paramArray,nullParamDatas,"Object",CURRENTDATA); + logicList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("FIND",SystemEnv.getHtmlLabelName(31835,"查找"), funcDescUtil.get("FIND"),"FIND([{查找值1},{查找值2}...{查找值N}],[{查找目标1},{查找目标2}...{查找目标N}])",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + logicList.add(excelFunc); + return logicList; + } + + /** + * 字符函数的列表 + * @return + */ + public List getStringList(){ + //字符函数 + List stringList=new LinkedList<>(); + ExcelFunc excelFunc=null; + String [] paramArray=new String[]{}; + excelFunc=new ExcelFunc("CONCAT",SystemEnv.getHtmlLabelName(94949,"链接多个文本"), funcDescUtil.get("CONCAT"),"CONCAT(文本1, 文本2, [文本3, …])",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("TEXT",SystemEnv.getHtmlLabelName(94950,"将变量转为文本"), funcDescUtil.get("TEXT"),"TEXT(变量)",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("VALUE",SystemEnv.getHtmlLabelName(94951,"将文本转为数字"), funcDescUtil.get("VALUE"),"VALUE(文本)",paramArray,nullParamDatas,"Number",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("LEN",SystemEnv.getHtmlLabelName(94952,"返回文本长度"), funcDescUtil.get("LEN"),"LEN(文本)",paramArray,nullParamDatas,"Number",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("SEARCH",SystemEnv.getHtmlLabelName(94953,"在文本中查找关键字"), funcDescUtil.get("SEARCH"),"SEARCH(关键字, 文本, [搜索开始位置])",paramArray,nullParamDatas,"Number",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("REPLACE",SystemEnv.getHtmlLabelName(94954,"替换文本中的字"), funcDescUtil.get("REPLACE"),"REPLACE(原文本, 替换开始位置, 替换字符数, 新文本)",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("REPT",SystemEnv.getHtmlLabelName(94955,"将文本重复指定次数"), funcDescUtil.get("REPT"),"REPT(文本, 重复次数)",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("PAD",SystemEnv.getHtmlLabelName(94956,"将文本填充至指定长度"), funcDescUtil.get("PAD"),"PAD(原文本, 长度, 填充用的文本, ['填充位置'])",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("TRIM",SystemEnv.getHtmlLabelName(94957,"清除前后空格"), funcDescUtil.get("TRIM"),"TRIM(文本)",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("LEFT",SystemEnv.getHtmlLabelName(94958,"返回文本左侧开始的文字"), funcDescUtil.get("LEFT"),"LEFT(文本, 截取字符数)",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("RIGHT",SystemEnv.getHtmlLabelName(94959,"返回文本右侧开始的文字"), funcDescUtil.get("RIGHT"),"RIGHT(文本, 截取字符数)",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("MID",SystemEnv.getHtmlLabelName(94960,"返回文本指定位置开始的文字"), funcDescUtil.get("MID"),"MID(文本, 指定位置, 截取字符数)",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("SCORE",SystemEnv.getHtmlLabelName(94961,"获取选项型控件分数"), funcDescUtil.get("SCORE"),"SCORE({选项型控件})",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("IDCARD",SystemEnv.getHtmlLabelName(94962,"身份证函数"), funcDescUtil.get("IDCARD"),"IDCARD({身份证号码}, {查找类型})",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + + + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("ISSTRING",SystemEnv.getHtmlLabelName(0,"是否是字符串"), funcDescUtil.get("ISSTRING"),"ISSTRING({任意控件})",paramArray,nullParamDatas,"String",CURRENTDATA); + stringList.add(excelFunc); + +// paramArray=new String[]{}; +// excelFunc=new ExcelFunc("SUBSTRING",SystemEnv.getHtmlLabelName(97524,"字符截取函数"), funcDescUtil.get("SUBSTRING"),"SUBSTRING({源字符}, {截取开始位置},{截取结束位置})",paramArray,nullParamDatas,"String",CURRENTDATA); +// stringList.add(excelFunc); +// paramArray=new String[]{}; +// excelFunc=new ExcelFunc("SUBSTITUE",SystemEnv.getHtmlLabelName(97525,"字符查找替换函数"), funcDescUtil.get("SUBSTITUE"),"SUBSTITUE({源字符}, {被替换字符},{新字符})",paramArray,nullParamDatas,"String",CURRENTDATA); +// stringList.add(excelFunc); +// paramArray=new String[]{}; +// excelFunc=new ExcelFunc("LOWER",SystemEnv.getHtmlLabelName(97526,"字符转小写函数"), funcDescUtil.get("LOWER"),"LOWER({源字符})",paramArray,nullParamDatas,"String",CURRENTDATA); +// stringList.add(excelFunc); +// paramArray=new String[]{}; +// excelFunc=new ExcelFunc("UPPER",SystemEnv.getHtmlLabelName(97527,"字符转大写函数"), funcDescUtil.get("UPPER"),"UPPER({源字符})",paramArray,nullParamDatas,"String",CURRENTDATA); +// stringList.add(excelFunc); +// paramArray=new String[]{}; +// excelFunc=new ExcelFunc("EXACT",SystemEnv.getHtmlLabelName(97528,"字符比较函数"), funcDescUtil.get("EXACT"),"EXACT({字符1}, {字符2})",paramArray,nullParamDatas,"String",CURRENTDATA); +// stringList.add(excelFunc); + return stringList; + } + + /** + * 数学函数的列表 + * @return + */ + public List getMathList(){ + List mathList=new LinkedList<>(); + ExcelFunc excelFunc=null; + String [] paramArray=new String[]{}; + excelFunc=new ExcelFunc("ROUNDUP",SystemEnv.getHtmlLabelName(94963,"向上舍入"), funcDescUtil.get("ROUNDUP"),"ROUNDUP(数值, [小数位精确度])",paramArray,nullParamDatas,"Number",CURRENTDATA); + mathList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("ROUND",SystemEnv.getHtmlLabelName(17392,"四舍五入"), funcDescUtil.get("ROUND"),"ROUND(数值, [小数位精确度])",paramArray,nullParamDatas,"Number",CURRENTDATA); + mathList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("ROUNDDOWN",SystemEnv.getHtmlLabelName(94964,"向下舍入"), funcDescUtil.get("ROUNDDOWN"),"ROUNDDOWN(数值, [小数位精确度])",paramArray,nullParamDatas,"Number",CURRENTDATA); + mathList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("AGGREGATION",SystemEnv.getHtmlLabelName(94965,"聚合运算"), funcDescUtil.get("AGGREGATION"),"AGGREGATION({数字}...,{聚合运算类型})",paramArray,nullParamDatas,"Number",CURRENTDATA); + mathList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("MOD",SystemEnv.getHtmlLabelName(94966,"求余"), funcDescUtil.get("MOD"),"ROUNDDOWN({数字},{数字})",paramArray,nullParamDatas,"Number",CURRENTDATA); + mathList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("TRUNC",SystemEnv.getHtmlLabelName(94967,"数字格式化"), funcDescUtil.get("TRUNC"),"ROUNDDOWN({数字},{精度})",paramArray,nullParamDatas,"Number",CURRENTDATA); + mathList.add(excelFunc); + + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("ISINT",SystemEnv.getHtmlLabelName(0,"字符内容是否是整数"), funcDescUtil.get("ISINT"),"ISINT({字符})",paramArray,nullParamDatas,"String",CURRENTDATA); + mathList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("ISNUMBER",SystemEnv.getHtmlLabelName(0,"字符内容是否是数字"), funcDescUtil.get("ISNUMBER"),"ISNUMBER({字符})",paramArray,nullParamDatas,"String",CURRENTDATA); + mathList.add(excelFunc); + + return mathList; + + } + + /** + * 查找函数的列表 + * @return + */ + public List getFindList(){ + List findList=new LinkedList<>(); + ExcelFunc excelFunc=null; + String [] paramArray=new String[]{}; + excelFunc=new ExcelFunc("CHOOSE",SystemEnv.getHtmlLabelName(94968,"返回索引范围内指定的值"), funcDescUtil.get("CHOOSE"),"CHOOSE(数据源,[条件])",paramArray,nullParamDatas,"Array",CURRENTDATA); + findList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("VLOOKUPS",SystemEnv.getHtmlLabelName(94969,"按列查找,返回所需值"), funcDescUtil.get("VLOOKUPS"),"VLOOKUPS(表,[条件],[返回参数])",paramArray,nullParamDatas,"Array",CURRENTDATA); + findList.add(excelFunc); + + paramArray=new String[]{}; + excelFunc=new ExcelFunc("MATCH",SystemEnv.getHtmlLabelName(94970,"返回指定数值在指定数组区域中的位置"), funcDescUtil.get("MATCH"),"MATCH(值,[数组])",paramArray,nullParamDatas,"Number",CURRENTDATA); + findList.add(excelFunc); + return findList; + } + + /** + * 聚合函数 COUNT(表格, [统计条件]) + * @return + */ + public List getAggList(){ + List aggList=new LinkedList<>(); + ExcelFunc excelFunc=null; + + String [] paramArray=new String[]{"Form","Number","Boolean"}; + excelFunc=new ExcelFunc("COUNT", SystemEnv.getHtmlLabelName(16654,"计数"), funcDescUtil.get("COUNT"),"COUNT(表格)",paramArray,paramDatas,"Number",ALLFORM); + aggList.add(excelFunc); + + paramArray=new String[]{"Number","Number","Boolean"}; + excelFunc=new ExcelFunc("SUM",SystemEnv.getHtmlLabelName(95012,"求和") , funcDescUtil.get("SUM"),"SUM(数字字段)",paramArray,paramDatas,"Number",ALLFORM); + aggList.add(excelFunc); + + paramArray=new String[]{"Number","Number","Boolean"}; + excelFunc=new ExcelFunc("AVG",SystemEnv.getHtmlLabelName(19550,"平均值"), funcDescUtil.get("AVG"),"AVG(数字字段)",paramArray,paramDatas,"Number",ALLFORM); + aggList.add(excelFunc); + + paramArray=new String[]{"Number","Number","Boolean"}; + excelFunc=new ExcelFunc("MIN",SystemEnv.getHtmlLabelName(12318,"最小值"), funcDescUtil.get("MIN"),"MIN(表格)",paramArray,paramDatas,"Number",ALLFORM); + aggList.add(excelFunc); + + paramArray=new String[]{"Number","Number","Boolean"}; + excelFunc=new ExcelFunc("MAX",SystemEnv.getHtmlLabelName(66750,"最大值"), funcDescUtil.get("MAX"),"MAX(表格)",paramArray,paramDatas,"Number",ALLFORM); + aggList.add(excelFunc); + return aggList; + } + + /** + * 财务类函数列表 + * @return + */ + public Object getFinanceList(){ + ExcelFunc excelFunc = null; + List funcs = Lists.newArrayList(); + excelFunc = new ExcelFunc("GETMONEY",SystemEnv.getHtmlLabelName(0,"获取锁给定数字的金额大写"), funcDescUtil.get("GETMONEY"),"GETMONEY({数字})",null,nullParamDatas,"",CURRENTDATA); + funcs.add(excelFunc); + + return funcs; + } + /** + * 数据库函数列表 + * @return + */ + public Object getDataBaseList() { + ExcelFunc excelFunc = null; + List funcs = Lists.newArrayList(); + +// excelFunc = new ExcelFunc("GETHRMLOGINID",SystemEnv.getHtmlLabelName(100807,"返回指定人员系统账号"), funcDescUtil.get("GETHRMLOGINID"),"GETHRMLOGINID({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETHRMWORKCODE",SystemEnv.getHtmlLabelName(100809,"返回指定人员编号"), funcDescUtil.get("GETHRMWORKCODE"),"GETHRMWORKCODE({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETHRMMANAGER",SystemEnv.getHtmlLabelName(100811,"返回指定人员直接上级"), funcDescUtil.get("GETHRMMANAGER"),"GETHRMMANAGER({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETHRMALLMANAGER",SystemEnv.getHtmlLabelName(100813,"返回指定人员所有上级"), funcDescUtil.get("GETHRMALLMANAGER"),"GETHRMALLMANAGER({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETHRMDEPARTMENT",SystemEnv.getHtmlLabelName(100815,"返回指定人员部门"), funcDescUtil.get("GETHRMDEPARTMENT"),"GETHRMDEPARTMENT({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETHRMSUBCOMPANY",SystemEnv.getHtmlLabelName(100817,"返回指定人员分部"), funcDescUtil.get("GETHRMSUBCOMPANY"),"GETHRMSUBCOMPANY({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETDEPARTMENTNAME",SystemEnv.getHtmlLabelName(100819,"返回指定部门名称"), funcDescUtil.get("GETDEPARTMENTNAME"),"GETDEPARTMENTNAME({表单.部门})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETDEPARTMENTCODE",SystemEnv.getHtmlLabelName(100821,"返回指定部门编号"), funcDescUtil.get("GETDEPARTMENTCODE"),"GETDEPARTMENTCODE({表单.部门})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETSUPERDEPARTMENT",SystemEnv.getHtmlLabelName(100823,"返回指定部门直接上级部门"), funcDescUtil.get("GETSUPERDEPARTMENT"),"GETSUPERDEPARTMENT({表单.部门})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETALLSUPERDEPARTMENT",SystemEnv.getHtmlLabelName(100825,"返回指定部门所有上级部门"), funcDescUtil.get("GETALLSUPERDEPARTMENT"),"GETALLSUPERDEPARTMENT({表单.部门})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETSUBCOMPANYNAME",SystemEnv.getHtmlLabelName(100827,"返回指定分部名称"), funcDescUtil.get("GETSUBCOMPANYNAME"),"GETSUBCOMPANYNAME({表单.分部})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETSUBCOMPANYCODE",SystemEnv.getHtmlLabelName(100829,"返回指定分部编号"), funcDescUtil.get("GETSUBCOMPANYCODE"),"GETSUBCOMPANYCODE({表单.分部})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETSUPERSUBCOMPANY",SystemEnv.getHtmlLabelName(100831,"返回指定分部直接上级分部"), funcDescUtil.get("GETSUPERSUBCOMPANY"),"GETSUPERSUBCOMPANY({表单.分部})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); +// +// excelFunc = new ExcelFunc("GETALLSUPERSUBCOMPANY",SystemEnv.getHtmlLabelName(100833,"返回指定分部所有上级分部"), funcDescUtil.get("GETALLSUPERSUBCOMPANY"),"GETALLSUPERSUBCOMPANY({表单.分部})",null,nullParamDatas,"",CURRENTDATA); +// funcs.add(excelFunc); + + excelFunc = new ExcelFunc("GETHRMNAME",SystemEnv.getHtmlLabelName(100833,"获取人员名称"), funcDescUtil.get("GETHRMNAME"),"GETHRMNAME({人员})",null,nullParamDatas,"",CURRENTDATA); + funcs.add(excelFunc); + + excelFunc = new ExcelFunc("GETHRMMOBILE",SystemEnv.getHtmlLabelName(100833,"获取人员手机号码"), funcDescUtil.get("GETHRMMOBILE"),"GETHRMMOBILE({人员})",null,nullParamDatas,"",CURRENTDATA); + funcs.add(excelFunc); + + return funcs; + } + + public List getOtherFuncs(){ + List otherFuncs=new ArrayList<>(); + for(int i=0;i moduleFuncs=(List)result; + if(moduleFuncs.size()>0){ + otherFuncs.addAll(moduleFuncs); + } + } + } catch (Exception e) { + logger.error("err",e); + } + } + return otherFuncs; + } +} diff --git a/src/com/engine/salary/formlua/entity/parameter/FormulaContext.java b/src/com/engine/salary/formlua/entity/parameter/FormulaContext.java new file mode 100644 index 000000000..d51715e23 --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/FormulaContext.java @@ -0,0 +1,35 @@ +package com.engine.salary.formlua.entity.parameter; + +import com.alibaba.fastjson.JSONObject; + + +public class FormulaContext { + public static ThreadLocal fmCtx=new ThreadLocal(); + + private JSONObject formulaJson=new JSONObject(); + + public static FormulaContext get(){ + if(null==fmCtx.get()){ + fmCtx.set(new FormulaContext()); + } + return fmCtx.get(); + } + + public JSONObject getFormulaJson() { + return formulaJson; + } + public void setValue(String func){ + if(formulaJson.getInteger(func)!=null){ + int i=formulaJson.getInteger(func)+1; + formulaJson.put(func,i); + }else { + formulaJson.put(func,1); + } + } + public Integer getValue(String func){ + return formulaJson.getInteger(func); + } + public void removeContext(){ + fmCtx.remove(); + } +} \ No newline at end of file diff --git a/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java b/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java new file mode 100644 index 000000000..1b0ea6889 --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java @@ -0,0 +1,132 @@ +package com.engine.salary.formlua.entity.parameter; + +import com.weaver.common.i18n.label.SystemEnv; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + + +@Component +public class FuncDescUtil { + protected final Logger logger = LoggerFactory.getLogger(FuncDescUtil.class); + Map funcMap=new HashMap(); + public void initData(){ + //聚合函数 + funcMap.put("COUNT",SystemEnv.getHtmlLabelName(94986,"返回指定表格中满足条件的数据条数。示例:COUNT({员工表})")); + funcMap.put("SUM",SystemEnv.getHtmlLabelName(94987,"返回指定表格中满足条件的数据,其指定数字字段值的总和。统计条件中不可嵌套使用统计函数。示例:SUM({员工表.工资})")); + funcMap.put("AVG",SystemEnv.getHtmlLabelName(94988,"返回指定表格中满足条件的数据,其指定数字字段值的平均值。统计条件中不可嵌套使用统计函数。示例:AVG({员工表.工资})")); + funcMap.put("MIN",SystemEnv.getHtmlLabelName(94989,"返回指定表格中满足条件的数据,其指定数字字段值的最小值。统计条件中不可嵌套使用统计函数。示例:MIN({员工表.工资})")); + funcMap.put("MAX",SystemEnv.getHtmlLabelName(94990,"返回指定表格中满足条件的数据,其指定数字字段值的最大值。统计条件中不可嵌套使用统计函数。示例:MAX({员工表.工资})")); + //日期函数 + funcMap.put("TODAY",SystemEnv.getHtmlLabelName(97678,"返回当天日期。示例:TODAY() 结果: '2020-01-01'")); + funcMap.put("NOW",SystemEnv.getHtmlLabelName(97689,"返回当天日期+时间。示例:NOW() 结果: '2016-12-24 12:05:38'")); + funcMap.put("DATEADD",SystemEnv.getHtmlLabelName(97691,"对日期加减按照单位加减。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。示例:
DATEADD('2016-12-21', 3) 结果: '2016-12-24'
DATEADD('2016-12-24 20:00:00', 3, 'H') 结果: '2016-12-24 23:00:00'")); + funcMap.put("DATEDIFF",SystemEnv.getHtmlLabelName(97692,"根据指定的单位,返回日期2减去日期1的差值。当日期2小于日期1时,差值为负值。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。
示例:
DATEDIF('2016-12-21', '2016-12-24') 结果: 3
DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H') 结果: 24")); + funcMap.put("DATEFORMAT",SystemEnv.getHtmlLabelName(97693,"将日期转为指定格式返回。 示例:
DATEFORMAT('2016-12-24', 'YY年MM月DD日') 结果: 2016年12月24日
yyyy 将年份显示为1900-9999
yy 将年份显示为00-99
mm 将月份显示为 01–12
dd 将日期显示为 01–31")); + funcMap.put("YEAR",SystemEnv.getHtmlLabelName(97694,"返回指定日期中的年。示例:
YEAR('2016-12-24') 结果: 2016")); + funcMap.put("MONTH",SystemEnv.getHtmlLabelName(97695,"返回指定日期中的月。示例:
MONTH('2016-12-24') 结果: 12")); + funcMap.put("DAY",SystemEnv.getHtmlLabelName(97696,"返回指定日期中的日。示例:
DAY('2016-12-24') 结果: 24")); + funcMap.put("HOUR",SystemEnv.getHtmlLabelName(97697,"返回指定日期中的小时。示例:
HOUR('2016-12-24 20:30:56') 结果: 20")); + funcMap.put("MINUTE",SystemEnv.getHtmlLabelName(97698,"返回指定日期中的分钟。示例:
MINUTE('2016-12-24 20:30:56') 结果: 30")); + funcMap.put("SECOND",SystemEnv.getHtmlLabelName(97699,"返回指定日期中的秒钟。示例:
SECOND('2016-12-24 20:30:56') 结果: 56")); + funcMap.put("WEEKNUM",SystemEnv.getHtmlLabelName(97700,"返回指定日期为第几周,从每年第1天开始算第1周。示例:
WEEKNUM('2016-12-24') 结果: 52")); + funcMap.put("WEEKDAY",SystemEnv.getHtmlLabelName(97701,"返回指定日期为星期几。返回值为0~6,代表周日~周六。示例:
WEEKDAY('2016-12-24') 结果: 6")); + funcMap.put("EOMONTH",SystemEnv.getHtmlLabelName(97702,"将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。
示例:EOMONTH('2021-11-07', -2)
结果:2021-09-30")); + funcMap.put("NETWORKDAYSPI",SystemEnv.getHtmlLabelName(97703,"将指定日期(仅限的过去时间,最大支持跨度为365天)之间包含的工作日天数返回。注意:此函数只能选择过去的时间才可使用,跨度不能超过365天。当日期2小于日期1时,差值为负值。单位默认为日。
示例:想知道李四在2021-11-07和2021-11-12之间的工作日天数。
NETWORKDAYSPI('2021-11-07', '2021-11-12','李四')
结果:5")); + funcMap.put("MAXDATE", SystemEnv.getHtmlLabelName(100804, "取一组日期中的最大值。示例:
MAXDATE('2016-12-24', '2022-12-24') 结果: 2022-12-24")); + funcMap.put("MINDATE", SystemEnv.getHtmlLabelName(100806, "取一组日期中的最小值。示例:
MINDATE('2016-12-24', '2022-12-24') 结果: 2016-12-24")); + //日期中的当前时间操作 + funcMap.put("CURRYEAR", SystemEnv.getHtmlLabelName(101066, "取当前日期的年份。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRYEAR() 结果: 2022")); + funcMap.put("CURRMONTH", SystemEnv.getHtmlLabelName(101067, "取当前日期的月份。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRMONTH() 结果: 2")); + funcMap.put("CURRDAY", SystemEnv.getHtmlLabelName(101068, "取当前日期的天。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRDAY() 结果: 17")); + funcMap.put("CURRWEEK", SystemEnv.getHtmlLabelName(101069, "取当前日期是周几。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRWEEK() 结果: 4")); + funcMap.put("CURRHOUR", SystemEnv.getHtmlLabelName(101070, "取当前日期的小时。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRHOUR() 结果: 11")); + funcMap.put("CURRMINUTE", SystemEnv.getHtmlLabelName(101071, "取当前日期的分钟。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRMINUTE() 结果: 20")); + funcMap.put("CURRSECOND", SystemEnv.getHtmlLabelName(101072, "取当前日期的秒钟。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRSECOND() 结果: 30")); + + //逻辑函数 + funcMap.put("IF",SystemEnv.getHtmlLabelName(97704,"如果条件为真,则执行表达式1,为假则执行表达式2。条件中不可嵌套使用IF函数。示例:
IF({员工表.年龄} > 60, '退休', '在职')、IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')")); + funcMap.put("AND",SystemEnv.getHtmlLabelName(97705,"所有条件均为真,则返回真,否则返回假。逻辑操作AND的函数模式。示例:
AND(2 = 2, 2 < 2)")); + funcMap.put("OR",SystemEnv.getHtmlLabelName(97706,"任意一个条件为真,则返回真,否则返回假。逻辑操作OR的函数模式。示例:
OR(2 = 2, 2 > 3)")); + funcMap.put("NOT",SystemEnv.getHtmlLabelName(97707,"对逻辑结果取反。示例:
NOT(2 > 3)")); + funcMap.put("IN",SystemEnv.getHtmlLabelName(97708,"任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。示例:
IN(2, [2, 3, 4])")); + funcMap.put("LIKE",SystemEnv.getHtmlLabelName(97709,"文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个,则返回真。逻辑操作LIKE的函数模式。示例:
LIKE('大家好', ['大家', '好'])")); + funcMap.put("TRUE",SystemEnv.getHtmlLabelName(97710,"返回真。示例:TRUE()")); + funcMap.put("FALSE",SystemEnv.getHtmlLabelName(97712,"返回假。示例:FALSE()")); + funcMap.put("IFS",SystemEnv.getHtmlLabelName(97713,"多个条件判断,位于单数位置的参数设置为条件,位于双数位置的参数设置为结果,最后一个参数为默认返回值,当所有条件都不满足的时候返回默认参数。示例:IFS(1>1,1,1=1,2,0),结果:2")); + funcMap.put("FIND",SystemEnv.getHtmlLabelName(97714,"用指定参数去另一个参数列表中查找匹配项,指定参数时,填写1则去第一个参数列表中查找,2则是第二个参数列表里匹配查找第一个参数,成功则返回true,失败返回false。示例:FIND([1,2,3],[1,2,3,4],1),结果:true")); + + //文本函数 + funcMap.put("CONCAT",SystemEnv.getHtmlLabelName(97730,"可用于连接多个任意类型的文本、日期、数字变量或常量。示例:
CONCAT({总价}/10000, '万元')")); + funcMap.put("TEXT",SystemEnv.getHtmlLabelName(97731,"将变量转为文本。示例:
TEXT({当前数据.性别}) 结果: '男'")); + funcMap.put("VALUE",SystemEnv.getHtmlLabelName(97732,"将文本转为数字。示例:
VALUE('23') 结果: 23")); + funcMap.put("LEN",SystemEnv.getHtmlLabelName(97733,"返回文本的长度,中文、英文都算1个字符。示例:
LEN('大家好dajiahao') 结果: 12")); + funcMap.put("SEARCH",SystemEnv.getHtmlLabelName(97734,"在指定文本中查找关键字,返回第一次出现关键字的字符位置,文本的第一个字记为1。未找到,返回0。搜索开始位置,表示从文本的第几个字符开始搜索,默认为1。示例:
SEARCH('大家', '大家好大家好', 3) 结果: 4")); + funcMap.put("REPLACE",SystemEnv.getHtmlLabelName(97735,"在原文本中,从替换位置开始,往后数指定的替换字符数,将这段文本替换为新文本。示例:
REPLACE('大家好大家好', 2, 3, 'dajia') 结果: '大dajia家好'")); + funcMap.put("REPT",SystemEnv.getHtmlLabelName(97736,"将文本重复指定次数。示例:
REPT('大家', 2) 结果: '大家大家'")); + funcMap.put("PAD",SystemEnv.getHtmlLabelName(97737,"将原文本填充到指定长度,如果文本长度大于设置的长度,则不做任何操作。填充位置可用参数:'LEFT'、'RIGHT'。示例:
PAD('你好', 4, '你', 'LEFT') 结果: '你你你好'")); + funcMap.put("TRIM",SystemEnv.getHtmlLabelName(97738,"删除文本首尾的空格。示例:
TRIM(' 大家好 ') 结果: '大家好'")); + funcMap.put("LEFT",SystemEnv.getHtmlLabelName(97739,"从文本左侧开始,返回指定字符数的文字。示例:
LEFT('大家好', 2) 结果: '大家'")); + funcMap.put("RIGHT",SystemEnv.getHtmlLabelName(97740,"从文本右侧开始,返回指定字符数的文字。示例:
RIGHT('大家好', 2) 结果: '家好'")); + funcMap.put("MID",SystemEnv.getHtmlLabelName(97741,"从文本指定位置之后开始,返回指定字符数的文字。示例:
MID('大家好', 2, 1) 结果: '家'")); + funcMap.put("ISEMPTY",SystemEnv.getHtmlLabelName(97742,"变量为空或未填写,则返回真。示例:
ISEMPTY({员工表.电话})")); + funcMap.put("IDCARD",SystemEnv.getHtmlLabelName(97743,"从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。示例:
IDCARD( ‘43070319980706334X’ , ‘BD’ ) 结果: '1998-07-06'")); + funcMap.put("SCORE",SystemEnv.getHtmlLabelName(97744,"获取选项型控件(单选框、复选框、下拉菜单)分数。示例:SCORE({当前数据.单选框}) 结果:选项分数
注:未设置选项分数时,结果为0")); + funcMap.put("SUBSTRING", SystemEnv.getHtmlLabelName(97745,"字符截取函数,用于按起始位置截取字符。
示例:SUBSTRING('abcdefg',2,3)
结果:bc")); + funcMap.put("SUBSTITUE", SystemEnv.getHtmlLabelName(97746,"字符查找替换函数,替换字符中的所有关键词为新字符。
示例:SUBSTITUE('泛微移动办公','泛微','eteams')
结果:eteams移动办公")); + funcMap.put("LOWER", SystemEnv.getHtmlLabelName(97747,"将字符中的字母转为小写。
示例:LOWER('abc')
结果:ABC")); + funcMap.put("UPPER", SystemEnv.getHtmlLabelName(97748,"将字符中的字母转为大写。
示例:LOWER('ABC')
结果:abc")); + funcMap.put("EXACT", SystemEnv.getHtmlLabelName(97749,"比较两个字符是否相等,区分字母的大小写。
示例:EXACT('泛微Eteams','泛微eteams')
结果:false")); + funcMap.put("ISSTRING", SystemEnv.getHtmlLabelName(0,"判断是否是字符。
示例:ISSTRING('泛微Eteams')
结果:true")); + + //数学函数 + funcMap.put("ROUND",SystemEnv.getHtmlLabelName(97750,"根据设置的小数位精确度,返回对数值四舍五入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,针对小数点后的数据进行四舍五入;如果小数位精确度等于 0,返回最接近数值的整数;如果小数位精确度为负整数,针对小数点前的数据进行四舍五入,被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。
示例:ROUND(123.456,2),ROUND(123.456,0),ROUND(123.456,-2)
结果:依次为123.46,123,100")); + funcMap.put("ROUNDUP",SystemEnv.getHtmlLabelName(97751,"根据设置的小数位精确度,返回对数值向上舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向上舍入到指定的小数位。如果小数位精确度等于 0,则向上舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。示例:ROUNDDOWN(76.9,0)结果:77")); + funcMap.put("ROUNDDOWN",SystemEnv.getHtmlLabelName(97752,"根据设置的小数位精确度,返回对数值向下舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向下舍入到指定的小数位。如果小数位精确度等于 0,则向下舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。
示例:ROUNDDOWN(76.9,0)
结果:76")); + funcMap.put("AGGREGATION",SystemEnv.getHtmlLabelName(97753,"将一组数据进行统计计算,支持最大值(MAX)、最小值(MIN)、平均值(AVG)。示例:AGGREGATION(1 , 2,3,'AVG'),结果:2")); + funcMap.put("MOD",SystemEnv.getHtmlLabelName(97754,"将两个参数进行除法运算然后得出余数返回。示例:MOD( 7 , 3 ),结果:1")); + funcMap.put("TRUNC",SystemEnv.getHtmlLabelName(97755,"将小数点格式化成指定位数。示例:TRUNC( 2.123 , 2 ),结果:2.12")); + funcMap.put("ISINT",SystemEnv.getHtmlLabelName(0,"判断字符内容是否是整数。示例:ISINT( 2.123 ),结果:false")); + funcMap.put("ISNUMBER",SystemEnv.getHtmlLabelName(0,"判断字符内容是否是数字。示例:ISNUMBER('2.123'),结果:true")); + + //查找函数 + funcMap.put("CHOOSE",SystemEnv.getHtmlLabelName(97756,"根据条件获取指定数据源中的全部数据。数据源支持选表单、表单中的字段。
示例:想知道税表中,收入大于15000的数值
CHOOSE({税表}, {税表.收入}>15000)
结果:返回税表中收入大于15000的集合")); + funcMap.put("MATCH",SystemEnv.getHtmlLabelName(97757,"将指定数值在指定数组区域中的位置返回。若数组中无指定值,返回null。
示例:MATCH(15000, [1000, 15000, 2000])
结果:1")); + funcMap.put("VLOOKUPS", SystemEnv.getHtmlLabelName(97758,"按列查找,返回所需值。常用于薪酬模块。根据条件获取查询参数所在列的返回参数的值。返回参数可填写多个,用英文逗号隔开。若查询不到返回null。
示例:VLOOKUPS({税表},{税表.收入},AND({税表.收入}>{税表.应纳税所得额下限},{税表.收入}<{税表.应纳税所得额上限}),[{税表.税率},{税表.速算扣除数}])
结果:按列查找返回税表中收入所在的收入区间所对应的税率和速算扣除数的数值")); + + //数据库函数 + funcMap.put("GETHRMLOGINID", SystemEnv.getHtmlLabelName(100808, "获取指定人员系统账号。
示例:GETHRMLOGINID({表单.张三})
结果:zhangsan@qq.com")); + funcMap.put("GETHRMWORKCODE", SystemEnv.getHtmlLabelName(100810, "获取指定人员编号。
示例:GETHRMWORKCODE({表单.张三})
结果:A001")); + funcMap.put("GETHRMMANAGER", SystemEnv.getHtmlLabelName(100812, "获取指定人员直接上级。
示例:GETHRMMANAGER({表单.张三})
结果:返回张三的直接上级")); + funcMap.put("GETHRMALLMANAGER", SystemEnv.getHtmlLabelName(100814, "获取指定人员所有上级。
示例:GETHRMMANAGER({表单.张三})
结果:返回张三的所有上级形成的数组")); + funcMap.put("GETHRMDEPARTMENT", SystemEnv.getHtmlLabelName(100816, "获取指定人员部门。
示例:GETHRMDEPARTMENT({表单.张三})
结果:返回张三的部门")); + funcMap.put("GETHRMSUBCOMPANY", SystemEnv.getHtmlLabelName(100818, "获取指定人员分部。
示例:GETHRMSUBCOMPANY({表单.张三})
结果:返回张三的分部")); + funcMap.put("GETDEPARTMENTNAME", SystemEnv.getHtmlLabelName(100820, "获取指定部门名称。
示例:GETDEPARTMENTNAME({表单.A部门})
结果:A部门")); + funcMap.put("GETDEPARTMENTCODE", SystemEnv.getHtmlLabelName(100822, "获取指定部门编号。
示例:GETDEPARTMENTCODE({表单.A部门})
结果:A001")); + funcMap.put("GETSUPERDEPARTMENT", SystemEnv.getHtmlLabelName(100824, "获取指定部门直接上级部门。
示例:GETDEPARTMENTCODE({表单.A部门})
结果:A部门的直接上级部门")); + funcMap.put("GETALLSUPERDEPARTMENT", SystemEnv.getHtmlLabelName(100826, "获取指定部门所有上级部门。
示例:GETALLSUPERDEPARTMENT({表单.A部门})
结果:A部门的所有上级部门形成的数组")); + funcMap.put("GETSUBCOMPANYNAME", SystemEnv.getHtmlLabelName(100828, "获取指定分部名称。
示例:GETSUBCOMPANYNAME({表单.A分部})
结果:A分部")); + funcMap.put("GETSUBCOMPANYCODE", SystemEnv.getHtmlLabelName(100830, "获取指定分部编号。
示例:GETSUBCOMPANYCODE({表单.A分部})
结果:B001")); + funcMap.put("GETSUPERSUBCOMPANY", SystemEnv.getHtmlLabelName(100832, "获取指定分部直接上级分部。
示例:GETSUPERSUBCOMPANY({表单.A分部})
结果:A分部的直接上级分部")); + funcMap.put("GETALLSUPERSUBCOMPANY", SystemEnv.getHtmlLabelName(100834, "获取指定分部所有上级分部。
示例:GETALLSUPERSUBCOMPANY({表单.A分部})
结果:A分部的所有上级分部形成的数组")); + funcMap.put("GETHRMNAME", SystemEnv.getHtmlLabelName(100834, "获取指定人员的姓名。
示例:GETHRMNAME({U:张三})
结果:张三")); + funcMap.put("GETHRMMOBILE", SystemEnv.getHtmlLabelName(100834, "获取指定人员的手机号码。
示例:GETHRMMOBILE({U:张三})
结果:13123232323")); + + //财务函数 + funcMap.put("GETMONEY", SystemEnv.getHtmlLabelName(0, "将金额转换成中文金额大写。
示例:GETMONEY({1234})
结果:壹仟贰佰叁拾肆元整")); + + } + public String get(String key){ + if(funcMap.size()>0){ +// logger.info("描述数据存在:"+funcMap.size()); + }else { + logger.info("初始化函数描述数据"); + initData(); + } + + return funcMap.get(key); + } +} diff --git a/src/com/engine/salary/formlua/entity/parameter/FuncNames.java b/src/com/engine/salary/formlua/entity/parameter/FuncNames.java new file mode 100644 index 000000000..b70235490 --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/FuncNames.java @@ -0,0 +1,20 @@ +package com.engine.salary.formlua.entity.parameter; + + +public enum FuncNames { + AND("and"), OR("or"), IF("ifF"), LIKE("likeFunc"), DATEDIFF("dateDiff"), DATEADD("dateAdd"), NOW("now"), DATEFORMAT("dateFormat"), COUNT("counts"), SUM("sumNumber"), MAX("maxNumber"), MIN("minNumber"), CONCAT("concatString"), SEARCH("search"), TEXT("text"), PAD("pad"), REPLACE("replace"), VALUE("value"), LEN("len"), LEFT("left"), RIGHT("right"), MID("mid"), TRUE("isTrue"), FALSE("isFalse"), NOT("not"), ISEMPTY("isEmpty"), TODAY("today"), IFS("ifs"), AGGREGATION("aggregation"), MOD("mod"), FIND("find"), SWITCH("switchs"), TRUNC("Trunc"), IDCARD("idCard"), + RANDOMNUMBER("randomNumber"), ROUNDUP("roundUp"), ROUNDDOWN("roundDown"), ROUND("round"), ADDRESS("addressAnalysis"), EOMONTH("eoMonth"), NETWORKDAYSPI("networkdaysPastIntl"), + CHOOSE("choose"), MATCH("match"), VLOOKUPS("vlookups"), GETHRMLOGINID("getHrmLoginId"), GETHRMWORKCODE("getHrmWorkcode"), GETHRMMANAGER("getHrmManager"), GETHRMALLMANAGER("getHrmAllManager"), + GETHRMDEPARTMENT("getHrmDepartment"), GETHRMSUBCOMPANY("getHrmSubcompany"), GETDEPARTMENTNAME("getDepartmentName"), GETDEPARTMENTCODE("getDepartmentCode"), GETSUPERDEPARTMENT("getSuperDepartment"), + GETALLSUPERDEPARTMENT("getAllSuperDepartment"), GETSUBCOMPANYNAME("getSubcompanyName"), GETSUBCOMPANYCODE("getSubcompanyCode"), GETSUPERSUBCOMPANY("getSuperSubcompany"), GETALLSUPERSUBCOMPANY("getAllSuperSubcompany"), + ISINT("isInt"), ISNUMBER("isNumber"), ISSTRING("isString"), GETMONEY("getMoney"), GETHRMNAME("getHrmName"), GETHRMMOBILE("getHrmMobile"); + String name; + + FuncNames(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/com/engine/salary/formlua/entity/parameter/IllegalList.java b/src/com/engine/salary/formlua/entity/parameter/IllegalList.java new file mode 100644 index 000000000..5ed75febf --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/IllegalList.java @@ -0,0 +1,19 @@ +package com.engine.salary.formlua.entity.parameter; + + + +public class IllegalList { + private final String[] operArray=new String[]{"<",">","+","-","*","/","{","}","[","]","(",")","=","!=","'","\"","!",".",">=","<="}; + private final String[] nameIllegalArray=new String[]{"<",">","+","-","*","/","{","}","[","]","(",")","=","!=","'","\"","!",".", + "LIKE","like",">=","<=","IN","IF","AND","OR","TRUE","FALSE","NOW","DATEDIFF","DATEADD","Y","M","D","H","I","S","WEEKNUM", + "WEEKDAY","TODAY","DATEFORMAT","COUNT","SUM","MAX","MIN","CONCAT","SEARCH","TEXT","PAD","REPLACE","VALUE","LEN","LEFT","RIGHT","MID"}; + private IllegalList(){} + private static IllegalList illegalList=new IllegalList(); + public static IllegalList getInstance(){return illegalList;} + public String[] getNameIllegalArray() { + return nameIllegalArray; + } + public String[] getOperArray() { + return operArray; + } +} diff --git a/src/com/engine/salary/formlua/entity/parameter/ParamContext.java b/src/com/engine/salary/formlua/entity/parameter/ParamContext.java new file mode 100644 index 000000000..afc1b65e5 --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/ParamContext.java @@ -0,0 +1,30 @@ +package com.engine.salary.formlua.entity.parameter; + +import com.alibaba.fastjson.JSONObject; + +/** + * @className: + * @Description:本地线程存储的Excel函数变量context,线程结束后会清空释放当前线程的变量context + * @Author: + * @date: + */ +public class ParamContext { + public static ThreadLocal fmCtx=new ThreadLocal(); + private JSONObject jsonObject=new JSONObject(); + + public static ParamContext get(){ + if(null==fmCtx.get()){ + fmCtx.set(new ParamContext()); + } + return fmCtx.get(); + } + public void setValue(String func,Object value){ + jsonObject.put(func,value); + } + public Object getValue(String func){ + return jsonObject.get(func); + } + public void removeContext(){ + fmCtx.remove(); + } +} diff --git a/src/com/engine/salary/formlua/entity/parameter/ParamFactory.java b/src/com/engine/salary/formlua/entity/parameter/ParamFactory.java new file mode 100644 index 000000000..b0cbab51e --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/ParamFactory.java @@ -0,0 +1,127 @@ +package com.engine.salary.formlua.entity.parameter; + +/** + * @className:默认本地参数 + * @Description:注释 + * @Author: + * @date: + */ +public class ParamFactory { + private String charValue; + private Double doubleValue; + private Integer integerValue; + private Long longValue; + private Float floatValue; + private Boolean boolValue; + private String dateTimeValue; + private String selectValue; + private String timeValue; + private String textValue; + private ParamFactory(){} + + private ParamFactory(String charValue, Double doubleValue, Integer integerValue, Long longValue, Float floatValue, Boolean boolValue,String dateTimeValue,String selectValue,String timeValue,String textValue) { + this.charValue = charValue; + this.doubleValue = doubleValue; + this.integerValue = integerValue; + this.longValue = longValue; + this.floatValue = floatValue; + this.boolValue = boolValue; + this.dateTimeValue=dateTimeValue; + this.selectValue=selectValue; + this.timeValue=timeValue; + this.textValue=textValue; + } + + private static ParamFactory paramFactory=new ParamFactory("2020-01-12 12:23:33",5.2,2020,100L,new Float(20.4),true,"2020-01-12 12:23:33","8428149709910469289","12:12:30","abcd"); + public static ParamFactory getInstance(){ + return paramFactory; + } + + public String getTimeValue() { + return timeValue; + } + + public void setTimeValue(String timeValue) { + this.timeValue = timeValue; + } + + public String getSelectValue() { + return selectValue; + } + + public void setSelectValue(String selectValue) { + this.selectValue = selectValue; + } + + public String getCharValue() { + return charValue; + } + + public void setCharValue(String charValue) { + this.charValue = charValue; + } + + public Double getDoubleValue() { + return doubleValue; + } + + public String getDateTimeValue() { + return dateTimeValue; + } + + public void setDateTimeValue(String dateTimeValue) { + this.dateTimeValue = dateTimeValue; + } + + public void setDoubleValue(Double doubleValue) { + this.doubleValue = doubleValue; + } + + public Integer getIntegerValue() { + return integerValue; + } + + public void setIntegerValue(Integer integerValue) { + this.integerValue = integerValue; + } + + public Long getLongValue() { + return longValue; + } + + public void setLongValue(Long longValue) { + this.longValue = longValue; + } + + public Float getFloatValue() { + return floatValue; + } + + public void setFloatValue(Float floatValue) { + this.floatValue = floatValue; + } + + public Boolean getBoolValue() { + return boolValue; + } + + public void setBoolValue(Boolean boolValue) { + this.boolValue = boolValue; + } + + public static ParamFactory getParamFactory() { + return paramFactory; + } + + public static void setParamFactory(ParamFactory paramFactory) { + ParamFactory.paramFactory = paramFactory; + } + + public String getTextValue() { + return textValue; + } + + public void setTextValue(String textValue) { + this.textValue = textValue; + } +} diff --git a/src/com/engine/salary/formlua/entity/parameter/ParamType.java b/src/com/engine/salary/formlua/entity/parameter/ParamType.java new file mode 100644 index 000000000..f11a1ceca --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/ParamType.java @@ -0,0 +1,15 @@ +package com.engine.salary.formlua.entity.parameter; + + +public enum ParamType { + STRING("String"),INTEGER("Integer"),DOUBLE("Double"),LONG("Long"),SHORT("Short"),JSONOBJECT("JSONObject"),FLOAT("Float"),BOOLEAN("Boolean"); + String name; + ParamType(String name) { + this.name=name; + } + + public String getName() { + return name; + } + +} diff --git a/src/com/engine/salary/formlua/entity/parameter/ReturnType.java b/src/com/engine/salary/formlua/entity/parameter/ReturnType.java new file mode 100644 index 000000000..601a097cb --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/ReturnType.java @@ -0,0 +1,13 @@ +package com.engine.salary.formlua.entity.parameter; + + +public class ReturnType { + public final static int BOOLEAN_VALUE=0; + public final static int NUMBER_VALUE=1; + public final static int STRING_VALUE=2; + public final static String[] NUMBER_TYPE=new String[]{"NumberComponent","Money","Raty","score","Monitor"}; + public final static String[] DATETIME_TYPE=new String[]{"DateComponent","DateInterval"}; + public final static String[] CHECK_TYPE=new String[]{"RadioBox","CheckBox","Select","ComboSelect"}; + public final static String[] DROPDOWN_LIST=new String[]{"Select","ComboSelect"}; + public final static String[]CHECKBOX_LIST=new String[]{"RadioBox","CheckBox"}; +} diff --git a/src/com/engine/salary/formlua/entity/parameter/ThreadLocalData.java b/src/com/engine/salary/formlua/entity/parameter/ThreadLocalData.java new file mode 100644 index 000000000..4a06cc07e --- /dev/null +++ b/src/com/engine/salary/formlua/entity/parameter/ThreadLocalData.java @@ -0,0 +1,59 @@ +package com.engine.salary.formlua.entity.parameter; + +import com.weaver.common.form.metadata.ModuleSource; +import com.weaver.teams.domain.user.SimpleEmployee; + +import java.util.Iterator; +import java.util.Map; + + +public class ThreadLocalData { + private Map expressContext; + private ModuleSource moduleSource; + + private SimpleEmployee employee; + + public ModuleSource getModuleSource() { + return moduleSource; + } + + public void setModuleSource(ModuleSource moduleSource) { + this.moduleSource = moduleSource; + } + + public SimpleEmployee getEmployee() { + return employee; + } + + public void setEmployee(SimpleEmployee employee) { + this.employee = employee; + } + + public Map getExpressContext() { + return expressContext; + } + + public void setExpressContext(Map expressContext) { + transMap(expressContext); + this.expressContext = expressContext; + } + + private void transMap(Map expressContext){ + Iterator iterator=expressContext.keySet().iterator(); + while (iterator.hasNext()){ + String key=iterator.next(); + Object obj=expressContext.get(key); + if(obj instanceof DataType){ + DataType dataType=(DataType)obj; + if(dataType.getFieldId()!=null){ + int idx=key.indexOf(dataType.getFieldId().toString()); + if(idx>=0){ + String localKey=key.substring(0,idx+dataType.getFieldId().toString().length()); + dataType.setAggCndKey(localKey); + } + } + + } + } + } +} diff --git a/src/com/engine/salary/formlua/entity/standard/AggFunc.java b/src/com/engine/salary/formlua/entity/standard/AggFunc.java new file mode 100644 index 000000000..34215605c --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/AggFunc.java @@ -0,0 +1,8 @@ +package com.engine.salary.formlua.entity.standard; + +public enum AggFunc { + count("计数"),avg("平均数"),min("最小数"),max("最大数"),sum("合计数"); + + AggFunc(String name) { + } +} diff --git a/src/com/engine/salary/formlua/entity/standard/ExcelModuleFixField.java b/src/com/engine/salary/formlua/entity/standard/ExcelModuleFixField.java new file mode 100644 index 000000000..92e05d744 --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/ExcelModuleFixField.java @@ -0,0 +1,34 @@ +package com.engine.salary.formlua.entity.standard; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ExcelModuleFixField { + /** + * 审批发起人 + */ + public static String FLOW_CREATOR="creator"; + /** + * 审批请求ID + */ + public static String FLOW_REQUEST_ID="requestid"; + /** + * 审批发起人所属部门 + */ + public static String FLOW_CREATOR_DEPT="creator_depart"; + /** + * 上报收集人 + */ + public static String REPORT_CREATOR="creator"; + /** + * 上报名称 + */ + public static String REPORT_NAME="name"; + /** + * 上报提交人 + */ + public static String REPORT_REPORTER="reporter"; + + public static List ALLFIXFIELD = new ArrayList<>(Arrays.asList(FLOW_CREATOR,FLOW_CREATOR_DEPT,FLOW_REQUEST_ID,REPORT_CREATOR,REPORT_NAME,REPORT_REPORTER)); +} diff --git a/src/com/engine/salary/formlua/entity/standard/ExcelPage.java b/src/com/engine/salary/formlua/entity/standard/ExcelPage.java new file mode 100644 index 000000000..dddf2300c --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/ExcelPage.java @@ -0,0 +1,56 @@ +package com.engine.salary.formlua.entity.standard; + +import java.io.Serializable; +import java.util.List; + +/** + * @author + */ +public class ExcelPage implements Serializable { + private static final long serialVersionUID = -3149769813337109956L; + private int pageNo; + private int pageSize; + private int count; + private String keywords; + private List pageResult; + + public String getKeywords() { + return keywords; + } + + public void setKeywords(String keywords) { + this.keywords = keywords; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public int getPageNo() { + return pageNo; + } + + public void setPageNo(int pageNo) { + this.pageNo = pageNo; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public List getPageResult() { + return pageResult; + } + + public void setPageResult(List pageResult) { + this.pageResult = pageResult; + } +} diff --git a/src/com/engine/salary/formlua/entity/standard/ExcelResult.java b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java new file mode 100644 index 000000000..f504acc33 --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java @@ -0,0 +1,87 @@ +package com.engine.salary.formlua.entity.standard; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author roy + */ +public class ExcelResult implements Serializable { + private static final long serialVersionUID = 4578033427466119428L; + /** + * 文本、数字、日期从这里取值 + */ + private Object data; + /** + * 布尔值从这里取值 + */ + private boolean boolData; + private String stringData; + private BigDecimal numberData; + /** + * 执行状态,true为执行成功,false为执行失败 + */ + private boolean status; + private String errorMsg; + private String formulaId; + + public String getFormulaId() { + return formulaId; + } + + public void setFormulaId(String formulaId) { + this.formulaId = formulaId; + } + + public boolean isBoolData() { + return boolData; + } + + public String getStringData() { + return stringData; + } + + public void setStringData(String stringData) { + this.stringData = stringData; + } + + public BigDecimal getNumberData() { + return numberData; + } + + public void setNumberData(BigDecimal numberData) { + this.numberData = numberData; + } + + public String getErrorMsg() { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } + + public boolean getBoolData() { + return boolData; + } + + public void setBoolData(boolean boolData) { + this.boolData = boolData; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public boolean isStatus() { + return status; + } + + public void setStatus(boolean status) { + this.status = status; + } +} diff --git a/src/com/engine/salary/formlua/entity/standard/FormulaCategory.java b/src/com/engine/salary/formlua/entity/standard/FormulaCategory.java new file mode 100644 index 000000000..fbc482888 --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/FormulaCategory.java @@ -0,0 +1,58 @@ +package com.engine.salary.formlua.entity.standard; + +import java.io.Serializable; + +/** + * @author roy + */ +public class FormulaCategory implements Serializable { + private static final long serialVersionUID = 376155360889274784L; + /** + * 分类ID + */ + private String id; + /** + * 分类名称 + */ + private String name; + /** + * 所属模块 + */ + private String module; + /** + * 类别,和module保持一致即可,为兼容老数据的保留字段 + */ + private String type; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getModule() { + return module; + } + + public void setModule(String module) { + this.module = module; + } +} diff --git a/src/com/engine/salary/formlua/entity/standard/FormulaDataSource.java b/src/com/engine/salary/formlua/entity/standard/FormulaDataSource.java new file mode 100644 index 000000000..83bdbcf52 --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/FormulaDataSource.java @@ -0,0 +1,37 @@ +package com.engine.salary.formlua.entity.standard; + +import java.io.Serializable; + +/** + * @author roy + */ +public class FormulaDataSource implements Serializable { + private static final long serialVersionUID = 8657467498740290598L; + private String dataId; + private String title; + private String module; + + public String getDataId() { + return dataId; + } + + public void setDataId(String dataId) { + this.dataId = dataId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getModule() { + return module; + } + + public void setModule(String module) { + this.module = module; + } +} diff --git a/src/com/engine/salary/formlua/entity/standard/FormulaFilterData.java b/src/com/engine/salary/formlua/entity/standard/FormulaFilterData.java new file mode 100644 index 000000000..06531e13f --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/FormulaFilterData.java @@ -0,0 +1,303 @@ +package com.engine.salary.formlua.entity.standard; + +import com.weaver.common.form.stat.FilterFormData; +import com.weaver.common.form.stat.domain.search.FilterFormDataIds; +import com.weaver.teams.domain.entity.BaseEntity; + +import java.io.Serializable; +import java.util.List; + +/** + * @author roy + */ +public class FormulaFilterData implements Serializable { + public static final String CONDITION_AND = "and"; + public static final String CONDITION_OR = "or"; + public static final String TERM_EQ = "eq"; + public static final String TERM_NOT_EQ = "neq"; + public static final String TERM_NULL = "null"; + public static final String TERM_NOT_NULL = "notnull"; + public static final String TERM_LIKE = "like"; + public static final String TERM_GT = "gt"; + public static final String TERM_GE = "ge"; + public static final String TERM_LE = "le"; + public static final String TERM_LT = "lt"; + public static final String TERM_BEQ = "beq"; + public static final String TERM_SEQ = "seq"; + public static final String SOURCE_TYPE_CONSTANT = "constant"; + public static final String SOURCE_TYPE_VARIABLE = "variable"; + private static final long serialVersionUID = 2902385161856666369L; + /** + * 字段ID + */ + private String fieldId; + /** + * 明细子表ID + */ + private String subFormId; + /** + * 控件名称 + */ + private String componentKey; + /** + * 操作符,具体符号在上面的静态变量中 + */ + private String term; + private String tremStr; + /** + * 条件的值 + */ + private String content; + /** + * 范围条件的截止范围 + */ + private String endContent; + /** + * 选项条件的值 + */ + private List ids; + private List children; + private List contents; + private List idObjects; + private String dateType; + private List allUserIds; + private List allDeptIds; + private String operateId; + private String departmentId; + private List deptFieldIds; + private String subDept; + private List pIds; + private String sourceType; + private String sourceFile; + private String idsStr; + private String sortStr; + private String condition = "and"; + private List selectIds; + private String format; + private boolean isFixed; + private List filterFormDataIdsList; + + public String getFieldId() { + return fieldId; + } + + public void setFieldId(String fieldId) { + this.fieldId = fieldId; + } + + public String getSubFormId() { + return subFormId; + } + + public void setSubFormId(String subFormId) { + this.subFormId = subFormId; + } + + public String getComponentKey() { + return componentKey; + } + + public void setComponentKey(String componentKey) { + this.componentKey = componentKey; + } + + public String getTerm() { + return term; + } + + public void setTerm(String term) { + this.term = term; + } + + public String getTremStr() { + return tremStr; + } + + public void setTremStr(String tremStr) { + this.tremStr = tremStr; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getEndContent() { + return endContent; + } + + public void setEndContent(String endContent) { + this.endContent = endContent; + } + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + +// public List getChildren() { +// return children; +// } +// +// public void setChildren(List children) { +// this.children = children; +// } + + public List getContents() { + return contents; + } + + public void setContents(List contents) { + this.contents = contents; + } + + public List getIdObjects() { + return idObjects; + } + + public void setIdObjects(List idObjects) { + this.idObjects = idObjects; + } + + public String getDateType() { + return dateType; + } + + public void setDateType(String dateType) { + this.dateType = dateType; + } + + public List getAllUserIds() { + return allUserIds; + } + + public void setAllUserIds(List allUserIds) { + this.allUserIds = allUserIds; + } + + public List getAllDeptIds() { + return allDeptIds; + } + + public void setAllDeptIds(List allDeptIds) { + this.allDeptIds = allDeptIds; + } + + public String getOperateId() { + return operateId; + } + + public void setOperateId(String operateId) { + this.operateId = operateId; + } + + public String getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + + public List getDeptFieldIds() { + return deptFieldIds; + } + + public void setDeptFieldIds(List deptFieldIds) { + this.deptFieldIds = deptFieldIds; + } + + public String getSubDept() { + return subDept; + } + + public void setSubDept(String subDept) { + this.subDept = subDept; + } + + public List getpIds() { + return pIds; + } + + public void setpIds(List pIds) { + this.pIds = pIds; + } + + public String getSourceType() { + return sourceType; + } + + public void setSourceType(String sourceType) { + this.sourceType = sourceType; + } + + public String getSourceFile() { + return sourceFile; + } + + public void setSourceFile(String sourceFile) { + this.sourceFile = sourceFile; + } + + public String getIdsStr() { + return idsStr; + } + + public void setIdsStr(String idsStr) { + this.idsStr = idsStr; + } + + public String getSortStr() { + return sortStr; + } + + public void setSortStr(String sortStr) { + this.sortStr = sortStr; + } + + public String getCondition() { + return condition; + } + + public void setCondition(String condition) { + this.condition = condition; + } + + public List getSelectIds() { + return selectIds; + } + + public void setSelectIds(List selectIds) { + this.selectIds = selectIds; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public boolean isFixed() { + return isFixed; + } + + public void setFixed(boolean fixed) { + isFixed = fixed; + } + +// public List getFilterFormDataIdsList() { +// return filterFormDataIdsList; +// } +// +// public void setFilterFormDataIdsList(List filterFormDataIdsList) { +// this.filterFormDataIdsList = filterFormDataIdsList; +// } +} diff --git a/src/com/engine/salary/formlua/entity/standard/FormulaModuleCategory.java b/src/com/engine/salary/formlua/entity/standard/FormulaModuleCategory.java new file mode 100644 index 000000000..50dc2a8fa --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/FormulaModuleCategory.java @@ -0,0 +1,34 @@ +package com.engine.salary.formlua.entity.standard; + +import java.io.Serializable; + +/** + * @author + */ +public class FormulaModuleCategory implements Serializable { + private static final long serialVersionUID = 561339364277864462L; + /** + * 分类名称 + */ + private String content; + /** + * 分类ID + */ + private String id; + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } +} diff --git a/src/com/engine/salary/formlua/func/compare/CommonOper.java b/src/com/engine/salary/formlua/func/compare/CommonOper.java new file mode 100644 index 000000000..ad7921ee2 --- /dev/null +++ b/src/com/engine/salary/formlua/func/compare/CommonOper.java @@ -0,0 +1,71 @@ +package com.engine.salary.formlua.func.compare; + + +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.ExcelParamUtil; + +import java.util.ArrayList; +import java.util.List; + +public class CommonOper { + + public static List operDivMultiList(Object obj1,Object obj2,String oper){ + List resultList=new ArrayList<>(); + if( (obj1 instanceof Object[] && !(obj2 instanceof Object[])) || (obj2 instanceof Object[] && !(obj1 instanceof Object[])) ){ + Object[] arrayParam; + Object param; + boolean firstArray=false; + if(obj1 instanceof Object[]){ + arrayParam=(Object[])obj1; + param=obj2; + firstArray=true; + }else { + arrayParam=(Object[])obj2; + param=obj1; + } + for (int i=0;i operAddReduceList(Object obj1,Object obj2){ + List resultList=new ArrayList<>(); + Object[] param1=(Object[])obj1; + Object[] param2=(Object[])obj2; + if(param1.length!=param2.length){ + throw new RuntimeException("参数列表长度不一致"); + } + for (int i=0;i filterFormDataList = new ArrayList<>(); + FormulaFilterData filterData = new FormulaFilterData(); + String content = null; + try { + if (obj1 instanceof DataType) { + DataType dataType1 = (DataType) obj1; + if (StringUtils.isEmpty(dataType1.getComponentKey())) { + dataType1.setComponentKey(dataType1.getDataType()); + } + if (obj2 instanceof DataType) { +// content = ((DataType) obj2).getContent()+""; + DataType paramDataType = (DataType) obj2; + if (paramDataType == null || paramDataType.getContent() == null) { + content = ""; + } else { + content = paramDataType.getContent() + ""; + } + } else { + content = obj2 + ""; + } + if (content != null) { + String componentKey = dataType1.getComponentKey(); + filterData.setFieldId(dataType1.getFieldId()); + if (dataType1.getSubFormId() != null) { + filterData.setSubFormId(dataType1.getSubFormId() + ""); + } + filterData.setComponentKey(componentKey); + if (StringUtils.isEmpty(content)) { +// filterData.setTerm(FilterFormData.TERM_NOT_NULL); + } else { +// //选项控件 +// if (ComponentConfig.isOptionComponent(componentKey)) { +// filterData.setTerm(FilterFormData.TERM_NOT_EQ); +// List ids = new ArrayList<>(); +// String[] idsArray = content.split(","); +// for (String idStr : idsArray) { +// if (StringUtils.isNotBlank(idStr)) { +// ids.add(idStr); +// } +// } +// filterData.setIds(ids); +// //其他 +// } else { +// filterData.setTerm(FilterFormData.TERM_NOT_EQ); +// filterData.setContent(content); +//// if(ComponentConfig.isNumberComponent(dataType1.getComponentKey()) || dataType1.getComponentKey().equalsIgnoreCase(DataType.NUMBER)){ +//// if(StringUtils.isEmpty(content)){ +//// filterData.setContent("0"); +//// } +//// } +// } + } + } + filterFormDataList.add(filterData); +// dataType.setFormulaFilterDataList(filterFormDataList); + dataType.setComponentKey(dataType1.getComponentKey()); + dataType.setSubFormId(dataType1.getSubFormId()); + } + } catch (Exception e) { + logger.error("err", e); + } + + } + + /** + * 构建大于、小于、大于等于、小于等于的搜索条件 + * + * @param dataType + * @param name + * @param obj1 + * @param obj2 + */ + public static void buildLessMoreFilterParam(DataType dataType, String name, Object obj1, Object obj2) { + List filterFormDataList = new ArrayList<>(); + FormulaFilterData filterData = new FormulaFilterData(); + try { + logger.info(name + "执行结果:" + JSON.toJSONString(dataType)); + if (obj1 instanceof DataType) { + DataType dataType1 = (DataType) obj1; + if (StringUtils.isEmpty(dataType1.getComponentKey())) { + dataType1.setComponentKey(dataType1.getDataType()); + } + String content = null; + if (obj2 instanceof DataType) { +// content = ((DataType) obj2).getContent()+""; + DataType paramDataType = (DataType) obj2; + if (paramDataType == null || paramDataType.getContent() == null) { + content = ""; + } else { + content = paramDataType.getContent() + ""; + } + } else { + content = obj2 + ""; + } + if (content != null) { + String componentKey = dataType1.getComponentKey(); + if (ComponentConfig.isNumberComponent(componentKey) + || componentKey.equals(ComponentType.DateComponent.toString()) + || componentKey.equals(ComponentType.TimeComponent.toString()) + || dataType1.getComponentKey().equalsIgnoreCase(DataType.STRING) + || dataType1.getComponentKey().equalsIgnoreCase(DataType.NUMBER) + || dataType1.getComponentKey().equalsIgnoreCase(DataType.STRING) + || dataType1.getComponentKey().equalsIgnoreCase(DataType.BOOL)) { + + filterData.setFieldId(dataType1.getFieldId() + ""); + if (dataType1.getSubFormId() != null) { + filterData.setSubFormId(dataType1.getSubFormId() + ""); + } + filterData.setComponentKey(componentKey); + switch (name) { + case ">=": + filterData.setTerm(FilterFormData.TERM_GE); + break; + case ">": + filterData.setTerm(FilterFormData.TERM_GT); + break; + case "<=": + filterData.setTerm(FilterFormData.TERM_LE); + break; + case "<": + filterData.setTerm(FilterFormData.TERM_LT); + break; + default: + break; + } + filterData.setContent(content); + } + } + filterFormDataList.add(filterData); + dataType.setFormulaFilterDataList(filterFormDataList); + dataType.setComponentKey(dataType1.getComponentKey()); + dataType.setSubFormId(dataType1.getSubFormId()); + } + } catch (Exception e) { + logger.error("err", e); + } + + } + + /** + * 校验大于、小于、小于等于、大于等于操作符的入参 + * + * @param name + * @param obj1 + * @param obj2 + * @return + */ + public static boolean checkLessMoreParam(String name, Object obj1, Object obj2) { + if (obj1 instanceof FormField) { + String componentKey = ((FormField) obj1).getComponentKey(); + if (ComponentConfig.isNumberComponent(componentKey)) { + if (obj2 instanceof Number) { + return true; + } else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) { + return true; + } else { + throw new RuntimeException("筛选条件[" + name + "]:数字控件右边必须是数字"); + } + } + if (componentKey.equals(ComponentType.DateComponent.toString())) { + if (obj2 instanceof String && Validator.isDate((String) obj2)) { + return true; + } else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { + return true; + } else { + throw new RuntimeException("筛选条件[" + name + "]:日期控件右边必须是日期字符串"); + } + + } + if (componentKey.equals(ComponentType.TimeComponent.toString())) { + if (obj2 instanceof String && Validator.isTime((String) obj2)) { + return true; + } else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { + return true; + } else { + throw new RuntimeException("筛选条件[" + name + "]:时间控件右边必须是时间字符串"); + } + } + } + throw new RuntimeException("筛选条件[" + name + "]:左边必须是数字控件或时间控件"); + } + + /** + * 校验等于号的入参 + * + * @param obj1 + * @param obj2 + * @return + */ + public static boolean checkEqParam(Object obj1, Object obj2) { + if (obj1 instanceof DataType) { + String componentKey = ((FormField) obj1).getComponentKey(); + if (ComponentConfig.isNumberComponent(componentKey)) { + if (obj2 instanceof DataType) { + if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) { + return true; + } else { + throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); + } + } else if (StringUtils.isEmpty(obj2 + "") || Validator.isFloat(obj2 + "")) { + return true; + } else { + throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); + } + } else if (ComponentConfig.isOptionComponent(componentKey)) { + if (StringUtils.isEmpty(obj2 + "") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { + return true; + } else { + throw new RuntimeException("筛选条件[=]:选项控件右边必须是选项"); + } + } else { + if (StringUtils.isEmpty(obj2 + "") || obj2 instanceof String || obj2 instanceof Character) { + return true; + } else if (obj2 instanceof DataType) { + if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { + return true; + } else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { + return true; + } else { + throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); + } + } else { + throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); + } + } + } + throw new RuntimeException("筛选条件[=]:左边必须是表单控件"); + } + + /** + * 校验不等于号的入参 + * + * @param obj1 + * @param obj2 + * @return + */ + public static boolean checkNotEqParam(Object obj1, Object obj2) { + if (obj1 instanceof FormField) { + String componentKey = ((FormField) obj1).getComponentKey(); + if (ComponentConfig.isNumberComponent(componentKey)) { + if (obj2 instanceof DataType) { + if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) { + return true; + } else { + throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); + } + } else if (StringUtils.isEmpty(obj2 + "") || Validator.isFloat(obj2 + "")) { + return true; + } else { + throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); + } + } else if (ComponentConfig.isOptionComponent(componentKey)) { + if (StringUtils.isEmpty(obj2 + "") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { + return true; + } else { + throw new RuntimeException("筛选条件[!=]:选项控件右边必须是选项"); + } + } else { + if (StringUtils.isEmpty(obj2 + "") || obj2 instanceof String || obj2 instanceof Character) { + return true; + } else if (obj2 instanceof DataType) { + if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { + return true; + } else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { + return true; + } else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { + return true; + } else { + throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); + } + } else { + throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); + } + } + } + throw new RuntimeException("筛选条件[!=]:左边必须是表单控件"); + } +} diff --git a/src/com/engine/salary/formlua/func/compare/EqOperator.java b/src/com/engine/salary/formlua/func/compare/EqOperator.java new file mode 100644 index 000000000..81aeef54a --- /dev/null +++ b/src/com/engine/salary/formlua/func/compare/EqOperator.java @@ -0,0 +1,243 @@ +package com.engine.salary.formlua.func.compare; + +import com.alibaba.fastjson.JSON; +import com.engine.salary.formlua.core.exception.ErrorType; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.CompareUtil; +import com.engine.salary.formlua.util.DateUtil; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.op.OperatorEqualsLessMore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + + +public class EqOperator extends OperatorEqualsLessMore { + protected final Logger logger = LoggerFactory.getLogger(getClass()); + public EqOperator(String aName) { + super(aName); + } + + public EqOperator(String aAliasName, String aName, String aErrorInfo) { + super(aAliasName, aName, aErrorInfo); + } + + @Override + public OperateData executeInner(InstructionSetContext context, ArraySwap list) throws Exception { + return super.executeInner(context, list); + } + + @Override + public Object executeInner(Object... list) throws Exception { + DataType result=new DataType(); + result.setDataType(DataType.BOOL); + logger.info("等于号参数:"+JSON.toJSONString(list)); + String oper="="; + if(list.length!=2){ + throw new RuntimeException("[=]"+ ErrorType.MAX_VAR_COUNT.name()); + } + Object op1=list[0]; + Object op2=list[1]; + //校验参数类型 + String datatype= ExcelParamUtil.checkParamType(op1); + String dataType2=ExcelParamUtil.checkParamType(op2); + if(op2 instanceof Object[]){ + Object[] objectParams=(Object[])op2; + if(objectParams[0] instanceof DataType){ + DataType paramDataType=(DataType)objectParams[0]; + dataType2=paramDataType.getDataType(); + }else{ + dataType2=ExcelParamUtil.checkParamType(objectParams[0]); + } + } + + if(datatype.equals(DataType.OPTION)||dataType2.equals(DataType.OPTION)){ + //对option的特殊处理,获取option的字符串后根据逗号分割,然后排序数组,数组长度不一致返回false,一致则循环对比直到同样下标的数据不一致返回false,否则为true + try { + String[] firstOptions=new String[]{}; + String[] secondOptions=new String[]{}; + result.setContent(true); + firstOptions= CompareUtil.genArray(op1,"option"); + secondOptions=CompareUtil.genArray(op2,"option"); + Arrays.sort(firstOptions); + Arrays.sort(secondOptions); + +// logger.info("比较选项:"+JSON.toJSONString(firstOptions)+"-->"+JSON.toJSONString(secondOptions)); + if(firstOptions.length!=secondOptions.length){ + result.setContent(false); + }else{ + int i=0; + for (;i dataList=ExcelParamUtil.converParamValue(op1,op2); + if(ExcelParamUtil.getParamType(op1).toLowerCase().equals("double")||ExcelParamUtil.getParamType(op2).toLowerCase().equals("double")){ + boolean r=OperatorEqualsLessMore.executeInner("=",ExcelParamUtil.convertParamValToNumber(dataList.get(0)),ExcelParamUtil.convertParamValToNumber(dataList.get(1))); + result.setContent(r); + }else if(op1 instanceof DataType && op2 instanceof DataType && DateUtil.isDateComponent(op1) && DateUtil.isDateComponent(op2)){ + + + Object dateStringOne=null; + if(op1 instanceof DataType){ + DataType dataTypeOne=(DataType)op1; + dateStringOne=dataTypeOne.getContent(); + }else{ + dateStringOne=op1; + } + + Object dateStringTwo=null; + if(op2 instanceof DataType){ + DataType dataTypeTwo=(DataType)op2; + dateStringTwo=dataTypeTwo.getContent(); + }else{ + dateStringTwo=op2; + } + boolean dateResult=false; + Date firstDate=DateUtil.buildDateByDateChar(dateStringOne==null?"":dateStringOne+""); + Date secondDate= DateUtil.buildDateByDateChar(dateStringTwo==null?"":dateStringTwo+""); + if (firstDate == null && secondDate == null){ + dateResult= true; + }else if(firstDate==null || secondDate ==null){ + dateResult= false; + }else{ + dateResult= firstDate.getTime()==secondDate.getTime(); + } + result.setContent(dateResult); + }else { + Object firstParam=ExcelParamUtil.getParamContent(dataList.get(0),""); + Object secondParam=ExcelParamUtil.getParamContent(dataList.get(1),""); + logger.info("等于号比较:"+firstParam+"-->"+secondParam); + if((firstParam instanceof String || firstParam instanceof Character) && (secondParam instanceof String || secondParam instanceof Character)){ + if(firstParam.toString().length()==1&&secondParam.toString().length()==1){ + boolean r=firstParam.toString().equals(secondParam.toString()); + result.setContent(r); + return result; + } + } + boolean r=OperatorEqualsLessMore.executeInner("=",firstParam,secondParam); + result.setContent(r); + } + } catch (Exception e) { + logger.error("err",e); + } + } +// buildFilterParam(result,op1,op2); + return result; + } + + /** + * 构建搜索条件参数 + * @param dataType + * @param obj1 + * @param obj2 + */ +// private void buildFilterParam(DataType dataType,Object obj1,Object obj2){ +// List filterFormDataList=new ArrayList<>(); +// FormulaFilterData filterData=new FormulaFilterData(); +// String content = null; +// try { +// if(obj1!=null && (obj1 instanceof DataType)){ +// DataType dataType1=(DataType)obj1; +// if(StringUtils.isEmpty(dataType1.getComponentKey())){ +// dataType1.setComponentKey(dataType1.getDataType()); +// } +// if(obj2 instanceof DataType) { +//// content = ((DataType) obj2).getContent()+""; +// DataType paramDataType=(DataType) obj2; +// if(paramDataType==null || paramDataType.getContent() == null){ +// content = ""; +// }else{ +// content = paramDataType.getContent()+""; +// } +// }else { +// content = obj2+""; +// } +// if ( content != null) { +// filterData.setFieldId(dataType1.getFieldId()); +// if(dataType1.getSubFormId() != null) { +// filterData.setSubFormId(dataType1.getSubFormId()+""); +// } +// +// filterData.setComponentKey(dataType1.getComponentKey()); +// if(StringUtils.isEmpty(content)) { +// filterData.setTerm(FilterFormData.TERM_NULL); +// }else{ +// filterData.setTerm(FilterFormData.TERM_EQ); +// if(StringUtils.isNotEmpty(dataType1.getComponentKey())){ +// //数字类型 +// if(ComponentConfig.isNumberComponent(dataType1.getComponentKey()) +// || dataType1.getComponentKey().equals(ComponentType.DateComponent.toString()) +// || dataType1.getComponentKey().equals(ComponentType.TimeComponent.toString()) +// || dataType1.getComponentKey().equalsIgnoreCase(DataType.STRING) +// || dataType1.getComponentKey().equalsIgnoreCase(DataType.NUMBER)|| +// dataType1.getComponentKey().equalsIgnoreCase(DataType.DATE) +// || dataType1.getComponentKey().equalsIgnoreCase(DataType.BOOL) +// ) { +// filterData.setContent(content); +// //选项控件 +// }else if(ComponentConfig.isOptionComponent(dataType1.getComponentKey())) { +// List ids = new ArrayList<>(); +// String[] idsArray = content.split(","); +// for(String idStr : idsArray) { +// if(StringUtils.isNotBlank(idStr)) { +// ids.add(idStr); +// } +// } +// filterData.setIds(ids); +// //文本型 +// }else { +// filterData.setContent(content); +// } +// } +// +// } +// } +// if(filterData!=null){ +// filterFormDataList.add(filterData); +// } +// +// logger.info("=号构建过滤参数:"+(filterFormDataList!=null? JSON.toJSONString(filterFormDataList):"NULL")); +// dataType.setFormulaFilterDataList(filterFormDataList); +// dataType.setComponentKey(dataType1.getComponentKey()); +// dataType.setSubFormId(dataType1.getSubFormId()); +// } +// } catch (Exception e) { +// logger.error("err",e); +// } +// +// } + + +} diff --git a/src/com/engine/salary/formlua/func/compare/GreaterEqOperator.java b/src/com/engine/salary/formlua/func/compare/GreaterEqOperator.java new file mode 100644 index 000000000..7e9a27055 --- /dev/null +++ b/src/com/engine/salary/formlua/func/compare/GreaterEqOperator.java @@ -0,0 +1,104 @@ +package com.engine.salary.formlua.func.compare; + +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.CompareUtil; +import com.engine.salary.formlua.util.DateUtil; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.ql.util.express.instruction.op.OperatorEqualsLessMore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + + +public class GreaterEqOperator extends OperatorEqualsLessMore { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public Object executeInner(Object op1, Object op2) throws Exception { + DataType result = new DataType(); + result.setDataType(DataType.BOOL); + String datatype = ExcelParamUtil.checkParamType(op1); + //对option的特殊处理,获取option的字符串后根据逗号分割,然后排序数组,数组长度不一致返回false,一致则循环对比直到同样下标的数据不一致返回false,否则为true + try { + if (datatype.equals(DataType.OPTION)) { + result.setContent(true); + String[] firstOptions = new String[]{}; + String[] secondOptions = new String[]{}; + firstOptions = CompareUtil.genArray(op1, "option"); + secondOptions = CompareUtil.genArray(op2, "option"); + Arrays.sort(firstOptions); + Arrays.sort(secondOptions); + if (firstOptions.length != secondOptions.length) { + result.setContent(false); + } else { + int i = 0; + for (; i < firstOptions.length; i++) { + boolean loopresult = OperatorEqualsLessMore.executeInner(">=", firstOptions[i], secondOptions[i]); + if (!loopresult) { + result.setContent(false); + break; + } + } + } + } else if (op1 instanceof DataType && op2 instanceof DataType && DateUtil.isDateComponent(op1) && DateUtil.isDateComponent(op2)) { + + + Object dateStringOne = null; + if (op1 instanceof DataType) { + DataType dataTypeOne = (DataType) op1; + dateStringOne = dataTypeOne.getContent(); + } else { + dateStringOne = op1; + } + + Object dateStringTwo = null; + if (op2 instanceof DataType) { + DataType dataTypeTwo = (DataType) op2; + dateStringTwo = dataTypeTwo.getContent(); + } else { + dateStringTwo = op2; + } + boolean dateResult = false; + Date firstDate = DateUtil.buildDateByDateChar(dateStringOne == null ? "" : dateStringOne + ""); + Date secondDate = DateUtil.buildDateByDateChar(dateStringTwo == null ? "" : dateStringTwo + ""); + if (firstDate == null && secondDate == null) { + dateResult = true; + } else if (firstDate == null && secondDate != null) { + dateResult = false; + } else if (firstDate != null && secondDate == null) { + dateResult = true; + } else { + dateResult = firstDate.getTime() >= secondDate.getTime(); + } + result.setContent(dateResult); + } else { + List dataList = ExcelParamUtil.converParamValue(op1, op2); + boolean r; + if (ExcelParamUtil.getParamType(op1).toLowerCase().equals("double") || ExcelParamUtil.getParamType(op2).toLowerCase().equals("double")) { + r = OperatorEqualsLessMore.executeInner(">=", ExcelParamUtil.convertParamValToNumber(dataList.get(0)), ExcelParamUtil.convertParamValToNumber(dataList.get(1))); + } else { + r = OperatorEqualsLessMore.executeInner(">=", ExcelParamUtil.getParamContent(dataList.get(0), ""), ExcelParamUtil.getParamContent(dataList.get(1), "")); + } + result.setContent(r); + } + } catch (Exception e) { + logger.error("err", e); + result.setContent(false); + } +// Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); + return result; + } + + public GreaterEqOperator(String aAliasName, String aName, String aErrorInfo) { + super(aAliasName, aName, aErrorInfo); + } + + public GreaterEqOperator(String aName) { + super(aName); + } + + +} diff --git a/src/com/engine/salary/formlua/func/compare/GreaterOperator.java b/src/com/engine/salary/formlua/func/compare/GreaterOperator.java new file mode 100644 index 000000000..ba9f3050b --- /dev/null +++ b/src/com/engine/salary/formlua/func/compare/GreaterOperator.java @@ -0,0 +1,105 @@ +package com.engine.salary.formlua.func.compare; + +import com.alibaba.fastjson.JSON; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.CompareUtil; +import com.engine.salary.formlua.util.DateUtil; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.ql.util.express.instruction.op.OperatorEqualsLessMore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Date; + + +public class GreaterOperator extends OperatorEqualsLessMore { + protected final Logger logger = LoggerFactory.getLogger(getClass()); + + @Override + public Object executeInner(Object op1, Object op2) throws Exception { + DataType result = new DataType(); + result.setDataType(DataType.BOOL); +// IgnoreParamFilter.filterCompareFunc(op1,op2,">"); + String datatype = ExcelParamUtil.checkParamType(op1); + logger.info("大于号比较:" + JSON.toJSONString(op1) + "-->" + JSON.toJSONString(op2)); + //对option的特殊处理,获取option的字符串后根据逗号分割,然后排序数组,数组长度不一致返回false,一致则循环对比直到同样下标的数据不一致返回false,否则为true + try { + if (datatype.equals(DataType.OPTION)) { + result.setContent(true); + String[] firstOptions = new String[]{}; + String[] secondOptions = new String[]{}; + firstOptions = CompareUtil.genArray(op1, "option"); + secondOptions = CompareUtil.genArray(op2, "option"); + Arrays.sort(firstOptions); + Arrays.sort(secondOptions); + if (firstOptions.length != secondOptions.length) { + result.setContent(false); + } else { + int i = 0; + for (; i < firstOptions.length; i++) { + boolean loopresult = OperatorEqualsLessMore.executeInner(">", firstOptions[i], secondOptions[i]); + if (!loopresult) { + result.setContent(false); + break; + } + } + } + } else if (op1 instanceof DataType && op2 instanceof DataType && DateUtil.isDateComponent(op1) && DateUtil.isDateComponent(op2)) { + + + Object dateStringOne = null; + if (op1 instanceof DataType) { + DataType dataTypeOne = (DataType) op1; + dateStringOne = dataTypeOne.getContent(); + } else { + dateStringOne = op1; + } + + Object dateStringTwo = null; + if (op2 instanceof DataType) { + DataType dataTypeTwo = (DataType) op2; + dateStringTwo = dataTypeTwo.getContent(); + } else { + dateStringTwo = op2; + } + boolean dateResult = false; + Date firstDate = DateUtil.buildDateByDateChar(dateStringOne == null ? "" : dateStringOne + ""); + Date secondDate = DateUtil.buildDateByDateChar(dateStringTwo == null ? "" : dateStringTwo + ""); + if (firstDate == null && secondDate == null) { + dateResult = false; + } else if (firstDate == null && secondDate != null) { + dateResult = false; + } else if (firstDate != null && secondDate == null) { + dateResult = true; + } else { + dateResult = firstDate.getTime() > secondDate.getTime(); + } + result.setContent(dateResult); + } else { + logger.info("参数1:" + ExcelParamUtil.convertParamValToNumber(op1) + ""); + logger.info("参数2:" + ExcelParamUtil.convertParamValToNumber(op2) + ""); + boolean r; + if (ExcelParamUtil.getParamType(op1).toLowerCase().equals("double") || ExcelParamUtil.getParamType(op2).toLowerCase().equals("double")) { + r = OperatorEqualsLessMore.executeInner(">", ExcelParamUtil.convertParamValToNumber(op1), ExcelParamUtil.convertParamValToNumber(op2)); + } else { + r = OperatorEqualsLessMore.executeInner(">", ExcelParamUtil.getParamContent(op1, ""), ExcelParamUtil.getParamContent(op2, "")); + } + result.setContent(r); + } + } catch (Exception e) { + logger.error("err", e); + result.setContent(false); + } + Compareutils.buildLessMoreFilterParam(result, this.name, op1, op2); + return result; + } + + public GreaterOperator(String aName) { + super(aName); + } + + public GreaterOperator(String aAliasName, String aName, String aErrorInfo) { + super(aAliasName, aName, aErrorInfo); + } +} diff --git a/src/com/engine/salary/formlua/func/compare/InOperator.java b/src/com/engine/salary/formlua/func/compare/InOperator.java new file mode 100644 index 000000000..22d7dcf6f --- /dev/null +++ b/src/com/engine/salary/formlua/func/compare/InOperator.java @@ -0,0 +1,97 @@ +package com.engine.salary.formlua.func.compare; + +import com.alibaba.fastjson.JSON; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.func.logic.LogicUtils; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.engine.salary.formlua.util.IgnoreParamFilter; +import com.ql.util.express.instruction.op.OperatorIn; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + + +public class InOperator extends OperatorIn { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Override + public Object executeInner(Object[] list) throws Exception { + DataType result=new DataType(); + result.setDataType(DataType.BOOL); + if(list.length<1||list[1]==null){ + Integer number= IgnoreParamFilter.getSetFuncNumber("IN"); + } + List paramList=new ArrayList<>(); + paramList.add(list[0]); + Object[] objectArray=(Object[])list[1]; + for (int i=0;i(); + paramList.add(null); + List dataArray=new ArrayList<>(); + if(list[0] instanceof DataType){ + DataType dataType=(DataType)list[0]; + if(dataType.getDataType().equals(DataType.OPTION)){ + if(dataType.getContent()!=null){ + String[] arrys=dataType.getContent().toString().split(","); + for (int i=0;i dataList=ExcelParamUtil.converParamValue(op1,op2); + boolean r; + if(ExcelParamUtil.getParamType(op1).toLowerCase().equals("double")||ExcelParamUtil.getParamType(op2).toLowerCase().equals("double")){ + r=OperatorEqualsLessMore.executeInner("<=",ExcelParamUtil.convertParamValToNumber(dataList.get(0)),ExcelParamUtil.convertParamValToNumber(dataList.get(1))); + }else { + r=OperatorEqualsLessMore.executeInner("<=",ExcelParamUtil.getParamContent(dataList.get(0),""),ExcelParamUtil.getParamContent(dataList.get(1),"")); + } + result.setContent(r); + } + } catch (Exception e) { + logger.error("err",e); + result.setContent(false); + } + Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); + return result; + } + + public LessEqOperator(String aName) { + super(aName); + } + + public LessEqOperator(String aAliasName, String aName, String aErrorInfo) { + super(aAliasName, aName, aErrorInfo); + } +} diff --git a/src/com/engine/salary/formlua/func/compare/LessOperator.java b/src/com/engine/salary/formlua/func/compare/LessOperator.java new file mode 100644 index 000000000..5d5348889 --- /dev/null +++ b/src/com/engine/salary/formlua/func/compare/LessOperator.java @@ -0,0 +1,104 @@ +package com.engine.salary.formlua.func.compare; + +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.CompareUtil; +import com.engine.salary.formlua.util.DateUtil; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.ql.util.express.instruction.op.OperatorEqualsLessMore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + + +public class LessOperator extends OperatorEqualsLessMore { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Override + public Object executeInner(Object op1, Object op2) throws Exception { + DataType result=new DataType(); + result.setDataType(DataType.BOOL); +// IgnoreParamFilter.filterCompareFunc(op1,op2,"<"); + String datatype= ExcelParamUtil.checkParamType(op1); + + //对option的特殊处理,获取option的字符串后根据逗号分割,然后排序数组,数组长度不一致返回false,一致则循环对比直到同样下标的数据不一致返回false,否则为true + try { + if(datatype.equals(DataType.OPTION)){ + result.setContent(true); + String[] firstOptions=new String[]{}; + String[] secondOptions=new String[]{}; + firstOptions= CompareUtil.genArray(op1,"option"); + secondOptions=CompareUtil.genArray(op2,"option"); + Arrays.sort(firstOptions); + Arrays.sort(secondOptions); + if(firstOptions.length!=secondOptions.length){ + result.setContent(false); + }else{ + int i=0; + for (;i dataList=ExcelParamUtil.converParamValue(op1,op2); + boolean r; + if(ExcelParamUtil.getParamType(op1).toLowerCase().equals("double")||ExcelParamUtil.getParamType(op2).toLowerCase().equals("double")){ + r=OperatorEqualsLessMore.executeInner("<",ExcelParamUtil.convertParamValToNumber(dataList.get(0)),ExcelParamUtil.convertParamValToNumber(dataList.get(1))); + }else { + r=OperatorEqualsLessMore.executeInner("<",ExcelParamUtil.getParamContent(dataList.get(0),""),ExcelParamUtil.getParamContent(dataList.get(1),"")); + } + result.setContent(r); + } + } catch (Exception e) { + logger.error("err",e); + result.setContent(false); + } + Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); + return result; + } + + public LessOperator(String aName) { + super(aName); + } + + public LessOperator(String aAliasName, String aName, String aErrorInfo) { + super(aAliasName, aName, aErrorInfo); + } + +} diff --git a/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java b/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java new file mode 100644 index 000000000..5b34a14bf --- /dev/null +++ b/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java @@ -0,0 +1,102 @@ +package com.engine.salary.formlua.func.compare; + +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.CompareUtil; +import com.engine.salary.formlua.util.DateUtil; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.ql.util.express.instruction.op.OperatorEqualsLessMore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; +import java.util.List; + +public class NotEqueOperator extends OperatorEqualsLessMore { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public Object executeInner(Object op1, Object op2) throws Exception { + DataType result = new DataType(); + result.setDataType(DataType.BOOL); +// IgnoreParamFilter.filterCompareFunc(op1,op2,"!="); + String datatype = ExcelParamUtil.checkParamType(op1); + + //对option的特殊处理,获取option的字符串后根据逗号分割,然后排序数组,数组长度不一致返回false,一致则循环对比直到同样下标的数据不一致返回false,否则为true + try { + if (datatype.equals(DataType.OPTION)) { + result.setContent(true); + String[] firstOptions = new String[]{}; + String[] secondOptions = new String[]{}; + firstOptions = CompareUtil.genArray(op1, "option"); + secondOptions = CompareUtil.genArray(op2, "option"); + if (firstOptions.length != secondOptions.length) { + result.setContent(true); + } else { + int i = 0; + for (; i < firstOptions.length; i++) { + boolean loopresult = OperatorEqualsLessMore.executeInner("!=", firstOptions[i], secondOptions[i]); + if (!loopresult) { + result.setContent(false); + break; + } + } + } + } else if (op1 instanceof DataType && op2 instanceof DataType && DateUtil.isDateComponent(op1) && DateUtil.isDateComponent(op2)) { + + + Object dateStringOne = null; + if (op1 instanceof DataType) { + DataType dataTypeOne = (DataType) op1; + dateStringOne = dataTypeOne.getContent(); + } else { + dateStringOne = op1; + } + + Object dateStringTwo = null; + if (op2 instanceof DataType) { + DataType dataTypeTwo = (DataType) op2; + dateStringTwo = dataTypeTwo.getContent(); + } else { + dateStringTwo = op2; + } + boolean dateResult = false; + Date firstDate = DateUtil.buildDateByDateChar(dateStringOne == null ? "" : dateStringOne + ""); + Date secondDate = DateUtil.buildDateByDateChar(dateStringTwo == null ? "" : dateStringTwo + ""); + if (firstDate == null && secondDate == null) { + dateResult = false; + } else if ((firstDate == null && secondDate != null) || (firstDate != null && secondDate == null)) { + dateResult = true; + } else { + dateResult = firstDate.getTime() != secondDate.getTime(); + } + result.setContent(dateResult); + } else { + List dataList = ExcelParamUtil.converParamValue(op1, op2); + Object firstParam = ExcelParamUtil.getParamContent(dataList.get(0), ""); + Object secondParam = ExcelParamUtil.getParamContent(dataList.get(1), ""); + if ((firstParam instanceof String || firstParam instanceof Character) && (secondParam instanceof String || secondParam instanceof Character)) { + if (firstParam.toString().length() == 1 && secondParam.toString().length() == 1) { + boolean r = !(firstParam.toString().equals(secondParam.toString())); + result.setContent(r); + return result; + } + } + boolean r = OperatorEqualsLessMore.executeInner("!=", firstParam, secondParam); + result.setContent(r); + } + } catch (Exception e) { + logger.error("err", e); + result.setContent(false); + } + Compareutils.buildNotEqFilterParam(result, op1, op2); + return result; + } + + public NotEqueOperator(String aName) { + super(aName); + } + + public NotEqueOperator(String aAliasName, String aName, String aErrorInfo) { + super(aAliasName, aName, aErrorInfo); + } +} diff --git a/src/com/engine/salary/formlua/func/compare/OperatorInTest.java b/src/com/engine/salary/formlua/func/compare/OperatorInTest.java new file mode 100644 index 000000000..ec5701582 --- /dev/null +++ b/src/com/engine/salary/formlua/func/compare/OperatorInTest.java @@ -0,0 +1,38 @@ +package com.engine.salary.formlua.func.compare; + +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.engine.salary.formlua.util.IgnoreParamFilter; +import com.ql.util.express.instruction.op.OperatorIn; + +import java.util.ArrayList; +import java.util.List; + + +public class OperatorInTest extends OperatorIn { + + @Override + public Object executeInner(Object[] list) throws Exception { + DataType result=new DataType(); + result.setDataType(DataType.BOOL); + result.setContent(true); + if(list.length<2||list[1]==null){ + Integer number= IgnoreParamFilter.getSetFuncNumber("IN"); + } + List paramList=new ArrayList<>(); + paramList.add(list[0]); + Object[] objectArray=(Object[])list[1]; + for (int i=0;i operList= CommonOper.operAddReduceList(obj1,obj2); + for (int i=0;i operList= CommonOper.operDivMultiList(firstParam,secondParam,"/"); + Object[] results=new Object[operList.size()]; + for (int i=0;i operList= CommonOper.operDivMultiList(firstParam,secondParam,"*"); + Object[] results=new Object[operList.size()]; + for (int i=0;i operList= CommonOper.operAddReduceList(obj1,obj2); + for (int i=0;i 0) { + return new DataType(DataType.STRING, ""); + } + formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String nowStr = formatter.format(new Date()); + return new DataType(DataType.STRING, nowStr); + } + + /** + * 返回当前日期 + * + * @return + */ + @Override + public DataType today(Object... objects) { + int number = IgnoreParamFilter.getSetFuncNumber(FuncNames.TODAY.toString()); + if (objects.length > 0) { + return new DataType(DataType.STRING, ""); + } + formatter = new SimpleDateFormat("yyyy-MM-dd"); + String dateStr = formatter.format(new Date()); + return new DataType(DataType.STRING, dateStr); + } + + /** + * 格式化时间日期 + * + * @param objects + * @return + */ + @Override + public DataType dateFormat(Object... objects) { + Class[] typeObjects = new Class[]{DateAndString.class, String.class}; + String func = "DATEFORMAT"; + IgnoreParamFilter.commonFilter(func, 2, 2, typeObjects, objects); + Object result = objects[0]; + String dateStr = ""; + Object p1 = objects[0]; + Object p2 = objects[1]; + if (ExcelParamUtil.checkIsNull(p1, p2)) { + throw new RuntimeException("日期格式化函数参数不能为空"); + } + if (p1 instanceof DataType) { + DataType dataType = (DataType) p1; + dateStr = ExcelParamUtil.getParamContent(dataType.getContent(), "date") != null ? ExcelParamUtil.getParamContent(dataType.getContent(), "date").toString() : ""; + } else { + if (p1 instanceof Date) { + dateStr = formatter.format(p1); + } else { + dateStr = p1.toString(); + } + } + String formatStr = (ExcelParamUtil.getParamContent(p2, "string") != null ? ExcelParamUtil.getParamContent(p2, "string") : "").toString().replaceAll("D", "d"); + try { + String formatterStr = DateUtil.buildFormat(dateStr); + formatter = new SimpleDateFormat(formatterStr); + Date sourceDate = formatter.parse(dateStr); + formatter = new SimpleDateFormat(formatStr); + dateStr = formatter.format(sourceDate); + result = dateStr; + } catch (ParseException e) { + logger.error("err", e); + return new DataType(DataType.STRING, ""); + } + + return new DataType(DataType.STRING, result); + } + + /** + * 两个日期加减 + * + * @param + * @param + * @return + */ + @Override + public DataType dateDiff(Object... objects) { + Class[] typeObjects = new Class[]{DateAndString.class, DateAndString.class, String.class}; + IgnoreParamFilter.commonFilter("DATEDIFF", 2, 3, typeObjects, objects); + Long secondsL = new Long(60 * 60 * 1000);//计算日期时间间距的单位,默认为小时 + + Long nd = buildSecondsFmt("D"); + Long nh = buildSecondsFmt("H"); + Long nm = buildSecondsFmt("I"); + Long ns = buildSecondsFmt("S"); + + + Double result = new Double(0); + String type = "D"; + String sContent = DateUtil.getContent(objects[0], formatter); + String eContent = DateUtil.getContent(objects[1], formatter); + if (ExcelParamUtil.checkIsNull(sContent, eContent, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + Date startDate = null; + Date endDate = null; + + format = DateUtil.buildFormat(sContent); + startDate = formateDateStr(sContent, format); + format = DateUtil.buildFormat(eContent); + endDate = formateDateStr(eContent, format); + if (startDate == null || endDate == null) { + return new DataType(DataType.NUMBER, 0); + } + Calendar cal1 = Calendar.getInstance(); + cal1.setTime(startDate); + //当前时间 + Calendar cal2 = Calendar.getInstance(); + cal2.setTime(endDate); + + + long diff = cal2.getTime().getTime() - cal1.getTime().getTime(); + + if (objects.length == 3) { + type = ExcelParamUtil.getParamContent(objects[2], "string") != null ? ExcelParamUtil.getParamContent(objects[2], "string").toString() : ""; + secondsL = buildSecondsFmt(type); + } + Double time = new Double(0); + boolean checkType = true; + switch (type) { + case "Y": + time = DateTimeServiceImpl.getTime(startDate, endDate) / (nd.doubleValue()) / 365.0; + break; + case "M": + Long monthR = DateTimeServiceImpl.getByField(cal1, cal2, Calendar.YEAR) * 12 + DateTimeServiceImpl.getByField(cal1, cal2, Calendar.MONTH); + time = monthR.doubleValue(); + break; + case "D": + double dayR = DateTimeServiceImpl.getTime(startDate, endDate) / (nd.doubleValue()); + time = dayR; + break; + case "H": + double hourH = DateTimeServiceImpl.getTime(startDate, endDate) / (nh.doubleValue()); + time = hourH; + break; + case "I": + double minuR = DateTimeServiceImpl.getTime(startDate, endDate) / (nm.doubleValue()); + time = minuR; + break; + case "S": + double seconR = DateTimeServiceImpl.getTime(startDate, endDate) / ns.doubleValue(); + time = seconR; + break; + default: + checkType = false; + break; + } + if (!checkType) { + return new DataType(DataType.STRING, ""); + } + BigDecimal b = new BigDecimal(time); + double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + result = f1; + return new DataType(DataType.NUMBER, result); + } + + /** + * 日期加减天数 + * + * @param objects + * @return + */ + @Override + public DataType dateAdd(Object... objects) { + Class[] typeObjects = new Class[]{DateAndString.class, Integer.class, String.class}; + IgnoreParamFilter.commonFilter("DATEADD", 2, 3, typeObjects, objects); + + String type = "D"; + if (objects.length == 3) { + type = objects[2].toString(); + } + + Object tcontent = DateUtil.getContent(objects[0], formatter); + Double numD = Double.parseDouble(ExcelParamUtil.getParamContent(objects[1], "") != null ? ExcelParamUtil.getParamContent(objects[1], "").toString() : ""); + + int num = numD.intValue(); + if (ExcelParamUtil.checkIsNull(tcontent, numD, type, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.STRING, ""); + } + Object result = ""; + + try { + Date date = null; + if (tcontent instanceof String || tcontent instanceof Character) { + format = DateUtil.buildFormat(tcontent.toString()); + if (null == format) { + return new DataType(DataType.STRING, ""); + } + date = formateDateStr(tcontent.toString(), format); + } else { + date = (Date) tcontent; + } + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + boolean checkType = true; + switch (type) { + case "Y": + cal.add(Calendar.YEAR, num); + break; + case "M": + cal.add(Calendar.MONTH, num); + break; + case "D": + cal.add(Calendar.DAY_OF_MONTH, num); + break; + case "H": + cal.add(Calendar.HOUR_OF_DAY, num); + break; + case "I": + cal.add(Calendar.MINUTE, num); + break; + case "S": + cal.add(Calendar.SECOND, num); + break; + default: + checkType = false; + break; + } + if (!checkType) { + String func = "DATEADD"; + return new DataType(DataType.STRING, ""); + } + Date newDate = cal.getTime(); + String nDate = formateDateStr(newDate, format); + result = nDate; + + } catch (ParseException e) { + logger.error("err", e); + } + return new DataType(DataType.STRING, result); + } + + /** + * 返回年份 + * + * @param objects + * @return + */ + @Override + public DataType year(Object... objects) { + Object reuslt = new Object(); + Class[] typeObjects = new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("YEAR", 1, 1, typeObjects, objects); + Object obj = objects[0]; + Object date = DateUtil.getContent(obj, formatter); + if (ExcelParamUtil.checkIsNull(date, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + int year = 0; + try { + year = getDateTimeValue(date, "Y", "YEAR"); + reuslt = year; + } catch (ParseException e) { + logger.error("err", e); + } + + return new DataType(DataType.NUMBER, reuslt); + } + + /** + * 返回是今年第几月 + * + * @param objects + * @return + */ + @Override + public DataType month(Object... objects) { + + Object reuslt = new Object(); + Class[] typeObjects = new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("MONTH", 1, 1, typeObjects, objects); + Object obj = objects[0]; + Object date = DateUtil.getContent(obj, formatter); + if (ExcelParamUtil.checkIsNull(date, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + boolean isDate = checkDateString(date != null ? date.toString() : ""); + if (!isDate) { + return new DataType(DataType.NUMBER, 0); + } + int month = 0; + try { + month = getDateTimeValue(date, "M", "MONTH"); + reuslt = month + 1; + } catch (ParseException e) { + logger.error("err", e); + } + + return new DataType(DataType.NUMBER, reuslt); + + } + + /** + * 返回日期是本月几号 + * + * @param objects + * @return + */ + @Override + public DataType day(Object... objects) { + Object reuslt = new Object(); + Class[] typeObjects = new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("DAY", 1, 1, typeObjects, objects); + Object obj = objects[0]; + Object date = DateUtil.getContent(obj, formatter); + if (ExcelParamUtil.checkIsNull(date, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + int day = 0; + try { + day = getDateTimeValue(date, "D", "DAY"); + reuslt = day; + } catch (ParseException e) { + logger.error("err", e); + } + + return new DataType(DataType.NUMBER, reuslt); + + } + + /** + * 返回时钟位置 + * + * @param objects + * @return + */ + @Override + public DataType hour(Object... objects) { + + Object reuslt = new Object(); + Class[] typeObjects = new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("HOUR", 1, 1, typeObjects, objects); + Object obj = objects[0]; + Object date = DateUtil.getContent(obj, formatter); + if (ExcelParamUtil.checkIsNull(date, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + Integer hour = 0; + try { + hour = getDateTimeValue(date, "H", "HOUR"); + reuslt = hour; + } catch (ParseException e) { + logger.error("err", e); + } + + return new DataType(DataType.NUMBER, reuslt); + + } + + /** + * 返回分钟位置 + * + * @param objects + * @return + */ + @Override + public DataType minute(Object... objects) { + Object reuslt = new Object(); + Class[] typeObjects = new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("MINUTE", 1, 1, typeObjects, objects); + Object obj = objects[0]; + Object date = DateUtil.getContent(obj, formatter); + if (ExcelParamUtil.checkIsNull(date, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + int minute = 0; + try { + minute = getDateTimeValue(date, "I", "MINUTE"); + + reuslt = minute; + } catch (ParseException e) { + logger.error("err", e); + } + + return new DataType(DataType.NUMBER, reuslt); + } + + /*** + * 返回秒钟位置 + * @param objects + * @return + */ + @Override + public DataType seconds(Object... objects) { + Object reuslt = new Object(); + Class[] typeObjects = new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("SECOND", 1, 1, typeObjects, objects); + Object obj = objects[0]; + Object date = DateUtil.getContent(obj, formatter); + if (ExcelParamUtil.checkIsNull(date, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + int seconds = 0; + try { + seconds = getDateTimeValue(date, "S", "SECOND"); + reuslt = seconds; + } catch (ParseException e) { + logger.error("err", e); + } + + return new DataType(DataType.NUMBER, reuslt); + + } + + /** + * 计算是本月的第几周 + * + * @param objects + * @return + */ + @Override + public DataType weekNum(Object... objects) { + Class[] typeObjects = new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("WEEKNUM", 1, 1, typeObjects, objects); + Object obj = objects[0]; + Object date = DateUtil.getContent(obj, formatter); + if (ExcelParamUtil.checkIsNull(date, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + int weekNum = 0; + try { + weekNum = getDateTimeValue(date, "WM", "WEEKNUM"); + } catch (ParseException e) { + logger.error("err", e); + } + return new DataType(DataType.NUMBER, weekNum); + } + + /** + * 判断是周几,因为周几是从周天的0开始算,所以返回数据需要减1 + * + * @param objects + * @return + */ + @Override + public DataType weekDay(Object... objects) { + Class[] typeObjects = new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("WEEKDAY", 1, 1, typeObjects, objects); + Object obj = objects[0]; + Object date = DateUtil.getContent(obj, formatter); + if (ExcelParamUtil.checkIsNull(date, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + int weekDay = 0; + try { + weekDay = getDateTimeValue(date, "DW", "WEEKDAY"); + } catch (ParseException e) { + logger.error("err", e); + } + return new DataType(DataType.NUMBER, weekDay > 0 ? (weekDay - 1) : weekDay); + } + + @Override + public DataType dayOfMonth(Object... objects) { + String dayType = ""; + if (objects != null && objects.length > 0 && objects[0] != null) { + dayType = objects[0].toString(); + } + + // 获取当前年份、月份、日期 + Calendar cale = null; + // 获取当月第一天和最后一天 + SimpleDateFormat formatTemp = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String firstday = "", lastday = ""; + String date = ""; + switch (dayType.toLowerCase()) { + case "first": + // 获取当前月的第一天 + cale = Calendar.getInstance(); + cale.add(Calendar.MONTH, 0); + cale.set(Calendar.DAY_OF_MONTH, 1); + cale.set(Calendar.HOUR_OF_DAY, 0); + cale.set(Calendar.MINUTE, 0); + firstday = formatTemp.format(cale.getTime()); + date = firstday; + break; + case "last": + // 获取当前月的最后一天 + cale = Calendar.getInstance(); + cale.add(Calendar.MONTH, 1); + cale.set(Calendar.DAY_OF_MONTH, 0); + cale.set(Calendar.HOUR_OF_DAY, 0); + cale.set(Calendar.MINUTE, 0); + lastday = formatTemp.format(cale.getTime()); + date = lastday; + break; + default: + // 获取指定的某一天 + if (dayType == null || dayType.trim().equalsIgnoreCase("")) { + dayType = "0"; + } + cale = Calendar.getInstance(); + cale.add(Calendar.MONTH, 1); + cale.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dayType)); + cale.set(Calendar.HOUR_OF_DAY, 0); + cale.set(Calendar.MINUTE, 0); + lastday = formatTemp.format(cale.getTime()); + date = lastday; + break; + } + logger.info("firstday:" + firstday + " lastday:" + lastday); + return new DataType(DataType.STRING, date); + } + + @Override + public DataType monthOfYear(Object... objects) { + String dayType = ""; + if (objects != null && objects.length > 0 && objects[0] != null) { + dayType = objects[0].toString(); + } + if (dayType == null || dayType.equalsIgnoreCase("")) { + dayType = "0"; + } + int month = Integer.parseInt(dayType); + if (month > 0) { + month -= 1; + } + SimpleDateFormat formatTemp = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + Calendar cale = Calendar.getInstance(); + cale.set(cale.get(Calendar.YEAR), month, 1); + + String lastday = formatTemp.format(cale.getTime()); + System.out.println(lastday); + return new DataType(DataType.STRING, lastday); + } + + @Override + public DataType timeOfDay(Object... objects) { + String dayType = ""; + if (objects != null && objects.length > 0 && objects[0] != null) { + dayType = objects[0].toString(); + } + SimpleDateFormat dayFormatTemp = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat formatTemp = new SimpleDateFormat("HH:mm"); + Calendar cale = Calendar.getInstance(); + try { + cale.setTime(new Date()); + } catch (Exception e) { + logger.error("err", e); + } + cale.set(Calendar.HOUR_OF_DAY, Integer.parseInt(dayType)); + cale.set(Calendar.MINUTE, 0); + String lastday = formatTemp.format(cale.getTime()); + return new DataType(DataType.STRING, lastday); + } + + @Override + public DataType eoMonth(Object... objects) { + Object result = ""; + //校验 + Class[] typeObjects = new Class[]{DateAndString.class, Integer.class}; + IgnoreParamFilter.commonFilter("EOMONTH", 1, 2, typeObjects, objects); + + //获取日期和加减参数 + Object dateObj = objects[0]; + Object dateContent = dateObj != null ? DateUtil.getContent(dateObj, formatter) : null; + + Object tempObj = objects.length > 1 ? objects[1] : null; + Object numObj = tempObj != null && ExcelParamUtil.getParamContent(tempObj, "") != null ? ExcelParamUtil.getParamContent(tempObj, "").toString() : null; + + int num = numObj != null ? Integer.parseInt(numObj + "") : 0; + if (ExcelParamUtil.checkIsNull(dateContent, ExcelParamUtil.CHECKLEVEL_STRING)) { + throw new RuntimeException("日期参数不能为空"); + } + + try { + Date date = null; + if (dateContent instanceof String || dateContent instanceof Character) { + format = DateUtil.buildFormat(dateContent.toString()); + if (null == format) { + return null; + } + date = formateDateStr(dateContent.toString(), format); + } else { + date = (Date) dateContent; + } + + //在传入日期上进行月份加减操作,并设置为当月第一天 + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.MONTH, num); + cal.set(Calendar.DAY_OF_MONTH, 1); + + //取该月最后一天 + cal.add(Calendar.MONTH, 1); + cal.add(Calendar.DAY_OF_MONTH, -1); + + Date newDate = cal.getTime(); + result = formateDateStr(newDate, format); + } catch (ParseException e) { + logger.error("eoMonth执行出错:" + e.getMessage(), e); + } + return new DataType(DataType.STRING, result); + } + +// @Override +// public DataType workdayIntl(Object... objects) { +// //校验 +// Object result = null; +// IgnoreParamFilter.commonFilter("NETWORKDAYSPI", 3, 3, null, objects); +// +// //获取开始日期 +// Object startObj = objects[0]; +// Object startDateObj = startObj != null ? DateUtil.getContent(startObj, formatter) : null; +// +// Date startDate = null; +// if (startDateObj != null) { +// +// if (startDateObj instanceof String || startDateObj instanceof Character) { +// format = DateUtil.buildFormat(startDateObj.toString()); +// if (null == format) { +// logger.error("workdayIntl函数执行时,开始时间获取format为空,已返回null"); +// return null; +// } +// startDate = formateDateStr(startDateObj.toString(), format); +// } else { +// startDate = (Date) startDateObj; +// } +// } +// +// //结束日期 +// Object endObj = objects[1]; +// Object endDateObj = endObj != null ? DateUtil.getContent(endObj, formatter) : null; +// +// Date endDate = null; +// if (endDateObj != null) { +// +// if (endDateObj instanceof String || endDateObj instanceof Character) { +// format = DateUtil.buildFormat(endDateObj.toString()); +// if (null == format) { +// logger.error("workdayIntl函数执行时,结束时间获取format为空,已返回null"); +// return null; +// } +// endDate = formateDateStr(endDateObj.toString(), format); +// } else { +// endDate = (Date) endDateObj; +// } +// } +// +// //人员参数 +// Object employeeObj = objects[2]; +// String empIdStr = employeeObj != null ? ((DataType) employeeObj).getContent() + "" : null; +// +// SimpleEmployee currEmp = employeeObj != null ? ((DataType) employeeObj).getEmployee() : null; +// String tenantKey = currEmp != null ? currEmp.getTenantKey() : null; +// +// if (ExcelParamUtil.checkIsNull(startDate, endDate, empIdStr, ExcelParamUtil.CHECKLEVEL_STRING)) { +// throw new RuntimeException("NETWORKDAYSPI函数参数不能为空"); +// } +// +// if (StringUtils.isEmpty(tenantKey)) { +// logger.error("workdayIntl函数执行时,tenantKey,已返回null"); +// return null; +// } +// +// //结果是否取相反数 +// boolean isOpposite = false; +// Date begin = startDate; +// Date end = endDate; +// +// if (startDate.after(end)) { +// isOpposite = true; +// begin = endDate; +// end = startDate; +// } +// +// //结束时间临界值为昨天23:59:59 +// Date yesterdayEnd = new Date(); +// yesterdayEnd = DateUtils.addDays(yesterdayEnd, -1); +// yesterdayEnd = com.weaver.teams.util.DateUtils.setTimeToEndOfDay(yesterdayEnd); +// +// //最小时间大于昨天最后一刻,则计算结果为0 +// if (begin.after(yesterdayEnd)) { +// return new DataType(DataType.NUMBER, 0); +// } +// //最大日期大于昨天最后一刻,另结束时间等于昨天最后一刻 +// if (end.after(yesterdayEnd)) { +// end = yesterdayEnd; +// } +// +// //间隔天数 +// int workDays = 0; +// //是否购买了考勤模块 +// boolean attendPay = tenantHttpInvokerService.isPayModule(tenantKey, TenantModuleType.attend); +// +// if (attendPay) { +// //按考勤规则设置来 +// Long empId = Long.parseLong(empIdStr); +// Map> tempMap = null; +// +// try { +// WeaverSentinelContext.setDowngradeType(false); +// tempMap = remoteAttendService.queryDayType(Lists.newArrayList(empId), begin, end, tenantKey); +// } catch (Exception e) { +// if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { +// //降级逻辑编写 +// logger.info("******workdayIntl的remoteAttendService.queryDayType走了weaver-common-excel-formula中的降级******"); +// return new DataType(DataType.NUMBER, 0); +// } else { +// logger.error("workdayIntl的remoteAttendService.queryDayType查询出错:" + e.getMessage()); +// } +// } +// +// if (MapUtils.isNotEmpty(tempMap)) { +// Map dayTypeMap = tempMap.get(empId); +// if (MapUtils.isEmpty(dayTypeMap)) { +// dayTypeMap = Maps.newHashMap(); +// } +// +// Date attendDate = null; +// AttendDayType dayType = null; +// int days = DateUtil.daysBetween(begin, end); +// +// //计算工作日天数 +// for (int i = 0; i <= days; i++) { +// attendDate = DateUtils.addDays(begin, i); +// String dayStr = DateFormatUtils.format(attendDate, "yyyy-MM-dd"); +// +// dayType = dayTypeMap.get(dayStr); +// if (dayType != null && dayType == AttendDayType.WORK) { +// workDays++; +// } +// } +// } +// } else { +// //按法定节假日算 +// List tempHolidays = Lists.newArrayList(); +// List holidays = null; +// +// try { +// WeaverSentinelContext.setDowngradeType(false); +// holidays = remoteAttend4FormService.queryDefaultHoliday(begin, end); +// } catch (Exception e) { +// if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { +// //降级逻辑编写 +// logger.info("******workdayIntl的remoteAttend4FormService.queryDefaultHoliday走了weaver-common-excel-formula中的降级******"); +// return new DataType(DataType.NUMBER, 0); +// } else { +// logger.error("workdayIntl的remoteAttend4FormService.queryDefaultHoliday查询出错:" + e.getMessage()); +// } +// } +// +// if (CollectionUtils.isNotEmpty(holidays)) { +// for (Attend4FormDay tempDay : holidays) { +// String dayStr = DateFormatUtils.format(tempDay.getDay(), "yyyy-MM-dd"); +// tempHolidays.add(dayStr); +// } +// } +// +// Date attendDate = null; +// Calendar cal = Calendar.getInstance(); +// int days = DateUtil.daysBetween(begin, end); +// +// //计算工作日天数 +// for (int i = 0; i <= days; i++) { +// attendDate = DateUtils.addDays(begin, i); +// String dayStr = DateFormatUtils.format(attendDate, "yyyy-MM-dd"); +// +// //节假日 +// if (tempHolidays.contains(dayStr)) { +// continue; +// } +// +// //周末 +// cal.setTime(attendDate); +// if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { +// continue; +// } +// +// //工作日 +// workDays++; +// } +// } +// if (isOpposite) { +// workDays = workDays * (-1); +// } +// +// logger.info("workdayIntl计算结果:" + workDays); +// return new DataType(DataType.NUMBER, workDays); +// +// } + + @Override + public DataType maxDate(Object... objects) { + Object dateObj = null; + Date date = null; + Date maxDate = null; + + //取最大日期 + for (int i = 0; i < objects.length; i++) { + dateObj = objects[i]; + if (dateObj == null) continue; + + //如果类型是DataType + if (dateObj instanceof DataType) { + DataType dataType = (DataType) dateObj; + dateObj = dataType.getContent(); + } + if (dateObj == null) continue; + + //字符串或Date强转 + if (dateObj instanceof String || dateObj instanceof Character) { + String format = DateUtil.buildFormat(dateObj.toString()); + if (StringUtils.isNotEmpty(format)) date = formateDateStr(dateObj.toString(), format); + } else { + date = (Date) dateObj; + } + + if (date != null && (maxDate == null || date.after(maxDate))) maxDate = date; + } + + //日期格式化 + String rtnStr = maxDate != null ? DateFormatUtils.format(maxDate, "yyyy-MM-dd") : ""; + return new DataType(DataType.STRING, rtnStr); + } + + @Override + public DataType minDate(Object... objects) { + Object dateObj = null; + Date date = null; + Date minDate = null; + + //取最小日期 + for (int i = 0; i < objects.length; i++) { + dateObj = objects[i]; + if (dateObj == null) continue; + + //如果类型是DataType + if (dateObj instanceof DataType) { + DataType dataType = (DataType) dateObj; + dateObj = dataType.getContent(); + } + if (dateObj == null) continue; + + if (dateObj instanceof String || dateObj instanceof Character) { + String format = DateUtil.buildFormat(dateObj.toString()); + if (StringUtils.isNotEmpty(format)) date = formateDateStr(dateObj.toString(), format); + } else { + date = (Date) dateObj; + } + + if (date != null && (minDate == null || date.before(minDate))) minDate = date; + } + + //日期格式化 + String rtnStr = minDate != null ? DateFormatUtils.format(minDate, "yyyy-MM-dd") : ""; + return new DataType(DataType.STRING, rtnStr); + } + + @Override + public DataType compareDate(Object... objects) { + Date first = null; + Date second = null; + Object paramObj = objects[0]; + Object paramObjSecond = objects[1]; + if (paramObj instanceof DataType) { + DataType dataType = (DataType) paramObj; + if (dataType.getContent() != null && StringUtils.isNotEmpty(dataType.getContent() + "")) { + boolean isDate = DateUtil.isDateComponent(paramObj); + if (isDate) { + first = DateUtil.buildDateByDateChar(dataType.getContent() + ""); + } + } + } else { + first = DateUtil.buildDateByDateChar(paramObj + ""); + } + + if (paramObjSecond instanceof DataType) { + DataType dataType = (DataType) paramObjSecond; + if (dataType.getContent() != null && StringUtils.isNotEmpty(dataType.getContent() + "")) { + boolean isDate = DateUtil.isDateComponent(paramObjSecond); + if (isDate) { + second = DateUtil.buildDateByDateChar(dataType.getContent() + ""); + } + } + } else { + second = DateUtil.buildDateByDateChar(paramObjSecond + ""); + } + + if (first == null || second == null) { + return new DataType(DataType.BOOL, false); + } + + if (first.getTime() - second.getTime() != 0) { + return new DataType(DataType.BOOL, false); + } else { + return new DataType(DataType.BOOL, true); + } + } + + @Override + public DataType currYear(Object... objects) { + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year = cal.get(Calendar.YEAR); + return new DataType(DataType.NUMBER, year); + } + + @Override + public DataType currMonth(Object... objects) { + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year = cal.get(Calendar.MONTH) + 1; + return new DataType(DataType.NUMBER, year); + } + + @Override + public DataType currDay(Object... objects) { + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year = cal.get(Calendar.DAY_OF_MONTH); + return new DataType(DataType.NUMBER, year); + } + + @Override + public DataType currWeek(Object... objects) { + int weekDay = 0; + try { + weekDay = getDateTimeValue(new Date(), "DW", "WEEKDAY"); + } catch (ParseException e) { + logger.error("err", e); + } + return new DataType(DataType.NUMBER, weekDay > 0 ? (weekDay - 1) : weekDay); + } + + @Override + public DataType currHour(Object... objects) { + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year = cal.get(Calendar.HOUR_OF_DAY); + return new DataType(DataType.NUMBER, year); + } + + @Override + public DataType currMinute(Object... objects) { + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year = cal.get(Calendar.MINUTE); + return new DataType(DataType.NUMBER, year); + } + + @Override + public DataType currSecond(Object... objects) { + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year = cal.get(Calendar.SECOND); + return new DataType(DataType.NUMBER, year); + } + /*******以下为日期函数的一些公共逻辑********/ + + + /** + * 获取日期时间的单位值,指定类型为Type,默认为 'D' 天数 + * + * @param date + * @param type + * @return + * @throws ParseException + */ + public Integer getDateTimeValue(Object date, String type, String func) throws ParseException { + int result = 0; + try { + boolean isTime = false; + Date fDate = null; + if (date instanceof String) { + boolean isDate = checkDateString(date != null ? date.toString() : ""); + if (!isDate) { + return 0; + } + format = DateUtil.buildFormat(date.toString(), type); + if (format == null) { + format = DateUtil.buildFormat(date.toString()); + } + fDate = formateDateStr(date.toString(), format); + if (date.toString().indexOf(":") > 0 && date.toString().indexOf("-") < 0) { + isTime = true; + if (!type.equals("H") && !type.equals("I") && !type.equals("S")) { + Integer number = IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson = ErrorUtil.buildError(func, number, number, func + "函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + } else { + fDate = (Date) date; + } + + int calendarType = 0; + switch (type) { + case "Y": + calendarType = Calendar.YEAR; + break; + case "M": + calendarType = Calendar.MONTH; + break; + case "D": + calendarType = Calendar.DAY_OF_MONTH; + break; + case "H": + if (isTime) { + return Integer.parseInt(date.toString().split(":")[0]); + } + calendarType = Calendar.HOUR_OF_DAY; + break; + case "I": + if (isTime) { + return Integer.parseInt(date.toString().split(":")[1]); + } + calendarType = Calendar.MINUTE; + break; + case "S": + if (isTime) { + return Integer.parseInt(date.toString().split(":")[2]); + } + calendarType = Calendar.SECOND; + break; + case "WM": + calendarType = Calendar.WEEK_OF_YEAR; + long startTime1 = fDate.getTime(); + Calendar calendar = Calendar.getInstance(); + calendar.setFirstDayOfWeek(Calendar.SUNDAY);//设置星期一为一周开始的第一天 + calendar.setMinimalDaysInFirstWeek(4);//可以不用设置 + calendar.setTimeInMillis(startTime1);//获得当前的时间戳 + int weekOfYear = calendar.get(calendarType);//获得当前日期属于今年的第几周 + result = weekOfYear; + logger.info("当前是第" + result + "周"); + return result; + case "DW": + calendarType = Calendar.DAY_OF_WEEK; + break; + default: + calendarType = Calendar.HOUR_OF_DAY; + break; + } + calendar.setTime(fDate); + result = calendar.get(calendarType); + } catch (RuntimeException e) { + logger.error("err", e); + result = 0; + } + return result; + } + + /** + * 格式化日期时间 + * + * @param dateStr 日期时间原字符串 + * @param format 格式 + * @return + * @throws ParseException + */ + private Date formateDateStr(String dateStr, String format) { + SimpleDateFormat sdf = new SimpleDateFormat(format); + Date ndate = null; + try { + ndate = sdf.parse(dateStr); + } catch (ParseException e) { + logger.error("err", e); + } + return ndate; + } + + /** + * 格式日期时间为字符串 + * + * @param date + * @param format + * @return + * @throws ParseException + */ + private String formateDateStr(Date date, String format) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat(format); + String ndate = sdf.format(date); + return ndate; + } + + + /** + * 判断时间间距的单位类型 + * + * @param type + * @return + */ + private Long buildSecondsFmt(String type) { + Long secondsL = null; + switch (type) { + case "Y": + secondsL = (long) (365 * 24 * 60 * 60 * 1000); + break; + case "M": + secondsL = (long) (30 * 24 * 60 * 60 * 1000); + break; + case "D": + secondsL = (long) (24 * 60 * 60 * 1000); + break; + case "H": + secondsL = (long) (60 * 60 * 1000); + break; + case "I": + secondsL = (long) (60 * 1000); + break; + case "S": + secondsL = 1000L; + break; + default: + secondsL = (long) (60 * 60 * 1000); + break; + } + return secondsL; + } + + static Calendar calendar2 = Calendar.getInstance(); + public static SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + static String format2 = "yyyy-MM-dd HH:mm:ss"; + + + public static Integer getDateTimeValue2(Object date, String type, String func) throws ParseException { + int result = 0; + boolean isTime = false; + Date fDate = null; + if (date instanceof String) { + format2 = DateUtil.buildFormat(date.toString()); + fDate = formateDateStr2(date.toString(), format2); + if (date.toString().indexOf(":") > 0 && !date.toString().contains("-")) { + isTime = true; + if (!type.equals("H") && !type.equals("I") && !type.equals("S")) { + Integer number = IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson = ErrorUtil.buildError(func, number, number, func + "函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + } else { + fDate = (Date) date; + } + + int calendarType = 0; + switch (type) { + case "Y": + calendarType = Calendar.YEAR; + break; + case "M": + calendarType = Calendar.MONTH; + break; + case "D": + calendarType = Calendar.DAY_OF_MONTH; + break; + case "H": + if (isTime) { + return Integer.parseInt(date.toString().split(":")[0]); + } + calendarType = Calendar.HOUR_OF_DAY; + break; + case "I": + if (isTime) { + return Integer.parseInt(date.toString().split(":")[1]); + } + calendarType = Calendar.MINUTE; + break; + case "S": + if (isTime) { + return Integer.parseInt(date.toString().split(":")[2]); + } + calendarType = Calendar.SECOND; + break; + case "WM": + calendarType = Calendar.WEEK_OF_MONTH; + break; + case "DW": + calendarType = Calendar.DAY_OF_WEEK; + break; + default: + calendarType = Calendar.HOUR_OF_DAY; + break; + } + calendar2.setTime(fDate); + result = calendar2.get(calendarType); + return result; + } + + private static Date formateDateStr2(String dateStr, String format) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat(format); + Date ndate = null; + ndate = sdf.parse(dateStr); + return ndate; + } + + private boolean checkDateString(String dateString) { + List datafList = new ArrayList(); + datafList.add("yyyyMMddHHmmss"); + datafList.add("yyyyMMdd"); + datafList.add("yyyyMMddHHmm"); + datafList.add("HH:mm"); + datafList.add("HH:mm:ss"); + if (RegularUtil.isNumber(dateString)) { + return false; + } + boolean r = false; + for (String s : datafList) { + SimpleDateFormat sdf = new SimpleDateFormat(s); + + Date ndate = null; + try { + ndate = sdf.parse(dateString); + r = true; + break; + } catch (ParseException e) { + logger.info(e.getMessage()); + r = false; + } + } + if (r) { + if (RegularUtil.isNumber(dateString)) { + r = false; + } + } + return r; + } + + + public static double getBetween(String beginTime, String endTime, String returnPattern) throws ParseException { + + String format = DateUtil.buildFormat(beginTime); + SimpleDateFormat sdf = new SimpleDateFormat(format); + Date beginDate = sdf.parse(beginTime); + + format = DateUtil.buildFormat(endTime); + sdf = new SimpleDateFormat(format); + Date endDate = sdf.parse(endTime); + + Calendar beginCalendar = Calendar.getInstance(); + Calendar endCalendar = Calendar.getInstance(); + beginCalendar.setTime(beginDate); + endCalendar.setTime(endDate); + + double resutl; + switch (returnPattern) { + case "Y": + resutl = DateTimeServiceImpl.getTime(beginDate, endDate) / (24 * 60 * 60 * 1000) / 365.0; + break; + case "M": + resutl = DateTimeServiceImpl.getByField(beginCalendar, endCalendar, Calendar.YEAR) * 12 + DateTimeServiceImpl.getByField(beginCalendar, endCalendar, Calendar.MONTH); + break; + case "D": + resutl = DateTimeServiceImpl.getTime(beginDate, endDate) / (24 * 60 * 60 * 1000); + break; + case "H": + Long nd = new Long(60 * 60 * 1000); + resutl = DateTimeServiceImpl.getTime(beginDate, endDate) / (nd.doubleValue()); + break; + case "I": + resutl = DateTimeServiceImpl.getTime(beginDate, endDate) / (60 * 1000); + break; + case "S": + resutl = DateTimeServiceImpl.getTime(beginDate, endDate) / 1000; + break; + default: + resutl = 0L; + break; + } + return resutl; + } + + + private static Long getByField(Calendar beginCalendar, Calendar endCalendar, int calendarField) { + int r = endCalendar.get(calendarField) - beginCalendar.get(calendarField); + return (long) r; + } + + private static long getTime(Date beginDate, Date endDate) { + return endDate.getTime() - beginDate.getTime(); + } + +// public static void main(String[] args) { +// try { +// logger.info(DateTimeServiceImpl.getBetween("2017-05-02 22:00:00", "2016-10-02 23:15:00", "Y")); +// } catch (ParseException e) { +// logger.error("err",e); +// } +// +// } +} diff --git a/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java b/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java new file mode 100644 index 000000000..18031fbb7 --- /dev/null +++ b/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java @@ -0,0 +1,1208 @@ +package com.engine.salary.formlua.func.date; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.form.component.base.ComponentType; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.excel.formula.entity.parameter.DateAndString; +import com.weaver.excel.formula.entity.parameter.FuncNames; +import com.weaver.excel.formula.util.*; +import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Service("dateTimeTestService") +public class DateTimeTestServiceImpl implements DateTimeService { + protected final Logger logger = LoggerFactory.getLogger(getClass()); + private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private String format="yyyy-MM-dd HH:mm:ss"; + private Calendar calendar=Calendar.getInstance(); + + /** + * 返回当前日期时间 + * @return + */ + @Override + public DataType now(Object... objects) { + int number= IgnoreParamFilter.getSetFuncNumber(FuncNames.NOW.toString()); + if(objects.length>0){ + throw new RuntimeException("NOW函数不能有参数"); + } + formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String nowStr=formatter.format(new Date()); + return new DataType(DataType.STRING,nowStr); + } + + /** + * 返回当前日期 + * @return + */ + @Override + public DataType today(Object... objects) { + int number=IgnoreParamFilter.getSetFuncNumber(FuncNames.TODAY.toString()); + if(objects.length>0){ + throw new RuntimeException("TODAY函数不能有参数"); + } + formatter=new SimpleDateFormat("yyyy-MM-dd"); + String dateStr=formatter.format(new Date()); + return new DataType(DataType.STRING,dateStr); + } + + /** + * 格式化时间日期 + * @param objects + * @return + */ + @Override + public DataType dateFormat(Object... objects) { + Class[] typeObjects=new Class[]{DateAndString.class,String.class}; + String func="DATEFORMAT"; + IgnoreParamFilter.commonFilter(func,2,2,typeObjects,objects); + Object result=objects[0]; + String dateStr=""; + Object p1=objects[0]; + Object p2=objects[1]; + if(ExcelParamUtil.checkIsNull(p1,p2)){ + throw new RuntimeException("日期格式化函数参数不能为空"); + } + if(p1 instanceof DataType){ + DataType dataType=(DataType) p1; + if(dataType.getDataType().equalsIgnoreCase(DataType.STRING) || dataType.getDataType().equalsIgnoreCase(DataType.DATE)){ + dateStr="2020-09-08 12:00"; + }else{ + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + number-=1; + throw new RuntimeException(func+"函数格式错误"); + } + + }else { + if(p1 instanceof Date){ + dateStr=formatter.format(p1); + }else { + dateStr=p1.toString(); + } + } + String formatStr=(ExcelParamUtil.getParamContent(p2,"string")!=null?ExcelParamUtil.getParamContent(p2,"string"):"").toString().replaceAll("D","d"); + try { + String formatterStr= DateUtil.buildFormat(dateStr); + formatter=new SimpleDateFormat(formatterStr); + Date sourceDate=formatter.parse(dateStr); + formatter= new SimpleDateFormat(formatStr); + dateStr=formatter.format(sourceDate); + result=dateStr; + } catch (ParseException e) { + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + number-=1; + JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数格式错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + return new DataType(DataType.STRING,result); + } + + /** + * 两个日期加减 + * @param + * @param + * @return + */ + @Override + public DataType dateDiff(Object... objects){ + Class[] typeObjects=new Class[]{DateAndString.class,DateAndString.class,String.class}; + IgnoreParamFilter.commonFilter("DATEDIFF",2,3,typeObjects,objects); + Long secondsL=new Long(60*60*1000);//计算日期时间间距的单位,默认为小时 + + Long nd = buildSecondsFmt("D"); + Long nh = buildSecondsFmt("H"); + Long nm = buildSecondsFmt("I"); + Long ns = buildSecondsFmt("S"); + + + Double result=new Double(0); + String type="D"; + String sContent=DateUtil.getContent(objects[0],formatter); + String eContent=DateUtil.getContent(objects[1],formatter); + if(ExcelParamUtil.checkIsNull(sContent,eContent,ExcelParamUtil.CHECKLEVEL_STRING)){ + return new DataType(DataType.NUMBER,0); + } + Date startDate=null; + Date endDate=null; + + format= DateUtil.buildFormat(sContent); + startDate=formateDateStr(sContent,format); + format=DateUtil.buildFormat(eContent); + endDate=formateDateStr(eContent,format); + if(startDate==null||endDate==null){ + return new DataType(DataType.NUMBER,0); + } + Calendar cal1 = Calendar.getInstance(); + cal1.setTime(startDate); + //当前时间 + Calendar cal2 = Calendar.getInstance(); + cal2.setTime(endDate); + + + long diff = cal2.getTime().getTime() - cal1.getTime().getTime(); + + if(objects.length==3){ + type=ExcelParamUtil.getParamContent(objects[2],"string")!=null?ExcelParamUtil.getParamContent(objects[2],"string").toString():""; + secondsL=buildSecondsFmt(type); + } + Double time=new Double(0); + boolean checkType=true; + switch (type){ + case "Y": + time= getTime(startDate, endDate)/(nd.doubleValue())/365.0; + break; + case "M": + Long monthR=getByField(cal1, cal2, Calendar.YEAR)*12 + getByField(cal1, cal2, Calendar.MONTH); + time= monthR.doubleValue(); + break; + case "D": + double dayR=getTime(startDate, endDate)/(nd.doubleValue()); + time= dayR; + break; + case "H": + double hourH=getTime(startDate, endDate)/(nh.doubleValue()); + time= hourH; + break; + case "I": + double minuR= getTime(startDate, endDate)/(nm.doubleValue()); + time=minuR; + break; + case "S": + double seconR=getTime(startDate, endDate)/ns.doubleValue(); + time= seconR; + break; + default: + checkType=false; + break; + } + if(!checkType){ + String func="DATEDIFF"; + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson= ErrorUtil.buildError(func,number-1,number-1,func+"函数第3个参数不正确"); + throw new RuntimeException(errorJson.getString("msg")); + } + BigDecimal b = new BigDecimal(time); + double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + result=f1; + return new DataType(DataType.NUMBER,result); + } + + /** + * 日期加减天数 + * @param objects + * @return + */ + @Override + public DataType dateAdd(Object... objects) { + Class[] typeObjects=new Class[]{DateAndString.class,Integer.class,String.class}; + IgnoreParamFilter.commonFilter("DATEADD",2,3,typeObjects,objects); + + String type="D"; + if(objects.length==3){ + type=objects[2].toString(); + } + + Object tcontent=DateUtil.getContent(objects[0],formatter); + Double numD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[1],"")!=null?ExcelParamUtil.getParamContent(objects[1],"").toString():""); + + int num=numD.intValue(); + if(ExcelParamUtil.checkIsNull(tcontent,numD,type,ExcelParamUtil.CHECKLEVEL_STRING)){ + throw new RuntimeException("日期加减函数的参数不能为空"); + } + Object result=""; + + try { + Date date=null; + if(tcontent instanceof String || tcontent instanceof Character){ + format=DateUtil.buildFormat(tcontent.toString()); + if(null==format){ + throw new RuntimeException("日期加减函数的格式化参数不能为空"); + } + date=formateDateStr(tcontent.toString(),format); + }else { + date=(Date)tcontent; + } + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + boolean checkType=true; + switch (type){ + case "Y": + cal.add(Calendar.YEAR,num); + break; + case "M": + cal.add(Calendar.MONTH,num); + break; + case "D": + cal.add(Calendar.DAY_OF_MONTH,num); + break; + case "H": + cal.add(Calendar.HOUR_OF_DAY,num); + break; + case "I": + cal.add(Calendar.MINUTE,num); + break; + case "S": + cal.add(Calendar.SECOND,num); + break; + default: + checkType=false; + break; + } + if(!checkType){ + String func="DATEADD"; + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson= ErrorUtil.buildError(func,number-1,number-1,func+"函数第3个参数不正确"); + throw new RuntimeException(errorJson.getString("msg")); + } + Date newDate=cal.getTime(); + String nDate=formateDateStr(newDate,format); + result=nDate; + + } catch (ParseException e) { + logger.error("err",e); + } + return new DataType(DataType.STRING,result); + } + + /** + * 返回年份 + * @param objects + * @return + */ + @Override + public DataType year(Object... objects) { + Object reuslt=new Object(); + Class[] typeObjects=new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("YEAR",1,1,typeObjects,objects); + Object obj=objects[0]; + Object date=DateUtil.getContent(obj,formatter); + if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ + return new DataType(DataType.NUMBER,0); + } + int year=0; + try { + year=getDateTimeValue(date,"Y","YEAR"); + reuslt=year; + } catch (ParseException e) { + logger.error("err",e); + } + + return new DataType(DataType.NUMBER,reuslt); + } + + /** + * 返回是今年第几月 + * @param objects + * @return + */ + @Override + public DataType month(Object... objects) { + + Object reuslt=new Object(); + Class[] typeObjects=new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("MONTH",1,1,typeObjects,objects); + Object obj=objects[0]; + Object date=DateUtil.getContent(obj,formatter); + if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ + return new DataType(DataType.NUMBER,0); + } + boolean isDate=checkDateString(date!=null?date.toString():""); + if(!isDate){ + return new DataType(DataType.NUMBER,0); + } + int month=0; + try { + month=getDateTimeValue(date,"M","MONTH"); + reuslt=month+1; + } catch (ParseException e) { + logger.error("err",e); + } + + return new DataType(DataType.NUMBER,reuslt); + } + + /** + * 返回日期是本月几号 + * @param objects + * @return + */ + @Override + public DataType day(Object... objects) { + Object reuslt=new Object(); + Class[] typeObjects=new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("DAY",1,1,typeObjects,objects); + Object obj=objects[0]; + Object date=DateUtil.getContent(obj,formatter); + if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ + return new DataType(DataType.NUMBER,0); + } + int day=0; + try { + day=getDateTimeValue(date,"D","DAY"); + reuslt=day; + } catch (ParseException e) { + logger.error("err",e); + } + + return new DataType(DataType.NUMBER,reuslt); + + } + + /** + * 返回时钟位置 + * @param objects + * @return + */ + @Override + public DataType hour(Object... objects) { + + Object reuslt=new Object(); + Class[] typeObjects=new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("HOUR",1,1,typeObjects,objects); + Object obj=objects[0]; + Object date=DateUtil.getContent(obj,formatter); + if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ + return new DataType(DataType.NUMBER,0); + } + Integer hour=0; + try { + hour=getDateTimeValue(date,"H","HOUR"); + reuslt=hour; + } catch (ParseException e) { + logger.error("err",e); + } + + return new DataType(DataType.NUMBER,reuslt); + + } + + /** + * 返回分钟位置 + * @param objects + * @return + */ + @Override + public DataType minute(Object... objects) { + Object reuslt=new Object(); + Class[] typeObjects=new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("MINUTE",1,1,typeObjects,objects); + Object obj=objects[0]; + Object date=DateUtil.getContent(obj,formatter); + if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ + return new DataType(DataType.NUMBER,0); + } + int minute=0; + try { + minute=getDateTimeValue(date,"I","MINUTE"); + + reuslt=minute; + } catch (ParseException e) { + logger.error("err",e); + } + + return new DataType(DataType.NUMBER,reuslt); + } + + /*** + * 返回秒钟位置 + * @param objects + * @return + */ + @Override + public DataType seconds(Object... objects) { + Object reuslt=new Object(); + Class[] typeObjects=new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("SECOND",1,1,typeObjects,objects); + Object obj=objects[0]; + Object date=DateUtil.getContent(obj,formatter); + if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ + return new DataType(DataType.NUMBER,0); + } + int seconds=0; + try { + seconds=getDateTimeValue(date,"S","SECOND"); + reuslt=seconds; + } catch (ParseException e) { + logger.error("err",e); + } + + return new DataType(DataType.NUMBER,reuslt); + + } + + /** + * 计算是本月的第几周 + * @param objects + * @return + */ + @Override + public DataType weekNum(Object... objects) { + Class[] typeObjects=new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("WEEKNUM",1,1,typeObjects,objects); + Object obj=objects[0]; + Object date=DateUtil.getContent(obj,formatter); + if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ + return new DataType(DataType.NUMBER,0); + } + int weekNum=0; + try { + //在JDK中可能会把前一年末尾的几天判定为下一年的第一周 + weekNum=getDateTimeValue(date,"WM","WEEKNUM"); + + } catch (ParseException e) { + logger.error("err",e); + } + return new DataType(DataType.NUMBER,weekNum); + } + + /** + * 判断是周几,因为周几是从周天的0开始算,所以返回数据需要减1 + * @param objects + * @return + */ + @Override + public DataType weekDay(Object... objects) { + Class[] typeObjects=new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("WEEKDAY",1,1,typeObjects,objects); + Object obj=objects[0]; + Object date=DateUtil.getContent(obj,formatter); + if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ + return new DataType(DataType.NUMBER,0); + } + int weekDay=0; + try { + weekDay=getDateTimeValue(date,"DW","WEEKDAY"); + } catch (ParseException e) { + logger.error("err",e); + } + + return new DataType(DataType.NUMBER,weekDay>0?(weekDay-1):weekDay); + } + + @Override + public DataType dayOfMonth(Object... objects) { + String dayType=""; + if(objects!=null && objects.length>0 && objects[0]!=null){ + dayType=objects[0].toString(); + } + + // 获取当前年份、月份、日期 + Calendar cale = Calendar.getInstance(); + // 获取当月第一天和最后一天 + SimpleDateFormat formatTemp = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String firstday="", lastday=""; + String date=""; + switch (dayType.toLowerCase()){ + case "first": + // 获取当前月的第一天 + cale = Calendar.getInstance(); + cale.add(Calendar.MONTH, 0); + cale.set(Calendar.DAY_OF_MONTH, 1); + cale.set(Calendar.HOUR_OF_DAY,0); + cale.set(Calendar.MINUTE,0); + firstday = formatTemp.format(cale.getTime()); + date=firstday; + break; + case "last": + // 获取当前月的最后一天 + cale = Calendar.getInstance(); + cale.add(Calendar.MONTH, 1); + cale.set(Calendar.DAY_OF_MONTH, 0); + cale.set(Calendar.HOUR_OF_DAY,0); + cale.set(Calendar.MINUTE,0); + lastday = formatTemp.format(cale.getTime()); + date=lastday; + break; + default: + // 获取指定的某一天 + if(dayType==null || dayType.trim().equalsIgnoreCase("")){ + dayType="0"; + } + cale = Calendar.getInstance(); + cale.add(Calendar.MONTH, 1); + cale.set(Calendar.HOUR_OF_DAY,0); + cale.set(Calendar.MINUTE,0); + cale.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dayType)); + lastday = formatTemp.format(cale.getTime()); + date=lastday; + break; + } + logger.info("firstday:"+firstday+" lastday:"+lastday); + return new DataType(DataType.STRING,date); + } + + @Override + public DataType monthOfYear(Object... objects) { + String dayType=""; + if(objects!=null && objects.length>0 && objects[0]!=null){ + dayType=objects[0].toString(); + } + if(dayType==null || dayType.equalsIgnoreCase("")){ + dayType="0"; + } + int month=Integer.parseInt(dayType); + if(month>0){ + month-=1; + } + SimpleDateFormat dayFormatTemp = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat formatTemp = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + Calendar cale = Calendar.getInstance(); + cale.set(cale.get(Calendar.YEAR),month,1); + + String lastday = formatTemp.format(cale.getTime()); + System.out.println(lastday); + return new DataType(DataType.STRING,lastday); + } + + @Override + public DataType timeOfDay(Object... objects) { + String dayType=""; + if(objects!=null && objects.length>0 && objects[0]!=null){ + dayType=objects[0].toString(); + } + + SimpleDateFormat dayFormatTemp = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat formatTemp = new SimpleDateFormat("HH:mm"); + Calendar cale = Calendar.getInstance(); + try { + cale.setTime(dayFormatTemp.parse("2021-01-17 13:22")); + } catch (ParseException e) { + logger.error("err",e); + } + cale.set(Calendar.HOUR_OF_DAY,Integer.parseInt(dayType)); + cale.set(Calendar.MINUTE,0); + String lastday = formatTemp.format(cale.getTime()); + return new DataType(DataType.STRING,lastday); + } + + @Override + public DataType eoMonth(Object... objects) { + //校验 + Class[] typeObjects = new Class[]{DateAndString.class, Integer.class}; + IgnoreParamFilter.commonFilter("EOMONTH",1,2, typeObjects, objects); + + //获取日期和加减参数 + Object dateObj = objects[0]; + Object dateContent = dateObj != null ? DateUtil.getContent(dateObj, formatter):null; + + //不支持变量 + if(objects.length > 1 && objects[1] instanceof DataType){ + throw new RuntimeException("EOMONTH函数第二个参数只能是常量"); + } + + Object tempObj = objects.length > 1 ? objects[1]:null; + Object numObj = tempObj != null && ExcelParamUtil.getParamContent(tempObj,"") != null ? ExcelParamUtil.getParamContent(tempObj,"").toString():null; + + int num = 0; + if(numObj != null){ + try{ + num = Integer.parseInt(numObj+""); + }catch (Exception e){ + throw new RuntimeException("EOMONTH函数第二个参数只能是整数"); + } + } + if(ExcelParamUtil.checkIsNull(dateContent, ExcelParamUtil.CHECKLEVEL_STRING)) throw new RuntimeException("日期参数不能为空"); + + Date date=null; + try { + if(dateContent instanceof String || dateContent instanceof Character){ + format = DateUtil.buildFormat(dateContent.toString()); + SimpleDateFormat sdf = new SimpleDateFormat(format); + date = sdf.parse(dateContent.toString()); + }else { + date = (Date)dateContent; + } + } catch (Exception e) { + throw new RuntimeException("EOMONTH函数参数类型错误"); + } + + //在传入日期上进行月份加减操作,并设置为当月第一天 + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.MONTH, num); + cal.set(Calendar.DAY_OF_MONTH, 1); + + //取该月最后一天 + cal.add(Calendar.MONTH,1); + cal.add(Calendar.DAY_OF_MONTH,-1); + + Date newDate = cal.getTime(); + Object rtnStr = null; + try { + rtnStr = formateDateStr(newDate,format); + } catch (ParseException e) { + logger.error("err",e); + } + return new DataType(DataType.STRING,rtnStr); + } + + @Override + public DataType workdayIntl(Object... objects) { + //校验 + String func = "NETWORKDAYSPI"; + IgnoreParamFilter.commonFilter(func,3,3, null, objects); + + //获取开始日期 + Object startObj = objects[0]; + Object startDateObj = startObj != null ? DateUtil.getContent(startObj, formatter):null; + + Date startDate = null; + if(startDateObj != null){ + if(startDateObj instanceof String || startDateObj instanceof Character){ + format = DateUtil.buildFormat(startDateObj.toString()); + + if(StringUtils.isEmpty(format)) { + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数开始时间格式错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + startDate = formateDateStr(startDateObj.toString(), format); + }else { + startDate = (Date)startDateObj; + } + } + + //结束日期 + Object endObj = objects[1]; + Object endDateObj = endObj != null ? DateUtil.getContent(endObj, formatter):null; + + Date endDate = null; + if(endDateObj != null){ + + if(endDateObj instanceof String || endDateObj instanceof Character){ + format = DateUtil.buildFormat(endDateObj.toString()); + if(StringUtils.isEmpty(format)) { + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数结束时间格式错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + endDate = formateDateStr(endDateObj.toString(), format); + }else { + endDate = (Date)startDateObj; + } + } + + //人员参数 + Object employeeObj = objects[2]; + if(!IgnoreParamFilter.isEmployee(employeeObj)) throw new RuntimeException(func+"函数第三个参数必须是人员参数"); + + String empIdStr = employeeObj != null ? ((DataType)employeeObj).getContent()+"" : null; + SimpleEmployee currEmp = employeeObj != null ? ((DataType)employeeObj).getEmployee() : null; + String tenantKey = currEmp != null ? currEmp.getTenantKey() : null; + + if(ExcelParamUtil.checkIsNull(startDate, endDate, empIdStr, ExcelParamUtil.CHECKLEVEL_STRING)){ + throw new RuntimeException(func+"函数参数不能为空"); + } + + if(StringUtils.isEmpty(tenantKey)){ + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数未能获取到租户"); + throw new RuntimeException(errorJson.getString("msg")); + } + return new DataType(DataType.NUMBER, 1); + } + + @Override + public DataType maxDate(Object... objects) { + if(objects == null || objects.length == 0){ + throw new RuntimeException("MAXDATE函数的参数不能为空"); + } + Object dateObj = null; + Date date = null; + + for(int i=0; i0){ + throw new RuntimeException("CURRYEAR函数不允许有参数"); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year=cal.get(Calendar.YEAR); + return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); + } + + @Override + public DataType currMonth(Object... objects) { + if(objects.length>0){ + throw new RuntimeException("CURRMONTH函数不允许有参数"); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year=cal.get(Calendar.MONTH)+1; + return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); + } + + @Override + public DataType currDay(Object... objects) { + if(objects.length>0){ + throw new RuntimeException("CURRDAY函数不允许有参数"); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year=cal.get(Calendar.DAY_OF_MONTH); + return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); + } + + @Override + public DataType currWeek(Object... objects) { + if(objects.length>0){ + throw new RuntimeException("CURRWEEK函数不允许有参数"); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year=cal.get(Calendar.WEEK_OF_MONTH); + return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); + } + + @Override + public DataType currHour(Object... objects) { + if(objects.length>0){ + throw new RuntimeException("CURRHOUR函数不允许有参数"); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year=cal.get(Calendar.HOUR_OF_DAY); + return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); + } + + @Override + public DataType currMinute(Object... objects) { + if(objects.length>0){ + throw new RuntimeException("CURRMINUTE函数不允许有参数"); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year=cal.get(Calendar.MINUTE); + return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); + } + + @Override + public DataType currSecond(Object... objects) { + if(objects.length>0){ + throw new RuntimeException("CURRSECOND函数不允许有参数"); + } + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + int year=cal.get(Calendar.SECOND); + return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); + } + + /*******以下为日期函数的一些公共逻辑********/ + + + + + /** + * 获取日期时间的单位值,指定类型为Type,默认为 'D' 天数 + * @param date + * @param type + * @return + * @throws ParseException + */ + public Integer getDateTimeValue(Object date,String type,String func) throws ParseException { + int result=0; + try { + boolean isTime=false; + Date fDate=null; + if(date instanceof String){ + boolean isDate=checkDateString(date!=null?date.toString():""); + if(!isDate){ + return 0; + } + format=DateUtil.buildFormat(date.toString(),type); + if(format==null){ + format=DateUtil.buildFormat(date.toString()); + } + fDate=formateDateStr(date.toString(),format); + if(date.toString().indexOf(":")>0&&date.toString().indexOf("-")<0){ + isTime=true; + if(!type.equals("H")&&!type.equals("I")&&!type.equals("S")){ + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + }else { + fDate=(Date)date; + } + + int calendarType=0; + switch (type){ + case "Y": + calendarType=Calendar.YEAR; + break; + case "M": + calendarType=Calendar.MONTH; + break; + case "D": + calendarType=Calendar.DAY_OF_MONTH; + break; + case "H": + if(isTime){ + return Integer.parseInt(date.toString().split(":")[0]); + } + calendarType=Calendar.HOUR_OF_DAY; + break; + case "I": + if(isTime){ + return Integer.parseInt(date.toString().split(":")[1]); + } + calendarType=Calendar.MINUTE; + break; + case "S": + if(isTime){ + return Integer.parseInt(date.toString().split(":")[2]); + } + calendarType=Calendar.SECOND; + break; + case "WM": + calendarType=Calendar.WEEK_OF_YEAR; + long startTime1 = fDate.getTime(); + Calendar calendar = Calendar.getInstance(); + calendar.setFirstDayOfWeek(Calendar.SUNDAY);//设置星期一为一周开始的第一天 + calendar.setMinimalDaysInFirstWeek(4);//可以不用设置 + calendar.setTimeInMillis(startTime1);//获得当前的时间戳 + int weekOfYear = calendar.get(calendarType);//获得当前日期属于今年的第几周 + result=weekOfYear; + logger.info("当前是第"+result+"周"); + return result; + case "DW": + calendarType=Calendar.DAY_OF_WEEK; + break; + default: + calendarType=Calendar.HOUR_OF_DAY; + break; + } + calendar.setTime(fDate); + result=calendar.get(calendarType); + } catch (RuntimeException e) { + logger.error("err",e); + result=0; + } + return result; + } + /** + * 格式化日期时间 + * @param dateStr 日期时间原字符串 + * @param format 格式 + * @return + * @throws ParseException + */ + private Date formateDateStr(String dateStr,String format){ + SimpleDateFormat sdf = new SimpleDateFormat(format); + Date ndate= null; + try { + ndate = sdf.parse(dateStr); + } catch (ParseException e) { + logger.error("err",e); + } + return ndate; + } + + /** + * 格式日期时间为字符串 + * @param date + * @param format + * @return + * @throws ParseException + */ + private String formateDateStr(Date date,String format) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat(format); + String ndate=sdf.format(date); + return ndate; + } + + + + + /** + * 判断时间间距的单位类型 + * @param type + * @return + */ + private Long buildSecondsFmt(String type){ + Long secondsL=null; + switch (type){ + case "Y": + secondsL=new Long(365*24*60*60*1000); + break; + case "M": + secondsL=new Long(30*24*60*60*1000); + break; + case "D": + secondsL=new Long(24*60*60*1000); + break; + case "H": + secondsL=new Long(60*60*1000); + break; + case "I": + secondsL=new Long(60*1000); + break; + case "S": + secondsL=new Long(1000); + break; + default: + secondsL=new Long(60*60*1000); + break; + } + return secondsL; + } + + static Calendar calendar2=Calendar.getInstance(); + public static SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + static String format2="yyyy-MM-dd HH:mm:ss"; + + + + public static Integer getDateTimeValue2(Object date,String type,String func) throws ParseException { + int result=0; + boolean isTime=false; + Date fDate=null; + if(date instanceof String){ + format2=DateUtil.buildFormat(date.toString()); + fDate=formateDateStr2(date.toString(),format2); + if(date.toString().indexOf(":")>0&&date.toString().indexOf("-")<0){ + isTime=true; + if(!type.equals("H")&&!type.equals("I")&&!type.equals("S")){ + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + }else { + fDate=(Date)date; + } + + int calendarType=0; + switch (type){ + case "Y": + calendarType=Calendar.YEAR; + break; + case "M": + calendarType=Calendar.MONTH; + break; + case "D": + calendarType=Calendar.DAY_OF_MONTH; + break; + case "H": + if(isTime){ + return Integer.parseInt(date.toString().split(":")[0]); + } + calendarType=Calendar.HOUR_OF_DAY; + break; + case "I": + if(isTime){ + return Integer.parseInt(date.toString().split(":")[1]); + } + calendarType=Calendar.MINUTE; + break; + case "S": + if(isTime){ + return Integer.parseInt(date.toString().split(":")[2]); + } + calendarType=Calendar.SECOND; + break; + case "WM": + calendarType=Calendar.WEEK_OF_MONTH; + break; + case "DW": + calendarType=Calendar.DAY_OF_WEEK; + break; + default: + calendarType=Calendar.HOUR_OF_DAY; + break; + } + calendar2.setTime(fDate); + result=calendar2.get(calendarType); + return result; + } + + private static Date formateDateStr2(String dateStr,String format) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat(format); + Date ndate= null; + ndate = sdf.parse(dateStr); + return ndate; + } + private boolean checkDateString(String dateString){ + List datafList=new ArrayList(); + datafList.add("yyyyMMddHHmmss"); + datafList.add("yyyyMMdd"); + datafList.add("yyyyMMddHHmm"); + datafList.add("HH:mm"); + datafList.add("HH:mm:ss"); + if(RegularUtil.isNumber(dateString)){ + return false; + } + boolean r=false; + for(String s:datafList){ + SimpleDateFormat sdf = new SimpleDateFormat(s); + + Date ndate= null; + try { + ndate = sdf.parse(dateString); + r=true; + break; + } catch (ParseException e) { + logger.info(e.getMessage()); + r=false; + } + } + if(r){ + if(RegularUtil.isNumber(dateString)){ + r=false; + } + } + return r; + } + + + public static double getBetween(String beginTime, String endTime, String returnPattern) throws ParseException{ + + String format= DateUtil.buildFormat(beginTime); + SimpleDateFormat sdf = new SimpleDateFormat(format); + Date beginDate =sdf.parse(beginTime); + + format=DateUtil.buildFormat(endTime); + sdf = new SimpleDateFormat(format); + Date endDate =sdf.parse(endTime); + + Calendar beginCalendar = Calendar.getInstance(); + Calendar endCalendar = Calendar.getInstance(); + beginCalendar.setTime(beginDate); + endCalendar.setTime(endDate); + + double resutl; + switch (returnPattern) { + case "Y": + resutl= getTime(beginDate, endDate)/(24*60*60*1000)/365.0; + break; + case "M": + resutl= getByField(beginCalendar, endCalendar, Calendar.YEAR)*12 + getByField(beginCalendar, endCalendar, Calendar.MONTH); + break; + case "D": + resutl= getTime(beginDate, endDate)/(24*60*60*1000); + break; + case "H": + Long nd=new Long(60*60*1000); + resutl= getTime(beginDate, endDate)/(nd.doubleValue()); + break; + case "I": + resutl= getTime(beginDate, endDate)/(60*1000); + break; + case "S": + resutl= getTime(beginDate, endDate)/1000; + break; + default: + resutl= new Long(0); + break; + } + return resutl; + } + + + + private static Long getByField(Calendar beginCalendar, Calendar endCalendar, int calendarField){ + int r=endCalendar.get(calendarField) - beginCalendar.get(calendarField); + return new Long(r); + } + + private static long getTime(Date beginDate, Date endDate){ + return endDate.getTime() - beginDate.getTime(); + } + + +} diff --git a/src/com/engine/salary/formlua/func/finance/FinanceService.java b/src/com/engine/salary/formlua/func/finance/FinanceService.java new file mode 100644 index 000000000..29861d790 --- /dev/null +++ b/src/com/engine/salary/formlua/func/finance/FinanceService.java @@ -0,0 +1,15 @@ +package com.engine.salary.formlua.func.finance; + +import com.engine.salary.formlua.entity.parameter.DataType; + +/** + * 财务函数分类 + */ +public interface FinanceService { + /** + * 金额转换 + * @param objects + * @return + */ + public DataType getMoney(Object... objects); +} diff --git a/src/com/engine/salary/formlua/func/finance/FinanceServiceImpl.java b/src/com/engine/salary/formlua/func/finance/FinanceServiceImpl.java new file mode 100644 index 000000000..acda12221 --- /dev/null +++ b/src/com/engine/salary/formlua/func/finance/FinanceServiceImpl.java @@ -0,0 +1,119 @@ +package com.engine.salary.formlua.func.finance; + +import com.engine.salary.formlua.entity.parameter.DataType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.math.BigDecimal; +public class FinanceServiceImpl implements FinanceService{ + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Override + public DataType getMoney(Object... objects) { + DataType moneyDataType=new DataType(); + moneyDataType.setDataType(DataType.STRING); + moneyDataType.setContent(""); + if(objects!=null && objects.length>0){ + String money=null; + if(objects[0] instanceof DataType){ + DataType dataType=(DataType)objects[0]; + money=dataType.getContent()==null?null:dataType.getContent().toString(); + }else{ + if(objects[0]!=null){ + money=objects[0].toString(); + } + } + moneyDataType=convertCurrency(money); + } + return moneyDataType; + } + public DataType convertCurrency(String param) { + // 汉字的数字 + String[] cnNums = new String[]{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; + // 基本单位 + String[] cnIntRadice = new String[]{"", "拾", "佰", "仟"}; + // 对应整数部分扩展单位 + String[] cnIntUnits = new String[]{"", "万", "亿", "兆"}; + // 对应小数部分单位 + String[] cnDecUnits = new String[]{"角", "分", "毫", "厘"}; + // 整数金额时后面跟的字符 + String cnInteger = "整"; + // 整型完以后的单位 + String cnIntLast = "元"; + // 最大处理的数字 + BigDecimal maxNum = new BigDecimal(999999999999999.9999); + // 金额整数部分 + String integerNum; + // 金额小数部分 + String decimalNum; + // 输出的中文金额字符串 + String chineseStr = ""; + // 分离金额后用的数组,预定义 + String[] parts; + BigDecimal money=null; + if (param == null || param.equalsIgnoreCase("")) { + return new DataType(DataType.STRING,""); + } + money = new BigDecimal(param); + if (money.compareTo(maxNum)==0) { + // 超出最大处理数字 + return new DataType(DataType.STRING,""); + } + if (money.intValue() == 0) { + chineseStr = cnNums[0] + cnIntLast + cnInteger; + return new DataType(DataType.STRING,chineseStr); + } + // 转换为字符串 + //如果是整数 + if (param.indexOf('.') == -1) { + integerNum = money.intValue()+""; + decimalNum = ""; + //如果存在小数 + } else { + parts = param.split("\\."); + integerNum = parts[0]; + decimalNum = parts[1]; + } + // 获取整型部分转换 + if (integerNum.length() > 0) { + int zeroCount = 0; + int intLen = integerNum.length(); + for (int i = 0; i < intLen; i++) { + String n = integerNum.substring(i, i+1); + logger.info("转换中文:"+n); + int p = intLen - i - 1; + int q = p / 4; + int m = p % 4; + if (n.equals("0")) { + zeroCount++; + } else { + if (zeroCount > 0) { + chineseStr += cnNums[0]; + } + // 归零 + zeroCount = 0; + chineseStr += cnNums[Integer.parseInt(n)] + cnIntRadice[m]; + } + if (m == 0 && zeroCount < 4) { + chineseStr += cnIntUnits[q]; + } + } + chineseStr += cnIntLast; + } + // 小数部分 + if (!decimalNum.equals("")) { + int decLen = decimalNum.length(); + for (int i = 0; i < decLen; i++) { + String n = decimalNum.substring(i, i+1); + if (!n.equals("0")) { + chineseStr += cnNums[Integer.parseInt(n)] + cnDecUnits[i]; + } + } + } + if (chineseStr.equals("")) { + chineseStr += cnNums[0] + cnIntLast + cnInteger; + } else if (decimalNum.equals("")) { + chineseStr += cnInteger; + } + return new DataType(DataType.STRING,chineseStr); + } +} diff --git a/src/com/engine/salary/formlua/func/finance/FinanceServiceTestImpl.java b/src/com/engine/salary/formlua/func/finance/FinanceServiceTestImpl.java new file mode 100644 index 000000000..ef169dbc5 --- /dev/null +++ b/src/com/engine/salary/formlua/func/finance/FinanceServiceTestImpl.java @@ -0,0 +1,45 @@ +package com.engine.salary.formlua.func.finance; + +import com.engine.salary.formlua.entity.parameter.DataType; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author + */ +public class FinanceServiceTestImpl implements FinanceService{ + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + String[] cnNums = new String[]{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; + @Override + public DataType getMoney(Object... objects) { + if(objects==null){ + throw new RuntimeException("GETMONEY函数的参数不能为空"); + }else if(objects.length!=1){ + throw new RuntimeException("GETMONEY函数只能允许一个参数"); + } + Object param=objects[0]; + Object content=null; + if(param instanceof DataType){ + DataType dataType=(DataType)param; + content=dataType.getContent(); + }else{ + content=param; + } + if(content!=null && !content.toString().equals("")){ + char[] chars=content.toString().toCharArray(); + String chineseNum=""; + for(char cstr:chars){ + String charstr=String.valueOf(cstr); + if(StringUtils.isNumeric(charstr)){ + int csNum=Integer.parseInt(charstr); + chineseNum+=cnNums[csNum]; + }else if(charstr.equalsIgnoreCase(".")){ + chineseNum+=""; + } + } + logger.info(chineseNum); + } + return null; + } +} diff --git a/src/com/engine/salary/formlua/func/find/FindFuncsService.java b/src/com/engine/salary/formlua/func/find/FindFuncsService.java new file mode 100644 index 000000000..65bdcba0e --- /dev/null +++ b/src/com/engine/salary/formlua/func/find/FindFuncsService.java @@ -0,0 +1,31 @@ +package com.engine.salary.formlua.func.find; + + +import com.engine.salary.formlua.entity.parameter.DataType; + +/** + * 查找函数 + */ +public interface FindFuncsService { + Object chooseOne(Object... objects); + /** + * choose函数 + * @param objs + * @return + */ + Object choose(Object... objs); + + /** + * match函数 + * @param objs + * @return + */ + DataType match(Object... objs); + + /** + * vlookups函数 + * @param objs + * @return + */ + Object vlookups(Object... objs); +} diff --git a/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java b/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java new file mode 100644 index 000000000..347ad130e --- /dev/null +++ b/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java @@ -0,0 +1,193 @@ +package com.engine.salary.formlua.func.find; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.weaver.excel.formula.core.rpc.ExcelDubboInvoker; +import com.weaver.excel.formula.core.rpc.RpcMethod; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.excel.formula.entity.parameter.FuncNames; +import com.weaver.excel.formula.entity.parameter.standard.FormulaFilterData; +import com.weaver.excel.formula.util.ErrorUtil; +import com.weaver.excel.formula.util.ExcelParamUtil; +import com.weaver.excel.formula.util.IgnoreParamFilter; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.lang.reflect.Array; +import java.lang.reflect.InvocationTargetException; +import java.util.List; +import java.util.Map; + +@Service("findFuncsService") +public class FindFuncsServiceImpl implements FindFuncsService{ + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private ExcelDubboInvoker excelDubboInvoker; + + @Override + public Object chooseOne(Object... objects) { + DataType chooseResult=new DataType(); + if(objects != null && objects.length>=2){ + List dataList= ExcelParamUtil.getParamContent(objects); + Object firstData=dataList.get(0); + for (int i=1;i filterDatas = conditionObj != null ? conditionObj.getFormulaFilterDataList(): Lists.newArrayList(); + SimpleEmployee user = formObj.getEmployee(); + + Object[] params = {formId, filterDatas, user}; + return excelDubboInvoker.invokeCommonDubbo(DataType.class,formObj.getModule()+"", RpcMethod.choose, params); + } + + @Override + public DataType match(Object... objects) { + //参数校验 + String func = FuncNames.MATCH.toString(); + IgnoreParamFilter.commonFilter(func,2,2, null, objects); + + Object valueObj = objects[0]; + Object[] arrayObj = null; + + //将第二个参数转数组 + try{ + arrayObj = (Object[]) objects[1]; + }catch (Exception e){ + Integer number = IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第二个参数必须是数组类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + + //所在下标 + int index = ArrayUtils.indexOf(arrayObj, valueObj); + return new DataType(DataType.NUMBER, index); + } + + @Override + public Object vlookups(Object... objects) { + //参数校验 + String func = FuncNames.VLOOKUPS.toString(); + IgnoreParamFilter.commonFilter(func,3,3, null, objects); + + DataType formObj = (DataType)objects[0]; + DataType conditionObj = objects[1] != null ? (DataType)objects[1] : null; + //拿出返回数据 + Object returnObjs=objects[2]; + //初始化数组 + DataType[] rtnCols = null; + //判断是否是数组 + if(returnObjs!=null && returnObjs.getClass().isArray()){ + logger.info("执行器查找函数返回数据为DataType数组"+JSON.toJSONString(returnObjs)); + //获取数组长度 + int len= Array.getLength(returnObjs); + rtnCols=new DataType[len]; + //遍历并转换数据后放入rtnCols + for(int i=0;i fieldIds = Lists.newArrayList(); + if(ArrayUtils.isNotEmpty(rtnCols)){ + for (DataType item : rtnCols) { + if(item != null && StringUtils.isNotEmpty(item.getFieldId())) fieldIds.add(item.getFieldId()); + } + } + + Long formId = formObj.getFormId(); + List filterDatas = conditionObj != null ? conditionObj.getFormulaFilterDataList() : Lists.newArrayList(); + SimpleEmployee user = formObj.getEmployee(); + + Object[] params = {formId+"", filterDatas, fieldIds, null,user}; + + DataType[] dataTypes=new DataType[1]; + Object dubboResult=excelDubboInvoker.invokeCommonDubbo(List.class,formObj.getModule()+"", RpcMethod.vlookups, params); + logger.info("返回结果:"+JSON.toJSONString(dubboResult)); + + if(dubboResult!=null && dubboResult instanceof List){ + try { + List resultObjectList=(List)dubboResult; + dataTypes=new DataType[resultObjectList.size()]; + for(int i =0;i classa=Class.forName(map.get("class").toString()) ; + Object typeObject=classa.newInstance(); + BeanUtils.populate(typeObject,map); + if(typeObject instanceof DataType){ + dataTypes[i]=(DataType) typeObject; + } + }else if(resultParam instanceof DataType){ + dataTypes[i]=(DataType) resultParam; + }else{ + logger.info("Dubbo接口返回异常数据类型:"+resultParam.getClass().getName()); + } + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + }catch (Exception e){ + e.printStackTrace(); + } + }else{ + DataType nomalData=new DataType(DataType.NUMBER, 0); + dataTypes[0]=nomalData; + } + return dataTypes.length==1?dataTypes[0]:dataTypes; + } +} diff --git a/src/com/engine/salary/formlua/func/find/FindFuncsTestServiceImpl.java b/src/com/engine/salary/formlua/func/find/FindFuncsTestServiceImpl.java new file mode 100644 index 000000000..4afb2fc0b --- /dev/null +++ b/src/com/engine/salary/formlua/func/find/FindFuncsTestServiceImpl.java @@ -0,0 +1,166 @@ +package com.engine.salary.formlua.func.find; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.entity.parameter.FuncNames; +import com.engine.salary.formlua.util.ErrorUtil; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.engine.salary.formlua.util.IgnoreParamFilter; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.compress.utils.Lists; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + + +public class FindFuncsTestServiceImpl implements FindFuncsService{ + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Override + public Object chooseOne(Object... objects) { + + if(objects==null || objects.length<2){ + throw new RuntimeException("CHOOSE函数的参数不能少于两个"); + } + DataType dataType=new DataType(); + boolean checkResult= IgnoreParamFilter.checkType(objects); + if(checkResult){ + int indexData=0; + Object firstObj=objects[0]; + try { + if(firstObj !=null){ + Double doubleValue=null; + if(firstObj instanceof DataType){ + DataType indexDataType=(DataType)firstObj; + if(ExcelParamUtil.findDataType(indexDataType.getDataType()).equalsIgnoreCase(DataType.NUMBER)){ + if(indexDataType.getContent()!=null){ + doubleValue=Double.parseDouble(indexDataType.getContent()+""); + } + } + }else{ + doubleValue=Double.parseDouble(firstObj+""); + } + indexData=doubleValue.intValue(); + }else{ + throw new RuntimeException("CHOOSE函数第一个参数不能为空"); + } + + } catch (NumberFormatException e) { + logger.error("err",e); + } + List dataList=ExcelParamUtil.getParamContent(objects); + if(indexData>=dataList.size()){ + indexData=dataList.size()-1; + } + Object resultObj=dataList.get(indexData); + if(resultObj!=null){ + if(resultObj instanceof DataType){ + dataType=(DataType)resultObj; + }else { + String type=ExcelParamUtil.getParamType(resultObj.getClass().getName()); + dataType.setDataType(type); + dataType.setContent(resultObj); + } + } + }else { + throw new RuntimeException("CHOOSE函数的参数类型不一致"); + } + logger.info("CHOOSE校验执行结果:"+ JSON.toJSONString(dataType)); + return dataType; + } + + @Override + public Object choose(Object... objects) { + //参数校验 + String func = FuncNames.CHOOSE.toString(); + IgnoreParamFilter.commonFilter(func,2,2, null, objects); + + //参数类型校验 + if(!(objects[0] instanceof DataType) || !DataType.FORM.equals(((DataType)objects[0]).getDataType())){ + Integer number = IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第一个参数必须是来源表"); + throw new RuntimeException(errorJson.getString("msg")); + } + + //第二个参数校验 + List conditionList = ExcelParamUtil.getParamContent(objects[1]); + if(CollectionUtils.isEmpty(conditionList)){ + Integer number = IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第二个参数返回值必须是boolean类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + + DataType data = new DataType(DataType.NUMBER, 1); + List rtnList = Lists.newArrayList(); + rtnList.add(data); + return rtnList; + } + + @Override + public DataType match(Object... objects) { + //参数校验 + String func = FuncNames.MATCH.toString(); + IgnoreParamFilter.commonFilter(func,2,2, null, objects); + + Object valueObj = objects[0]; + List arrayList = ExcelParamUtil.getParamContent(objects[1]); + + if(valueObj instanceof DataType){ + valueObj = ((DataType) valueObj).getContent(); + } + + //将第二个参数转数组 + if(CollectionUtils.isEmpty(arrayList)){ + Integer number = IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第二个参数必须是数组类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + + //所在下标 + int index = arrayList.indexOf(valueObj); + return new DataType(DataType.NUMBER, index); + } + + @Override + public Object vlookups(Object... objects) { + //参数校验 + String func = FuncNames.VLOOKUPS.toString(); + IgnoreParamFilter.commonFilter(func,3,3, null, objects); + + List conditionList = ExcelParamUtil.getParamContent(objects[1]); + DataType conditionObj=new DataType(); + if(conditionList!=null && conditionList.size()>1){ + conditionObj=(DataType) conditionList.get(0); + } + List rtnCols = ExcelParamUtil.getParamContent(objects[2]); + + //参数类型校验 +// if(!(objects[0] instanceof DataType) || !DataType.FORM.equals(((DataType)objects[0]).getDataType())){ +// Integer number = IgnoreParamFilter.getSetFuncNumber(func); +// JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第一个参数必须是数据源"); +// throw new RuntimeException(errorJson.getString("msg")); +// } + if(CollectionUtils.isEmpty(conditionList)){ + Integer number = IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第二个参数返回值必须是boolean类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + if(conditionObj!=null && conditionObj.getSubLogic()!=null && conditionObj.getSubLogic().size()>1){ + throw new RuntimeException("VLOOKUPS函数的第二组参数不能嵌套使用逻辑函数(AND、OR)"); + } + if (CollectionUtils.isEmpty(rtnCols)){ + Integer number = IgnoreParamFilter.getSetFuncNumber(func); + JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第三个参数返回值必须是集合类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + + DataType data = new DataType(DataType.NUMBER, 1); +// List rtnList = Lists.newArrayList(); +// rtnList.add(data); + //函数中,涉及到集合,只解析数组类型,List识别不了 + DataType[] dataTypes=new DataType[1]; + dataTypes[0]=data; + return dataTypes.length==1?dataTypes[0]:dataTypes; + } +} diff --git a/src/com/engine/salary/formlua/func/logic/IfOperator.java b/src/com/engine/salary/formlua/func/logic/IfOperator.java new file mode 100644 index 000000000..8c1791b54 --- /dev/null +++ b/src/com/engine/salary/formlua/func/logic/IfOperator.java @@ -0,0 +1,97 @@ +package com.engine.salary.formlua.func.logic; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.formlua.core.exception.ExcelRunTimeException; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.ErrorUtil; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.engine.salary.formlua.util.IgnoreParamFilter; +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.op.OperatorIf; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class IfOperator extends OperatorIf { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Integer number= IgnoreParamFilter.getSetFuncNumber("IF"); + if(list==null ||list.length !=3){ + JSONObject errorJson= ErrorUtil.buildError("IF",number,number,"IF函数只允许三个参数"); + throw new ExcelRunTimeException("IF函数只允许三个参数"); + } + Object obj = list.get(0).getObject(parent); + logger.info("IF参数:"+ JSON.toJSONString(obj)); + boolean isDataTypeBool=false; + DataType boolDtaType=null; + if(obj!=null && obj instanceof DataType){ + boolDtaType=(DataType)obj; + if(boolDtaType.getContent() !=null && ( boolDtaType.getContent() instanceof Boolean )){ + isDataTypeBool=true; + obj=boolDtaType.getContent(); + }else{ + switch (obj+""){ + case "true": + obj=true; + isDataTypeBool=true; + break; + case "false": + obj=false; + isDataTypeBool=true; + break; + default: + isDataTypeBool=false; + break; + } + } + }else if(obj instanceof Boolean){ + isDataTypeBool=true; + } + if (obj == null) { + JSONObject errorJson=ErrorUtil.buildError("IF",number,number,"IF函数参数不能为空"); + throw new RuntimeException(errorJson.getString("msg")); + } else if (!(obj instanceof Boolean) && (! (obj instanceof DataType) )) { + JSONObject errorJson=ErrorUtil.buildError("IF",number,number,"IF函数判断条件必须是真假值"); + throw new RuntimeException(errorJson.getString("msg")); + }else if(!isDataTypeBool){ + JSONObject errorJson=ErrorUtil.buildError("IF",number,number,"IF函数判断条件必须是真假值"); + throw new RuntimeException(errorJson.getString("msg")); + }else { + if (((Boolean)obj).booleanValue() == true){ + OperateData operateData=list.get(1); + Object object=operateData.getObject(parent); +// if(object instanceof DataType){ +// String type= ExcelParamUtil.getParamType(object); +// if(type.equalsIgnoreCase("date")){ +// object=ExcelParamUtil.getParamContent(object,"string"); +// } +// } + OperateData operateData1=new OperateData(ExcelParamUtil.getParamContent(object,""),operateData.getType(parent)); + return operateData1; + }else{ + OperateData operateData=list.get(2); + Object object=operateData.getObject(parent); +// if(object instanceof DataType){ +// String type=ExcelParamUtil.getParamType(object); +// if(type.equalsIgnoreCase("date")){ +// object=ExcelParamUtil.getParamContent(object,"string"); +// } +// } + OperateData operateData1=new OperateData(ExcelParamUtil.getParamContent(object,""),operateData.getType(parent)); + return operateData1; + } + } + } + + public IfOperator(String aName) { + super(aName); + } + + public IfOperator(String aAliasName, String aName, String aErrorInfo) { + super(aAliasName, aName, aErrorInfo); + } +} diff --git a/src/com/engine/salary/formlua/func/logic/LogicService.java b/src/com/engine/salary/formlua/func/logic/LogicService.java new file mode 100644 index 000000000..722608ab3 --- /dev/null +++ b/src/com/engine/salary/formlua/func/logic/LogicService.java @@ -0,0 +1,17 @@ +package com.engine.salary.formlua.func.logic; + +import com.engine.salary.formlua.entity.parameter.DataType; + + +public interface LogicService { + public DataType not(Object... object); + public DataType isEmpty(Object... objs); + public DataType isTrue(Object... objs); + public DataType isFalse(Object... objs); + public DataType and(Object... objs); + public DataType or(Object... objs); + public DataType likeFunc(Object... objects); + public DataType ifs(Object... objects); + public DataType find(Object... objects); + public DataType switchs(Object... objects); +} diff --git a/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java new file mode 100644 index 000000000..d8a9b1a81 --- /dev/null +++ b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java @@ -0,0 +1,495 @@ +package com.engine.salary.formlua.func.logic; + +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.IgnoreParamFilter; +import com.weaver.excel.formula.entity.parameter.FuncNames; +import com.weaver.excel.formula.util.ErrorUtil; +import com.weaver.excel.formula.util.ExcelParamUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @className: + * @Description:Excel逻辑函数 + * @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; + } + + resultdataType.setContent(!cnd); + return resultdataType; + } + + @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 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]; + } + + 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"); + + 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; + } + + 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=0?true:false){ + result=ridx>=0?true:false; + break; + } + + + } + 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")); + } + } + } + } + + 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]); + } +// 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]); + } + + } + } + } + } + //如果没有条件符合,返回默认值,最后一个参数为默认值 + 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) { + + 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"); + } + } + + + //将参数转换成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("参数不能为空"); + } + + //判断参数类型是否一致 + 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("查找类型错误"); + } + + for (Object keyO:keyList){ + for (Object target:targetList){ + if(keyO.equals(target)){ + return true; + } + } + } + + 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); + + 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; + } + + } + } + } + String typeStr=ExcelParamUtil.checkParamType(ExcelParamUtil.getParamType(objects[objects.length-1])); + result=type.equalsIgnoreCase(typeStr); + return result; + } + +} diff --git a/src/com/engine/salary/formlua/func/logic/LogicUtils.java b/src/com/engine/salary/formlua/func/logic/LogicUtils.java new file mode 100644 index 000000000..0768e9b12 --- /dev/null +++ b/src/com/engine/salary/formlua/func/logic/LogicUtils.java @@ -0,0 +1,110 @@ +package com.engine.salary.formlua.func.logic; + +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.entity.standard.FormulaFilterData; +import com.weaver.common.form.stat.FilterFormData; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +/** + * 逻辑函数构建条件工具类 + */ +public class LogicUtils { + protected static final Logger logger = LoggerFactory.getLogger(LogicUtils.class); + /** + * 构建AND和OR函数的条件 + * @param func + * @param dataType + * @param objs + */ + public static void buildAndOrFilterParam(String func,DataType dataType,Object... objs){ + List filterFormDataList=new ArrayList<>(); + try { + if(objs != null && objs.length > 0) { + for(int i=0;i paramFilterDataList=paramData.getFormulaFilterDataList(); + if(paramFilterDataList!=null){ + paramFilterDataList.forEach(val->{ + if(func.equalsIgnoreCase("AND")){ + val.setCondition(FormulaFilterData.CONDITION_AND); + }else if(func.equalsIgnoreCase("OR")){ + val.setCondition(FormulaFilterData.CONDITION_OR); + } + + }); + filterFormDataList.addAll(paramFilterDataList); + } + } + } +// dataType.setFormulaFilterDataList(filterFormDataList); + } + } catch (Exception e) { + logger.error("err",e); + } + } + + /** + * 构建Like函数的过滤条件 + * @param dataType + * @param objs + */ + public static void buildLikeFilterParam(DataType dataType,Object... objs){ + try { + if(dataType != null && objs.length > 0) { + if(dataType.getDataType().equalsIgnoreCase(DataType.DATASOURCE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION) || dataType.getDataType().equalsIgnoreCase(DataType.FORM)) { + throw new RuntimeException("筛选条件函数[LIKE]:第一个参数不能是选项型"); + } + List formulaFilterDataList=new ArrayList<>(); + FormulaFilterData formulaFilterData=new FormulaFilterData(); + List contents = new ArrayList(); + for(Object str : objs) { + if(str instanceof DataType){ + DataType data=(DataType)str; + contents.add(data.getContent()+""); + }else { + contents.add(str+""); + } + } + formulaFilterData.setContents(contents); +// formulaFilterData.setTerm(FilterFormData.TERM_LIKE); +// formulaFilterData.setFieldId(dataType.getFieldId()+""); +// formulaFilterDataList.add(formulaFilterData); +// dataType.setFormulaFilterDataList(formulaFilterDataList); + } + } catch (RuntimeException RuntimeException) { + RuntimeException.printStackTrace(); + } + } + + public static void buildInFilterParam(DataType dataType, Object... objs){ + try { + if(dataType != null && objs.length > 0) { + if(!dataType.getDataType().equalsIgnoreCase(DataType.DATASOURCE) && !dataType.getDataType().equalsIgnoreCase(DataType.OPTION)) { + return; + } + List formulaFilterDataList=new ArrayList<>(); + FormulaFilterData formulaFilterData=new FormulaFilterData(); + List ids = new ArrayList(); + for(Object option : objs) { + if(option instanceof DataType){ + DataType data=(DataType)option; + ids.add(data.getContent()+""); + } + } + formulaFilterData.setIds(ids); + formulaFilterData.setFieldId(dataType.getFieldId()+""); +// formulaFilterData.setTerm(FilterFormData.TERM_EQ); +// formulaFilterDataList.add(formulaFilterData); +// dataType.setFormulaFilterDataList(formulaFilterDataList); + } + } catch (Exception e) { + logger.error("err",e); + } + } + +} diff --git a/src/com/engine/salary/formlua/func/math/MathFuncsService.java b/src/com/engine/salary/formlua/func/math/MathFuncsService.java new file mode 100644 index 000000000..7f9565aad --- /dev/null +++ b/src/com/engine/salary/formlua/func/math/MathFuncsService.java @@ -0,0 +1,79 @@ +package com.engine.salary.formlua.func.math; + +import com.engine.salary.formlua.entity.parameter.DataType; + +public interface MathFuncsService { + /** + * 向上取整 + * @param object + * @return + */ + public DataType roundUp(Object... object); + + /** + * 向下取整 + * @param object + * @return + */ + public DataType roundDown(Object... object); + + /** + * 四舍五入 + * @param object + * @return + */ + public DataType round(Object... object); + + /** + * 统计函数 + * @param objects + * @return + */ + public DataType aggregation(Object... objects); + + /** + * 取余函数 + * @param objects + * @return + */ + public DataType mod(Object... objects); + + /** + * 精度控制函数 + * @param number + * @param numDigits + * @return + */ + public DataType Trunc(Object number,Object numDigits); + + /** + * 随机数 + * @param length 随机数长度 + * @param type 随机数类型,分为纯数字、纯英文字母、英文和数字的组合 + * @return + */ + public DataType randomNumber(Object length,Object type); + + /** + * 分组函数 + * @param objects 分组的数据 + * @return 返回一个结果集,这个结果集不能直接使用,要通过其他函数继续运算得出结果,比如aggregation统计函数 + */ + public DataType group(Object... objects); + + /** + * 是否是整数 + * @param objects + * @return + */ + public DataType isInt(Object... objects); + + /** + * 是否是数字 + * @param objects + * @return + */ + public DataType isNumber(Object... objects); + + +} diff --git a/src/com/engine/salary/formlua/func/math/MathFuncsServiceImpl.java b/src/com/engine/salary/formlua/func/math/MathFuncsServiceImpl.java new file mode 100644 index 000000000..f5a4362b3 --- /dev/null +++ b/src/com/engine/salary/formlua/func/math/MathFuncsServiceImpl.java @@ -0,0 +1,468 @@ +package com.engine.salary.formlua.func.math; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.form.component.base.ComponentType; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.excel.formula.entity.parameter.FuncNames; +import com.weaver.excel.formula.util.ErrorUtil; +import com.weaver.excel.formula.util.ExcelParamUtil; +import com.weaver.excel.formula.util.IgnoreParamFilter; +import com.weaver.excel.formula.util.RegularUtil; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +@Service("mathFuncsService") +public class MathFuncsServiceImpl implements MathFuncsService { + private final String randomNumber="NUM"; + private final String randomChar="CHAR"; + private final String randomNumANDChar="FIX"; + + @Override + public DataType roundUp(Object... objects) { + Integer errorNumber= IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUNDUP.getName()); + Object number=null; + Object object = objects[0]; + + //小数位 + int numDigits = 0; + Object numDigitsObj = null; + + //获取小数点位数参数 + if(objects != null && objects.length > 1) { + numDigitsObj = objects[1]; + + if(numDigitsObj != null && numDigitsObj instanceof DataType){ + numDigitsObj = ExcelParamUtil.getParamContent(numDigitsObj,""); + } + } + + //整数校验 + if(numDigitsObj != null){ + try{ + numDigits = (int) numDigitsObj; + }catch (Exception e){ + throw new RuntimeException("小数点位数必须是整数"); + } + } + + if(object instanceof DataType){ + DataType dataType=(DataType)object; + if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDUP.toString(),errorNumber,errorNumber,"ROUNDUP函数只接受数字参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + number=dataType.getContent(); + }else{ + BigDecimal db = new BigDecimal(object.toString()); + number=db; + } + if(!RegularUtil.isNumber(number)){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDUP.toString(),errorNumber,errorNumber,"ROUNDUP函数只接受数字参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + + BigDecimal bigDecimal = new BigDecimal(number+""); + Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_CEILING).doubleValue(); + + if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); + return new DataType(DataType.NUMBER, result, ComponentType.NumberComponent.toString()); + } + + @Override + public DataType roundDown(Object... objects) { + Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUNDDOWN.getName()); + Object number=null; + Object object = objects[0]; + + //小数位 + int numDigits = 0; + Object numDigitsObj = null; + + //获取小数点位数参数 + if(objects != null && objects.length > 1) { + numDigitsObj = objects[1]; + + if(numDigitsObj != null && numDigitsObj instanceof DataType){ + numDigitsObj = ExcelParamUtil.getParamContent(numDigitsObj,""); + } + } + + //整数校验 + if(numDigitsObj != null){ + try{ + numDigits = (int) numDigitsObj; + }catch (Exception e){ + throw new RuntimeException("小数点位数必须是整数"); + } + } + + if(object instanceof DataType){ + DataType dataType=(DataType)object; + if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ + return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + } + number=dataType.getContent(); + }else{ + BigDecimal db = new BigDecimal(object.toString()); + number=db; + } + + if(!RegularUtil.isNumber(number)){ + return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + } + + BigDecimal bigDecimal = new BigDecimal(number+""); + Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_FLOOR).doubleValue(); + + if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); + return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType round(Object... objects) { + Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUND.getName()); + Object number=null; + Object object = objects[0]; + + //小数位 + int numDigits = 0; + Object numDigitsObj = null; + + //获取小数点位数参数 + if(objects != null && objects.length > 1) { + numDigitsObj = objects[1]; + + if(numDigitsObj != null && numDigitsObj instanceof DataType){ + numDigitsObj = ExcelParamUtil.getParamContent(numDigitsObj,""); + } + } + + //整数校验 + if(numDigitsObj != null){ + try{ + numDigits = (int) numDigitsObj; + }catch (Exception e){ + throw new RuntimeException("小数点位数必须是整数"); + } + } + + if(object instanceof DataType){ + DataType dataType=(DataType)object; + if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ + return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + } + number=dataType.getContent(); + }else{ + BigDecimal db = new BigDecimal(object.toString()); + number=db; + } + + if(!RegularUtil.isNumber(number)){ + return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + } + + BigDecimal bigDecimal = new BigDecimal(number+""); + Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_HALF_UP).doubleValue(); + + if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); + return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType aggregation(Object... objects) { + Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.AGGREGATION.getName()); + Double result=0d; + if(objects.length==0||objects.length<2){ + return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); + } + List dataList=new ArrayList(); + for (int i=0;i5){ + digitsIntVal=5; + } + BigDecimal b = new BigDecimal(numberVal.toString()); + f1 = b.setScale(digitsIntVal, BigDecimal.ROUND_HALF_UP).doubleValue(); + if(digitsIntVal==0){ + f1=b.intValue(); + } + }else { + JSONObject errorJson= ErrorUtil.buildError(FuncNames.TRUNC.toString(),errorNumber,errorNumber,"小数点格式化只允许数字"); + throw new RuntimeException(errorJson.getString("msg")); + } + return new DataType(DataType.NUMBER,f1,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType randomNumber(Object length,Object type) { + String value=""; + Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.RANDOMNUMBER.getName()); + Double numberLength=0.0; + Object param=10; + String dataValueType=""; + if(length!=null){ + if(length instanceof DataType){ + DataType dataType=(DataType)length; + dataValueType=ExcelParamUtil.checkParamType(dataType); + param=ExcelParamUtil.getParamContent(length,""); + }else{ + dataValueType=ExcelParamUtil.checkParamType(length); + param=length; + } + } + //判断length长度数据类型是否合规 + if(!dataValueType.equalsIgnoreCase("number")){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数函数只允许数字参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + //判断用户设置的length是否大于0,生成的随机数长度必须是大于1的 + if(param!=null){ + numberLength=Double.parseDouble(param.toString()); + if(numberLength<=0){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数函数长度必须大于0"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + String typeString=randomNumber; + if(type !=null){ + if(type instanceof DataType){ + DataType dataType=(DataType)length; + typeString=ExcelParamUtil.getParamContent(type,"").toString(); + }else{ + typeString=type.toString(); + } + } + + switch (typeString){ + case randomNumber: + value=randomFunc(numberLength,randomNumber); + break; + case randomChar: + value=randomFunc(numberLength,randomChar); + break; + case randomNumANDChar: + value=randomFunc(numberLength,randomNumANDChar); + break; + default: + JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数的返回值只允许数字、字符以及数字和字符的混合类型"); + throw new RuntimeException(errorJson.getString("msg")); + + } + + return new DataType(DataType.NUMBER,value,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType group(Object... objects) { + return null; + } + + @Override + public DataType isInt(Object... objects) { + boolean isInt=false; + if(objects[0] instanceof DataType){ + DataType dataType=(DataType)objects[0]; + isInt=RegularUtil.isInteger(dataType.getContent()); + }else{ + isInt=RegularUtil.isInteger(objects[0]); + } + return new DataType(DataType.BOOL,isInt); + } + + @Override + public DataType isNumber(Object... objects) { + boolean isInt=false; + if(objects[0] instanceof DataType){ + DataType dataType=(DataType)objects[0]; + isInt=RegularUtil.isNumber(dataType.getContent()); + }else{ + isInt=RegularUtil.isNumber(objects[0]); + } + return new DataType(DataType.BOOL,isInt); + } + + private String randomFunc(Double length,String type){ + Random r = new Random(); + StringBuffer sbff=new StringBuffer(); + + //数字类型随机数 + if(type.equalsIgnoreCase("number")){ + for (double i=0;i0){ + charloop=(length-1)/2; + numloop=charloop+1; + }else{ + charloop=length/2; + numloop=charloop; + } + } + for (double i=0;i 1) { + numDigitsObj = objects[1]; + if(numDigitsObj != null && numDigitsObj instanceof DataType) throw new RuntimeException("ROUNDUP函数第二个参数只能是常量"); + } + + //整数校验 + if(numDigitsObj != null){ + try{ + numDigits = (int) numDigitsObj; + }catch (Exception e){ + throw new RuntimeException("小数点位数必须是整数"); + } + } + + if(object instanceof DataType){ + DataType dataType=(DataType)object; + if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDUP.toString(),errorNumber,errorNumber,"ROUNDUP函数只接受数字参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + number=dataType.getContent(); + }else{ + BigDecimal db = new BigDecimal(object.toString()); + number=db; + } + if(!RegularUtil.isNumber(number)){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDUP.toString(),errorNumber,errorNumber,"ROUNDUP函数只接受数字参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + + BigDecimal bigDecimal = new BigDecimal(number+""); + Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_CEILING).doubleValue(); + + if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); + return new DataType(DataType.NUMBER, result); + } + + @Override + public DataType roundDown(Object... objects) { + Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUNDDOWN.getName()); + Object number=null; + Object object = objects[0]; + + //小数位 + int numDigits = 0; + Object numDigitsObj = null; + + //获取小数点位数参数 + if(objects != null && objects.length > 1) { + numDigitsObj = objects[1]; + if(numDigitsObj != null && numDigitsObj instanceof DataType) throw new RuntimeException("ROUNDDOWN函数第二个参数只能是常量"); + } + + //整数校验 + if(numDigitsObj != null){ + try{ + numDigits = (int) numDigitsObj; + }catch (Exception e){ + throw new RuntimeException("小数点位数必须是整数"); + } + } + + if(object instanceof DataType){ + DataType dataType=(DataType)object; + if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDDOWN.toString(),errorNumber,errorNumber,"ROUNDDOWN函数只接受数字参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + number=dataType.getContent(); + }else{ + BigDecimal db = new BigDecimal(object.toString()); + number=db; + } + + if(!RegularUtil.isNumber(number)){ + return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + } + + BigDecimal bigDecimal = new BigDecimal(number+""); + Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_FLOOR).doubleValue(); + + if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); + return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType round(Object... objects) { + Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUND.getName()); + Object number=null; + Object object = objects[0]; + + //小数位 + int numDigits = 0; + Object numDigitsObj = null; + + //获取小数点位数参数 + if(objects != null && objects.length > 1) { + numDigitsObj = objects[1]; + if(numDigitsObj != null && numDigitsObj instanceof DataType) throw new RuntimeException("ROUND函数第二个参数只能是常量"); + } + + //整数校验 + if(numDigitsObj != null){ + try{ + numDigits = (int) numDigitsObj; + }catch (Exception e){ + throw new RuntimeException("小数点位数必须是整数"); + } + } + + if(object instanceof DataType){ + DataType dataType=(DataType)object; + if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUND.toString(),errorNumber,errorNumber,"ROUND函数只接受数字参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + number=dataType.getContent(); + }else{ + BigDecimal db = new BigDecimal(object.toString()); + number=db; + } + + if(!RegularUtil.isNumber(number)){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUND.toString(),errorNumber,errorNumber,"ROUND函数只接受数字参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + + BigDecimal bigDecimal = new BigDecimal(number+""); + Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_HALF_UP).doubleValue(); + + if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); + return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType aggregation(Object... objects) { + Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.AGGREGATION.getName()); + Double result=0d; + if(objects.length==0||objects.length<2){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.AGGREGATION.toString(),errorNumber,errorNumber,"统计函数至少需要两个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + List dataList=new ArrayList(); + for (int i=0;i5){ + digitsIntVal=5; + } + BigDecimal b = new BigDecimal(numberVal.toString()); + f1 = b.setScale(digitsIntVal, BigDecimal.ROUND_HALF_UP).doubleValue(); + if(digitsIntVal==0){ + f1=b.intValue(); + } + }else { + JSONObject errorJson= ErrorUtil.buildError(FuncNames.TRUNC.toString(),errorNumber,errorNumber,"小数点格式化只允许数字"); + throw new RuntimeException(errorJson.getString("msg")); + } + return new DataType(DataType.NUMBER,f1,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType randomNumber(Object length,Object type) { + String value=""; + Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.RANDOMNUMBER.getName()); + Double numberLength=0.0; + Object param=10; + String dataValueType=""; + if(length!=null){ + if(length instanceof DataType){ + DataType dataType=(DataType)length; + dataValueType=ExcelParamUtil.checkParamType(dataType); + param=ExcelParamUtil.getParamContent(length,""); + }else{ + dataValueType=ExcelParamUtil.checkParamType(length); + param=length; + } + } + //判断length长度数据类型是否合规 + if(!dataValueType.equalsIgnoreCase("number")){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数函数只允许数字参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + //判断用户设置的length是否大于0,生成的随机数长度必须是大于1的 + if(param!=null){ + numberLength=Double.parseDouble(param.toString()); + if(numberLength<=0){ + JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数函数长度必须大于0"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + String typeString=randomNumber; + if(type !=null){ + if(type instanceof DataType){ + DataType dataType=(DataType)length; + typeString=ExcelParamUtil.getParamContent(type,"").toString(); + }else{ + typeString=type.toString(); + } + } + + switch (typeString){ + case randomNumber: + value=randomFunc(numberLength,randomNumber); + break; + case randomChar: + value=randomFunc(numberLength,randomChar); + break; + case randomNumANDChar: + value=randomFunc(numberLength,randomNumANDChar); + break; + default: + JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数的返回值只允许数字、字符以及数字和字符的混合类型"); + throw new RuntimeException(errorJson.getString("msg")); + + } + + return new DataType(DataType.NUMBER,value,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType group(Object... objects) { + return null; + } + + @Override + public DataType isInt(Object... objects) { + if(objects==null || objects.length==0){ + throw new RuntimeException("【ISINT】函数的参数不能为空"); + } + Object paramObj=objects[0]; + String type=""; + Object content; + if(paramObj instanceof DataType){ + DataType paramDataType=(DataType)paramObj; + type=paramDataType.getDataType(); + content=paramDataType.getContent(); + }else{ + type=ExcelParamUtil.getParamType(paramObj.getClass().getName()); + content=paramObj; + } + if(!type.equalsIgnoreCase("String") && !type.equalsIgnoreCase("number")){ + throw new RuntimeException("【ISINT】函数的参数必须为字符或者数字类型"); + } + + return new DataType(DataType.BOOL,true); + } + + @Override + public DataType isNumber(Object... objects) { + if(objects==null || objects.length==0){ + throw new RuntimeException("【ISNUMBER】函数的参数不能为空"); + } + Object paramObj=objects[0]; + String type=""; + Object content; + if(paramObj instanceof DataType){ + DataType paramDataType=(DataType)paramObj; + type=paramDataType.getDataType(); + content=paramDataType.getContent(); + }else{ + type=ExcelParamUtil.getParamType(paramObj.getClass().getName()); + content=paramObj; + } + if(!type.equalsIgnoreCase("String")){ + throw new RuntimeException("【ISNUMBER】函数的参数必须为字符类型"); + } + return new DataType(DataType.BOOL,false); + } + + private String randomFunc(Double length,String type){ + Random r = new Random(); + StringBuffer sbff=new StringBuffer(); + + //数字类型随机数 + if(type.equalsIgnoreCase("number")){ + for (double i=0;i0){ + charloop=(length-1)/2; + numloop=charloop+1; + }else{ + charloop=length/2; + numloop=charloop; + } + } + for (double i=0;i newObjs=new ArrayList<>(); + for (int i=0;i0){ + for(Object object:newObjs){ + if(object instanceof DataType){ + DataType dataType=(DataType)object; + if(dataType.getDataType().equalsIgnoreCase(DataType.NUMBER)){ + newString.append(dataType.getContent()); + }else{ + newString.append(ExcelParamUtil.getParamContent(object,"string")); + } + }else { + newString.append(ExcelParamUtil.getParamContent(object,"string")); + } + + } + } + return new DataType(DataType.STRING,newString.toString()); + } + + /** + * 转成String + * @param objs + * @return + */ + @Override + public DataType text(Object... objs) { + String func="TEXT"; + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + if(null==objs||objs.length>1){ + throw new RuntimeException(func+"函数参数只允许一个参数"); + } + Object obj=objs[0]; + if(null==obj){ + throw new RuntimeException(func+"函数参数为空"); + } + Object result; + if(obj instanceof DataType){ + DataType dataType=(DataType)obj; + if(dataType.getDataType().equalsIgnoreCase(DataType.NUMBER)){ + result=dataType.getContent(); + }else if(dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ + result=dataType.getOptionContent(); + }else if(dataType.getComponentKey()!=null && dataType.getComponentKey().equalsIgnoreCase("FileComponent")){ + result=dataType.getOptionContent(); + }else{ + result=ExcelParamUtil.getParamContent(dataType,DataType.STRING).toString(); + } + }else { + result=obj.toString(); + } + + return new DataType(DataType.STRING,result); + } + + + /** + * 转成Int类型 + * 提取字符中的数字并返回 + * @param objs + * @return + */ + @Override + public DataType value(Object... objs) { + boolean isNumber=false; + Object txt=objs[0]; + Object result; + Class[] typeObjects=new Class[]{}; + IgnoreParamFilter.commonFilter("VALUE",1,1,typeObjects,objs); + String numberStr; + + if(txt instanceof DataType){ + DataType dataType=(DataType)txt; + if(dataType.getDataType().toLowerCase().equals(DataType.NUMBER)){ + isNumber=true; + if(ExcelParamUtil.getParamContent(txt,"string")==null){ + numberStr="0"; + }else { + numberStr=ExcelParamUtil.getParamContent(txt,"string").toString(); + } + + }else { + if(ExcelParamUtil.getParamContent(txt,"string")==null){ + numberStr="0"; + }else{ + numberStr=ExcelParamUtil.getParamContent(txt,"string").toString(); + } + if(!RegularUtil.isNumber(numberStr)){ + numberStr="0"; + } + } + + }else { + if(RegularUtil.isNumber(txt.toString())){ + isNumber=true; + numberStr=txt.toString(); + }else { + numberStr="0"; + } + } + + if(numberStr.indexOf(".")>0){ + if(numberStr.length()>17){ + numberStr=numberStr.substring(0,17); + } + result=new BigDecimal(numberStr); + }else { + if(numberStr.length()>16){ + numberStr=numberStr.substring(0,16); + } + result=Long.parseLong(numberStr); + } + return new DataType(DataType.NUMBER,result); + } + + + /** + * 获取字符串长度 + * @param txt + * @return + */ + @Override + public DataType len(Object... txt) { + Class[] typeObjects=new Class[]{String.class}; + IgnoreParamFilter.commonFilter("LEN",1,1,typeObjects,txt); + int length=ExcelParamUtil.getParamContent(txt[0],"string").toString().length(); + return new DataType(DataType.NUMBER,length); + } + + /** + *搜索字符返回位置下标 + * 第一个参数是搜索字符 + * 第二个参数是源字符串 + * @param objects + * @return + */ + @Override + public DataType search(Object... objects) { + Class[] typeObjects=new Class[]{String.class,String.class,Integer.class}; + int idx=0; + IgnoreParamFilter.commonFilter("SEARCH",2,3,typeObjects,objects); + if(objects.length==3){ + Object idxObj=ExcelParamUtil.getParamContent(objects[2],"option"); + if(idxObj.toString().indexOf(".")>0){ + idx=Integer.parseInt(idxObj.toString().split("\\.")[0]); + }else { + idx=Integer.parseInt(idxObj.toString()); + } + idx=idx>=0?idx:0; + idx=idx==0?idx:idx-1; + } + String sourceStr=ExcelParamUtil.getParamContent(objects[1],"string").toString(); + String searchWord=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + int findIdx=sourceStr.indexOf(searchWord,idx); + findIdx=findIdx<0?0:findIdx+1; + return new DataType(DataType.NUMBER,findIdx); + } + + /** + * 替换字符函数 + * 第一个参数是源字符串 + * 第二个参数是替换开始位置,以0开始 + * 第三个参数是替换字符的长度,从替换位置开始到结束的字符,为需要替换的字符串 + * 第四个参数作为替换字符 + * @param objects + * @return + */ + @Override + public DataType replace(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class,Integer.class,String.class}; + IgnoreParamFilter.commonFilter("REPLACE",4,4,typeObjects,objects); + String sourceStr=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + Double ridxD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[1],"string").toString()); + int repIdx=ridxD.intValue(); + + Double repD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[2],"string").toString()); + int repLenth=repD.intValue(); + + + String repWord=ExcelParamUtil.getParamContent(objects[3],"string").toString(); + int replaceLength=(repIdx-1)+repLenth; + if(replaceLength>sourceStr.length()){ +// throw new RunTimeException(errorJson.getString("msg")); + logger.info("REPLACE函数替换位置超过了字符长度"); + replaceLength=sourceStr.length(); + } + String cutStr=sourceStr.substring(repIdx-1,replaceLength); + sourceStr=sourceStr.replaceFirst(cutStr,repWord); + result=sourceStr; + return new DataType(DataType.STRING,result); + } + + /** + * 参数重复叠加函数 + * 第一个参数为源字符 + * 第二个为叠加次数 + * @param objects + * @return + */ + @Override + public DataType repeat(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class}; + IgnoreParamFilter.commonFilter("REPEAT",2,2,typeObjects,objects); + String str=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + Double repeatD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[1],"string").toString()); + int repeat=repeatD.intValue(); + repeat=repeat>=1?repeat:1; + StringBuffer sbf=new StringBuffer(); + sbf.append(str); + for(int i=1;i=0?sourceLength:0; + String fillStr=ExcelParamUtil.getParamContent(objects[2],"string").toString(); + String fillPosition="RIGHT"; + if(objects.length==4){ + fillPosition=ExcelParamUtil.getParamContent(objects[3],"string").toString(); + Arrays.sort(fillPositonArray); + if(Arrays.binarySearch(fillPositonArray,fillPosition)<0){ + String func="TEXT"; + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + throw new RuntimeException(func+"函数第四个参数值不正确"); + } + } + if(sourceStr.length() chars=new ArrayList<>(); + sourceStr=ExcelParamUtil.appendString(fillStr,sourceStr,sourceLength,fillPosition); + } + result=sourceStr; + return new DataType(DataType.STRING,result); + } + + + + /** + * 去首尾空格 + * @param objects + * @return + */ + @Override + public DataType trim(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class}; + IgnoreParamFilter.commonFilter("TRIM",1,1,typeObjects,objects); + + String sourceStr=ExcelParamUtil.getParamContent(objects[0],"string").toString().trim(); + result=sourceStr; + return new DataType(DataType.STRING,result); + } + /** + * 字符左截取函数 + * 返回从左边开始到指定位置的字符串 + * 第一个参数是源字符串 + * 第二个参数是截取长度 + * @param objects + * @return + */ + @Override + public DataType left(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class}; + IgnoreParamFilter.commonFilter("LEFT",2,2,typeObjects,objects); + String sourceStr=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + Double cutIdxD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[1],"string").toString()); + int cutIdx=cutIdxD.intValue(); + cutIdx=cutIdx>=0?cutIdx:1; + if(cutIdx>sourceStr.length()){ + cutIdx=sourceStr.length(); + } + sourceStr=sourceStr.substring(0,cutIdx); + result=sourceStr; + return new DataType(DataType.STRING,result); + } + + /** + * 字符右截取函数 + * 返回从右边开始到指定位置的字符串 + * 第一个参数是源字符串 + * 第二个参数是截取长度 + * @param objects + * @return + */ + @Override + public DataType right(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class}; + IgnoreParamFilter.commonFilter("RIGHT",2,2,typeObjects,objects); + String sourceStr=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + Double cutIdxD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[1],"string").toString()); + int cutIdx=cutIdxD.intValue(); + cutIdx=cutIdx>=0?cutIdx:1; + if(cutIdx>sourceStr.length()){ + cutIdx=sourceStr.length(); + } + sourceStr=sourceStr.substring(sourceStr.length()-cutIdx); + result=sourceStr; + return new DataType(DataType.STRING,result); + } + + /** + * 字符自由截取函数 + * 第一个参数是源字符串 + * 第二个参数是截取开始位置 + * 第三个参数是截取结束位置 + * @param objects + * @return + */ + @Override + public DataType mid(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class,Integer.class}; + IgnoreParamFilter.commonFilter("MID",3,3,typeObjects,objects); + String sourceStr=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + if(null==sourceStr||sourceStr.trim().equals("")){ + return new DataType(DataType.STRING,""); + } + Double cutidxD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[1],"string").toString()); + int cutIdx=cutidxD.intValue(); + cutIdx=cutIdx>0?cutIdx:1; + Double cutStrLenD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[2],"string").toString()); + int cutStrLen=cutStrLenD.intValue(); + cutStrLen=cutStrLen>0?cutStrLen:1; + if((cutIdx-1+cutStrLen)>sourceStr.length()){ + sourceStr=sourceStr.substring(cutIdx-1,sourceStr.length()); + }else { + sourceStr=sourceStr.substring(cutIdx-1,(cutIdx-1)+cutStrLen); + } + + result=sourceStr; + return new DataType(DataType.STRING,result); + } + + @Override + public DataType score(Object... objs) { + Object result; + DataType fraction=(DataType)objs[0]; + result=fraction.getScore(); + if(result==null){ + result=0; + } + return new DataType(DataType.NUMBER,result); + } + + @Override + public DataType idCard(Object... objects) { + Object result=""; +// IgnoreParamFilter.checkValiIdCard("IDCARD",objects); + String operType=ExcelParamUtil.getParamContent(objects[1],"string").toString(); + String idCard=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + RegularUtil.validateIDCard(idCard); + if(idCard.length()!=18&&idCard.length()!=15){ + Integer number=IgnoreParamFilter.getSetFuncNumber("IDCARD"); + throw new RuntimeException("只能计算中国大陆的身份证"); + } + DataType exeResult=new DataType(); + if(operType.equalsIgnoreCase("BD")){ + exeResult=bd(idCard); + }else if(operType.equalsIgnoreCase("NA")){ + exeResult=nativePlace(idCard); + }else if(operType.equalsIgnoreCase("AGE")){ + exeResult=age(idCard); + }else if(operType.equalsIgnoreCase("GENDER")){ + exeResult=sex(idCard); + } + return exeResult; + } + + @Override + public DataType sex(String IDCard){ + String sex =""; + //15位身份证号 + if (IDCard.length() == 15){ + if (Integer.parseInt(IDCard.substring(14, 15)) % 2 == 0) { + sex = "女"; + } else { + sex = "男"; + } + //18位身份证号 + }else if(IDCard.length() == 18){ + // 判断性别 + if (Integer.parseInt(IDCard.substring(16).substring(0, 1)) % 2 == 0) { + sex = "女"; + } else { + sex = "男"; + } + } + logger.info(sex); + return new DataType(DataType.STRING,sex); + } + + @Override + public DataType nativePlace(String idCard){ + int nativePlaceCode=Integer.parseInt(idCard.substring(0, 6)); + String nativePlace= NativePlace.getNativePlace(nativePlaceCode); + logger.info("您所在的地区为:\n" + nativePlace); + return new DataType(DataType.STRING,nativePlace); + } + + @Override + public DataType age(String idCard){ + Object age=0; + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + DataType datatype=bd(idCard); + String birthdayStr=datatype.getContent()!=null?datatype.getContent()+"":""; + try { + if(StringUtils.isNotEmpty(birthdayStr)){ + String today=formatter.format(new Date()); + Double ageN= DateTimeServiceImpl.getBetween(birthdayStr,today,"Y");//使用日期函数获取日期间隔年数 + DataType dataType=mathFuncsService.roundDown(ageN);//做一次向下取整 + if(dataType!=null && dataType.getContent()!=null){ + age=dataType.getContent(); + } + logger.info("年龄:"+age); + } + } catch (ParseException e) { + logger.error("err",e); + } + return new DataType(DataType.NUMBER,age); + } + + @Override + public DataType bd(String idCard){ + String result=null; + Calendar c=Calendar.getInstance(); + Integer number=IgnoreParamFilter.getSetFuncNumber("IDCARD"); + switch(idCard.length()) { + case 18: + case 15: + String year = idCard.substring(6, 10); + if(Integer.decode(year) <1900 && Integer.decode(year)>c.get(Calendar.YEAR)){ + + JSONObject errorJson=ErrorUtil.buildError("IDCARD",number,number,"IDCARD函数身份证字符不正确"); + throw new RuntimeException(errorJson.getString("msg")); + } + + String month = idCard.substring(10,12); + if(Integer.parseInt(month)<1 && Integer.parseInt(month)>12){ + JSONObject errorJson= ErrorUtil.buildError("IDCARD",number,number,"IDCARD函数身份证字符不正确"); + throw new RuntimeException(errorJson.getString("msg")); + } + + String day = idCard.substring(12,14); + c.set(Integer.parseInt(year) ,Integer.parseInt(month), 0); + if(Integer.parseInt(day)>c.get(Calendar.DAY_OF_MONTH)){ + JSONObject errorJson=ErrorUtil.buildError("IDCARD",number,number,"IDCARD函数身份证字符不正确"); + throw new RuntimeException(errorJson.getString("msg")); + } + + String birth=year+"-"+month+"-"+day; + logger.info("生日为:"+birth); + result=birth; + break; + + } + return new DataType(DataType.STRING,result); + } + + @Override + public DataType addressAnalysis(Object obj1, Object obj2) { + Integer number=IgnoreParamFilter.getSetFuncNumber(FuncNames.ADDRESS.getName()); + + String addressType=ExcelParamUtil.checkParamType(obj1); + String levelType=ExcelParamUtil.checkParamType(obj2); + if(!addressType.equalsIgnoreCase("string") || !levelType.equalsIgnoreCase("string")){ + JSONObject errorJson=ErrorUtil.buildError(FuncNames.ADDRESS.toString(),number,number,"地址解析函数的参数只允许字符类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + String address=""; + String level=""; + if(obj1 instanceof DataType){ + address=ExcelParamUtil.getParamContent(obj1).toString(); + }else{ + address=obj1.toString(); + } + + if(obj2 instanceof DataType){ + level=ExcelParamUtil.getParamContent(obj2).toString(); + }else { + level=obj2.toString(); + } + + Map placeMap=NativePlace.getAddressInfo(address); + String result=""; + switch (level){ + case PROVINCE: + result=placeMap.get(PROVINCE); + break; + case CITY: + result=placeMap.get(CITY); + break; + case TOWN: + result=placeMap.get(TOWN); + break; + case ADDR: + result=placeMap.get(ADDR); + default: + JSONObject errorJson=ErrorUtil.buildError(FuncNames.ADDRESS.toString(),number,number,"行政区块只支持省、市、区县"); + throw new RuntimeException(errorJson.getString("msg")); + + } + return new DataType(DataType.STRING,result); + } + + @Override + public DataType subString(Object... objects) { + String newString=""; + if(objects!=null && objects.length==3){ + String sourceString=null; + BigDecimal subIdx=null; + BigDecimal subEndIdx=null; + if(objects[0] instanceof DataType){ + sourceString=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + }else{ + sourceString=objects[0]+""; + } + //如果字符为空,直接返回 + if(sourceString==null || sourceString.length()==0){ + return new DataType(DataType.STRING,newString); + } + if(objects[1] instanceof DataType){ + subIdx=new BigDecimal(ExcelParamUtil.getParamContent(objects[1],"").toString()); + }else{ + subIdx=new BigDecimal(objects[1]+""); + } + + if(objects[2] instanceof DataType){ + subEndIdx=new BigDecimal(ExcelParamUtil.getParamContent(objects[2],"").toString()); + }else{ + subEndIdx=new BigDecimal(objects[2]+""); + } + + //如果截取位置小于0或者大于字符长度,直接返回 + if(subIdx.intValue()<0 || subIdx.intValue()>sourceString.length()){ + return new DataType(DataType.STRING,newString); + } + //如果截取位置小于0或者大于字符长度,直接返回 + if(subEndIdx.intValue()<0 || subEndIdx.intValue()>sourceString.length()){ + return new DataType(DataType.STRING,newString); + } + newString=sourceString.substring(subIdx.intValue()-1,subEndIdx.intValue()); + } + return new DataType(DataType.STRING,newString); + } + + @Override + public DataType substitue(Object... objects) { + String newString=""; + if(objects!=null && objects.length==3){ + String sourceString=null; + String replaceChar=null; + String newChar=null; + if(objects[0] instanceof DataType){ + sourceString=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + }else{ + sourceString=objects[0]+""; + } + + if(objects[1] instanceof DataType){ + replaceChar=ExcelParamUtil.getParamContent(objects[1],"string").toString(); + }else{ + replaceChar=objects[1]+""; + } + + if(objects[2] instanceof DataType){ + newChar=ExcelParamUtil.getParamContent(objects[2],"string").toString(); + }else{ + newChar=objects[2]+""; + } + + if(sourceString==null || replaceChar.length()>sourceString.length() || newChar.length()>sourceString.length()){ + return new DataType(DataType.STRING,newString); + } + newString=sourceString.replaceAll(replaceChar,newChar); + } + return new DataType(DataType.STRING,newString); + } + + @Override + public DataType extract(Object... objects) { + return null; + } + + @Override + public DataType lower(Object... objects) { + String sourceString=""; + if(objects!=null){ + if(objects[0]!=null){ + if(objects[0] instanceof DataType){ + sourceString=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + }else { + sourceString=objects[0]+""; + } + } + } + return new DataType(DataType.STRING,sourceString.toLowerCase()); + } + + @Override + public DataType upper(Object... objects) { + String sourceString=""; + if(objects!=null){ + if(objects[0]!=null){ + if(objects[0] instanceof DataType){ + sourceString=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + }else { + sourceString=objects[0]+""; + } + } + } + return new DataType(DataType.STRING,sourceString.toUpperCase()); + } + + @Override + public DataType exact(Object... objects) { + boolean eq=false; + if(objects!=null && objects.length==2){ + String sourceOne=""; + String sourceTwo=""; + if(objects[0] instanceof DataType){ + sourceOne=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + }else{ + sourceOne=objects[0]+""; + } + if(objects[1] instanceof DataType){ + sourceTwo=ExcelParamUtil.getParamContent(objects[1],"string").toString(); + }else{ + sourceTwo=objects[1]+""; + } + if(sourceOne!=null && sourceTwo!=null){ + eq=sourceOne.equals(sourceTwo); + return new DataType(DataType.BOOL,eq); + }else if(sourceOne == null && sourceTwo == null){ + return new DataType(DataType.BOOL,true); + }else if(sourceOne == null && sourceTwo != null){ + return new DataType(DataType.BOOL,false); + }else if(sourceOne != null && sourceTwo == null){ + return new DataType(DataType.BOOL,false); + } + + } + return new DataType(DataType.BOOL,eq); + } + + @Override + public DataType isString(Object... objects) { + Object object=objects[0]; + String fieldType=""; + DataType resultDataType; + if(object instanceof DataType){ + DataType dataType=(DataType)object; + fieldType= ExcelParamUtil.checkParamType(dataType.getDataType()); + }else { + fieldType= ExcelParamUtil.getParamType(object.getClass().getName()); + } + if(fieldType.equalsIgnoreCase("string")){ + resultDataType=new DataType(DataType.BOOL,true); + }else{ + resultDataType=new DataType(DataType.BOOL,false); + } + return resultDataType; + } + + @Override + public DataType isJson(Object... objects) { + Object object=objects[0]; + String fieldType=""; + DataType resultDataType; + Object content=null; + if(object instanceof DataType){ + DataType dataType=(DataType)object; + content=dataType.getContent(); + fieldType= ExcelParamUtil.checkParamType(dataType.getDataType()); + }else { + fieldType= ExcelParamUtil.getParamType(object.getClass().getName()); + content=object; + } + if(fieldType.equalsIgnoreCase("string")){ + if(content!=null){ + try { + logger.info("isJson函数的JSON字符转换:"+content+""); + JSON.parseObject(content+""); + resultDataType=new DataType(DataType.BOOL,true); + } catch (Exception e) { + logger.info("err",e); + logger.info("不是正常的JSON字符"); + resultDataType=new DataType(DataType.BOOL,false); + } + }else{ + resultDataType=new DataType(DataType.BOOL,false); + } + }else{ + resultDataType=new DataType(DataType.BOOL,false); + } + return resultDataType; + } + + @Override + public DataType getJSONValue(Object... objects) { + Object object=objects[0]; + Object objectKeyObj=objects[1]; + String fieldType=""; + DataType resultDataType; + Object content=null; + Object objectKey=null; + if(object instanceof DataType){ + DataType dataType=(DataType)object; + content=dataType.getContent(); + fieldType= ExcelParamUtil.checkParamType(dataType.getDataType()); + }else { + fieldType= ExcelParamUtil.getParamType(object.getClass().getName()); + content=object; + } + + if(objectKeyObj instanceof DataType){ + DataType dataType=(DataType)objectKeyObj; + objectKey=dataType.getContent(); + }else{ + objectKey=objectKeyObj; + } + + if(fieldType.equalsIgnoreCase("string")){ + if(content!=null){ + try { + logger.info("isJson函数的JSON字符转换:"+content+""); + JSONObject jsonObject=JSON.parseObject(content+""); + Object jsonValue=jsonObject.get(objectKey+""); + resultDataType=new DataType(DataType.STRING,jsonValue==null?"":jsonValue.toString()); + } catch (Exception e) { + logger.info("err",e); + logger.info("不是正常的JSON字符"); + resultDataType=new DataType(DataType.STRING,""); + } + }else{ + resultDataType=new DataType(DataType.STRING,""); + } + }else{ + resultDataType=new DataType(DataType.STRING,""); + } + return resultDataType; + } +} diff --git a/src/com/engine/salary/formlua/func/string/StringFormulaServiceTestImpl.java b/src/com/engine/salary/formlua/func/string/StringFormulaServiceTestImpl.java new file mode 100644 index 000000000..2e2a1ed7b --- /dev/null +++ b/src/com/engine/salary/formlua/func/string/StringFormulaServiceTestImpl.java @@ -0,0 +1,555 @@ +package com.engine.salary.formlua.func.string; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.form.component.base.ComponentType; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.excel.formula.entity.parameter.FuncNames; +import com.weaver.excel.formula.func.math.MathFuncsService; +import com.weaver.excel.formula.util.ErrorUtil; +import com.weaver.excel.formula.util.ExcelParamUtil; +import com.weaver.excel.formula.util.IgnoreParamFilter; +import com.weaver.excel.formula.util.RegularUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +@Service("stringFormulaServiceTest") +public class StringFormulaServiceTestImpl implements StringFormulaService { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final String[] fillPositonArray=new String[]{"LEFT","RIGHT"}; + private final static String PROVINCE="province"; + private final static String CITY="city"; + private final static String TOWN="town"; + private final static String ADDR="addr"; + @Autowired + MathFuncsService mathFuncsService; + @Autowired + StringFormulaService stringFormulaService; + @Override + public DataType concatString(Object... objs) { + List newObjs=new ArrayList<>(); + for (int i=0;i0){ + for(Object object:newObjs){ + newString.append(ExcelParamUtil.getParamContent(object,"string")); + } + } + return new DataType(DataType.STRING,newString.toString(), ComponentType.Text.toString()); + } + + @Override + public DataType text(Object... objs) { + String func="TEXT"; + Integer number=IgnoreParamFilter.getSetFuncNumber(func); + if(null==objs||objs.length>1){ + JSONObject errorJson= ErrorUtil.buildError(func,0,number,func+"函数参数只允许一个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + Object obj=objs[0]; + if(null==obj){ + JSONObject errorJson= ErrorUtil.buildError(func,0,number,func+"函数参数为空"); + throw new RuntimeException(errorJson.getString("msg")); + } + Object result; + if(obj instanceof DataType){ + DataType dataType=(DataType)obj; + result=ExcelParamUtil.getParamContent(dataType,"string").toString(); + }else { + result=obj.toString(); + } + + return new DataType(DataType.STRING,result,ComponentType.Text.toString()); + } + + @Override + public DataType value(Object... objs) { + Object txt=objs[0]; + Object result; + Class[] typeObjects=new Class[]{}; + + IgnoreParamFilter.commonFilter("VALUE",1,1,typeObjects,objs); + String regEx="[^0-9]"; + Pattern p = Pattern.compile(regEx); + String paramContent=""; + if(ExcelParamUtil.getParamContent(txt,"string")!=null){ + paramContent=ExcelParamUtil.getParamContent(txt,"string")!=null?ExcelParamUtil.getParamContent(txt,"string").toString():""; + } + if(!RegularUtil.isNumber(paramContent)){ + paramContent="0"; + } + Matcher m = p.matcher(paramContent); + String numberStr=m.replaceAll("").trim(); + if(!numberStr.equals("")){ + if(numberStr.length()>19){ + numberStr=numberStr.substring(0,19); + } + Long txtTint=Long.parseLong(numberStr); + result=txtTint; + }else { + result=0; + } + return new DataType(DataType.NUMBER,result,ComponentType.Text.toString()); + } + + @Override + public DataType len(Object... txt) { + Class[] typeObjects=new Class[]{String.class}; + IgnoreParamFilter.commonFilter("LEN",1,1,typeObjects,txt); + int length=ExcelParamUtil.getParamContent(txt[0],"string").toString().length(); + + return new DataType(DataType.NUMBER,length,ComponentType.Text.toString()); + } + + @Override + public DataType search(Object... objects) { + Class[] typeObjects=new Class[]{String.class,String.class,Integer.class}; + int idx=0; + IgnoreParamFilter.commonFilter("SEARCH",2,3,typeObjects,objects); + return new DataType(DataType.NUMBER,0,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType replace(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class,Integer.class,String.class}; + IgnoreParamFilter.commonFilter("REPLACE",4,4,typeObjects,objects); + return new DataType(DataType.STRING,"泛微网络",ComponentType.Text.toString()); + } + + @Override + public DataType repeat(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class}; + IgnoreParamFilter.commonFilter("REPEAT",2,2,typeObjects,objects); + String str=ExcelParamUtil.getParamContent(objects[0],"string").toString(); + Double repeatD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[1],"string").toString()); + int repeat=repeatD.intValue(); + StringBuffer sbf=new StringBuffer(); + for(int i=0;i chars=new ArrayList<>(); + sourceStr=ExcelParamUtil.appendString(fillStr,sourceStr,sourceLength,fillPosition); + } + result=sourceStr; + return new DataType(DataType.STRING,result,ComponentType.Text.toString()); + } + + @Override + public DataType trim(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class}; + IgnoreParamFilter.commonFilter("TRIM",1,1,typeObjects,objects); + + String sourceStr=ExcelParamUtil.getParamContent(objects[0],"string").toString().trim(); + result=sourceStr; + return new DataType(DataType.STRING,result,ComponentType.Text.toString()); + } + + @Override + public DataType left(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class}; + IgnoreParamFilter.commonFilter("LEFT",2,2,typeObjects,objects); + result="泛微"; + return new DataType(DataType.STRING,result,ComponentType.Text.toString()); + } + + @Override + public DataType right(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class}; + IgnoreParamFilter.commonFilter("RIGHT",2,2,typeObjects,objects); + result="泛微"; + return new DataType(DataType.STRING,result,ComponentType.Text.toString()); + } + + @Override + public DataType mid(Object... objects) { + Object result; + Class[] typeObjects=new Class[]{String.class,Integer.class,Integer.class}; + IgnoreParamFilter.commonFilter("MID",3,3,typeObjects,objects); + result="泛微云"; + return new DataType(DataType.STRING,result,ComponentType.Text.toString()); + } + + @Override + public DataType score(Object... objs) { + Object result; + IgnoreParamFilter.checkFraction("SCORE",objs); + DataType fraction=(DataType)objs[0]; + result=fraction.getScore(); + if(result==null){ + result=0; + } + return new DataType(DataType.NUMBER,result,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType idCard(Object... objects) { + Integer number=IgnoreParamFilter.getSetFuncNumber(FuncNames.IDCARD.getName()); + DataType result=new DataType(); + IgnoreParamFilter.checkValiIdCard("IDCARD",objects); + if(objects[0] instanceof DataType){ + DataType dataType=(DataType) objects[0]; + dataType.setContent("43070319900202665X"); + dataType.setText("43070319900202665X"); + } + RegularUtil.validateIDCard(ExcelParamUtil.getParamContent(objects[0],"string").toString()); + String operType=objects[1].toString(); + String idCard=objects[0].toString(); + if(operType.equalsIgnoreCase("BD")){ + result=bd(idCard); + }else if(operType.equalsIgnoreCase("NA")){ + result=nativePlace(idCard); + }else if(operType.equalsIgnoreCase("AGE")){ + result=age(idCard); + }else if(operType.equalsIgnoreCase("GENDER")){ + result=sex(idCard); + }else{ + JSONObject errorJson=ErrorUtil.buildError("IDCARD",number,number,"IDCARD函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + return result; + } + + + @Override + public DataType sex(String idCard) { + return new DataType(DataType.STRING,"男",ComponentType.Text.toString()); + } + + @Override + public DataType nativePlace(String idCard) { + return new DataType(DataType.STRING,"上海市闵行区浦江",ComponentType.Text.toString()); + } + + @Override + public DataType age(String idCard) { + return new DataType(DataType.NUMBER,18,ComponentType.NumberComponent.toString()); + } + + @Override + public DataType bd(String idCard) { + return new DataType(DataType.STRING,"2020-11-11",ComponentType.Text.toString()); + } + + @Override + public DataType addressAnalysis(Object obj1, Object obj2) { + Integer number=IgnoreParamFilter.getSetFuncNumber(FuncNames.ADDRESS.getName()); + String addressType=ExcelParamUtil.checkParamType(obj1); + String levelType=ExcelParamUtil.checkParamType(obj2); + if(!addressType.equalsIgnoreCase("string") || !levelType.equalsIgnoreCase("string")){ + JSONObject errorJson=ErrorUtil.buildError(FuncNames.ADDRESS.toString(),number,number,"地址解析函数的参数只允许字符类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + String level=""; + if(obj2 instanceof DataType){ + level=ExcelParamUtil.getParamContent(obj2,"").toString(); + }else { + level=obj2.toString(); + } + + String result=""; + switch (level){ + case PROVINCE: + break; + case CITY: + break; + case TOWN: + break; + case ADDR: + break; + default: + JSONObject errorJson=ErrorUtil.buildError(FuncNames.ADDRESS.toString(),number,number,"行政区块只支持省、市、区县"); + throw new RuntimeException(errorJson.getString("msg")); + + } + + return new DataType(DataType.STRING,"上海市",ComponentType.Text.toString()); + } + + @Override + public DataType subString(Object... objects) { + if(objects==null || objects.length!=3){ + throw new RuntimeException("字符截取函数只允许3个参数:源字符、截取开始位置、截取结束位置"); + } + List paramTypeList=new ArrayList<>(); + paramTypeList.add(DataType.STRING); + paramTypeList.add(DataType.NUMBER); + paramTypeList.add(DataType.NUMBER); + List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); + if(errorIdxList!=null && errorIdxList.size()>0){ + String errorMsg=""; + switch (errorIdxList.get(0)){ + case 0: + errorMsg="【SUBSTRING 字符截取函数】的第一个参数只能是字符串"; + break; + case 1: + errorMsg="【SUBSTRING 字符截取函数】的第二个参数只能是数字"; + break; + case 2: + errorMsg="【SUBSTRING 字符截取函数】的第三个参数只能是数字"; + break; + default: + errorMsg="【SUBSTRING 字符截取函数】的参数异常"; + break; + } + throw new RuntimeException(errorMsg); + } + return new DataType(DataType.STRING,"上海市",ComponentType.Text.toString()); + } + + @Override + public DataType substitue(Object... objects) { + if(objects==null || objects.length!=3){ + throw new RuntimeException("字符查找替换函数只允许3个参数:源字符、被替换字符、新字符"); + } + List paramTypeList=new ArrayList<>(); + paramTypeList.add(DataType.STRING); + paramTypeList.add(DataType.STRING); + paramTypeList.add(DataType.STRING); + List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); + if(errorIdxList!=null && errorIdxList.size()>0){ + String errorMsg=""; + switch (errorIdxList.get(0)){ + case 0: + errorMsg="【SUBSTITUE 字符查找替换函数】的第一个参数只能是字符串"; + break; + case 1: + errorMsg="【SUBSTITUE 字符查找替换函数】的第二个参数只能是字符串"; + break; + case 2: + errorMsg="【SUBSTITUE 字符查找替换函数】的第三个参数只能是字符串"; + break; + default: + errorMsg="【SUBSTITUE 字符查找替换函数】的参数异常"; + break; + } + throw new RuntimeException(errorMsg); + } + + return new DataType(DataType.STRING,"上海市",ComponentType.Text.toString()); + } + + @Override + public DataType extract(Object... objects) { + if(objects==null || objects.length!=2){ + throw new RuntimeException("字符提取函数只允许2个参数:源字符、提取类型"); + } + List paramTypeList=new ArrayList<>(); + paramTypeList.add(DataType.STRING); + paramTypeList.add(DataType.STRING); + List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); + if(errorIdxList!=null && errorIdxList.size()>0){ + String errorMsg=""; + switch (errorIdxList.get(0)){ + case 0: + errorMsg="【EXTRACT 字符提取函数】的第一个参数只能是字符串"; + break; + case 1: + errorMsg="【EXTRACT 字符提取函数】的第二个参数只能是字符串"; + break; + default: + errorMsg="【EXTRACT 字符提取函数】的参数异常"; + break; + } + throw new RuntimeException(errorMsg); + } + return new DataType(DataType.STRING,"上海市",ComponentType.Text.toString()); + } + + @Override + public DataType lower(Object... objects) { + if(objects==null || objects.length!=1){ + throw new RuntimeException("字符小写函数只允许1个参数:源字符"); + } + List paramTypeList=new ArrayList<>(); + paramTypeList.add(DataType.STRING); + List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); + if(errorIdxList!=null && errorIdxList.size()>0){ + throw new RuntimeException("【LOWER 字符小写函数】的参数只能是字符串"); + } + return new DataType(DataType.STRING,"abc",ComponentType.Text.toString()); + } + + @Override + public DataType upper(Object... objects) { + if(objects==null || objects.length!=1){ + throw new RuntimeException("字符大写函数只允许1个参数:源字符"); + } + List paramTypeList=new ArrayList<>(); + paramTypeList.add(DataType.STRING); + List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); + if(errorIdxList!=null && errorIdxList.size()>0){ + throw new RuntimeException("【UPPER 字符大写函数】的参数只能是字符串"); + } + return new DataType(DataType.STRING,"ABC",ComponentType.Text.toString()); + } + + @Override + public DataType exact(Object... objects) { + if(objects==null || objects.length!=2){ + throw new RuntimeException("字符比较函数只允许2个参数:字符、字符"); + } + List paramTypeList=new ArrayList<>(); + paramTypeList.add(DataType.STRING); + paramTypeList.add(DataType.STRING); + List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); + if(errorIdxList!=null && errorIdxList.size()>0){ + String errorMsg=""; + switch (errorIdxList.get(0)){ + case 0: + errorMsg="【EXACT 字符比较函数】的第一个参数只能是字符串"; + break; + case 1: + errorMsg="【EXACT 字符比较函数】的第二个参数只能是字符串"; + break; + default: + errorMsg="【EXTRACT 字符比较函数】的参数异常"; + break; + } + throw new RuntimeException(errorMsg); + } + return new DataType(DataType.BOOL,true); + } + + @Override + public DataType isString(Object... objects) { + if(objects==null){ + throw new RuntimeException("ISSTRING函数的参数不能为空"); + } + if(objects.length!=1){ + throw new RuntimeException("ISSTRING函数只能有一个参数"); + } + Object object=objects[0]; + String fieldType=""; + DataType resultDataType; + if(object instanceof DataType){ + DataType dataType=(DataType)object; + fieldType= ExcelParamUtil.checkParamType(dataType.getDataType()); + }else { + fieldType= ExcelParamUtil.getParamType(object.getClass().getName()); + } + if(fieldType.equalsIgnoreCase("string")){ + resultDataType=new DataType(DataType.BOOL,true); + }else{ + resultDataType=new DataType(DataType.BOOL,false); + } + return resultDataType; + } + + @Override + public DataType isJson(Object... objects) { + Object object=objects[0]; + String fieldType=""; + DataType resultDataType; + Object content=null; + if(object instanceof DataType){ + DataType dataType=(DataType)object; + content=dataType.getContent(); + fieldType= ExcelParamUtil.checkParamType(dataType.getDataType()); + }else { + fieldType= ExcelParamUtil.getParamType(object.getClass().getName()); + content=object; + } + if(fieldType.equalsIgnoreCase("string")){ + if(content!=null){ + try { + logger.info("isJson函数的JSON字符转换:"+content+""); + resultDataType=new DataType(DataType.BOOL,true); + } catch (Exception e) { + logger.info("err",e); + logger.info("不是正常的JSON字符"); + resultDataType=new DataType(DataType.BOOL,false); + } + }else{ + resultDataType=new DataType(DataType.BOOL,false); + } + }else{ + resultDataType=new DataType(DataType.BOOL,false); + } + return resultDataType; + } + + @Override + public DataType getJSONValue(Object... objects) { + Object object=objects[0]; + String fieldType=""; + DataType resultDataType; + Object content=null; + if(object instanceof DataType){ + DataType dataType=(DataType)object; + content=dataType.getContent(); + fieldType= ExcelParamUtil.checkParamType(dataType.getDataType()); + }else { + fieldType= ExcelParamUtil.getParamType(object.getClass().getName()); + content=object; + } + if(fieldType.equalsIgnoreCase("string")){ + if(content!=null){ + try { + logger.info("isJson函数的JSON字符转换:"+content+""); + resultDataType=new DataType(DataType.STRING,"JSON字符"); + } catch (Exception e) { + logger.info("err",e); + logger.info("不是正常的JSON字符"); + throw new RuntimeException("GETJSONVALUE函数只能接收JSON字符"); + } + }else{ + throw new RuntimeException("GETJSONVALUE函数只能接收JSON字符"); + } + }else{ + throw new RuntimeException("GETJSONVALUE函数只能接收JSON字符"); + } + return resultDataType; + } +} diff --git a/src/com/engine/salary/formlua/util/CompareUtil.java b/src/com/engine/salary/formlua/util/CompareUtil.java new file mode 100644 index 000000000..570e1e998 --- /dev/null +++ b/src/com/engine/salary/formlua/util/CompareUtil.java @@ -0,0 +1,24 @@ +package com.engine.salary.formlua.util; + + +public class CompareUtil { + public static String[] genArray(Object obj, String type) { + String[] resultArray = new String[]{}; + if (obj.getClass().isArray()) { + Object[] op1Array = (Object[]) obj; + resultArray = new String[op1Array.length]; + for (int i = 0; i < op1Array.length; i++) { + if (ExcelParamUtil.getParamContent(op1Array[i], type) != null) { + String p = ExcelParamUtil.getParamContent(op1Array[i], type).toString(); + resultArray[i] = p; + } + } + } else { + if (ExcelParamUtil.getParamContent(obj, type) != null) { + String opStr = ExcelParamUtil.getParamContent(obj, type).toString(); + resultArray = opStr.split(","); + } + } + return resultArray; + } +} diff --git a/src/com/engine/salary/formlua/util/DateUtil.java b/src/com/engine/salary/formlua/util/DateUtil.java new file mode 100644 index 000000000..9abbdeb30 --- /dev/null +++ b/src/com/engine/salary/formlua/util/DateUtil.java @@ -0,0 +1,212 @@ +package com.engine.salary.formlua.util; + +import com.weaver.excel.formula.entity.parameter.DataType; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.joda.time.DateTime; +import org.joda.time.Days; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + + +public class DateUtil { + protected static final Logger logger = LoggerFactory.getLogger(DateUtil.class); + private static String[] parsePatterns = {"yyyy-MM-dd","yyyy年MM月dd日", + "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd", + "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyyMMdd","yy-MM","yy/MM"}; + private static String[] dateComponentKeyList={"DateComponent","DateInterval","TimeComponent"}; + public static void main(String args[]){ + } + /** + * 构建日期对象 + * @param dateChar + * @return + */ + public static Date buildDateByDateChar(String dateChar){ + + Date resultDate=null; + if(StringUtils.isEmpty(dateChar)){ + return resultDate; + } + String formatString=buildFormat(dateChar); + if(StringUtils.isEmpty(formatString)){ + return resultDate; + } + SimpleDateFormat simpleDateFormat=new SimpleDateFormat(formatString); + simpleDateFormat.setLenient(false); + try { + resultDate=simpleDateFormat.parse(dateChar); + } catch (ParseException e) { + logger.error("err",e); + } + return resultDate; + } + + /** + * 判断是否是日期控件 + * @param data + * @return + */ + public static boolean isDateComponent(Object data){ + if(data instanceof DataType){ + DataType dataType=(DataType)data; + if(dataType.getComponentKey()!=null){ + for (String dateKey:dateComponentKeyList){ + if(dateKey.equalsIgnoreCase(dataType.getComponentKey())){ + return true; + } + } + } + }else if(data!=null && isValidDate(data+"")){ + return true; + } + + return false; + } + + + public static boolean isValidDate(String str) { + boolean convertSuccess=false; + for(String s:parsePatterns){ + convertSuccess=parseDateString(str,s); + if(convertSuccess){ + break; + } + } + return convertSuccess; + } + + public static boolean parseDateString(String dateString,String formatString){ + boolean convertSuccess=true; + SimpleDateFormat format = new SimpleDateFormat(formatString); + try { + format.setLenient(false); + format.parse(dateString); + logger.info(dateString); + } catch (ParseException e) { +// logger.error("err",e); + convertSuccess=false; + } + return convertSuccess; + } + /** + * 判断日期时间的格式 + * @param dateTimeStr + * @return + */ + public static String buildFormat(String dateTimeStr,String type){ + String fmateStr=null; + int len=dateTimeStr.length(); + switch (type){ + case "Y": + fmateStr="yyyy"; + break; + case "M": + fmateStr="yyyy-MM"; + break; + case "D": + fmateStr="yyyy-MM-dd"; + break; + case "H": + fmateStr="yyyy-MM-dd HH"; + break; + case "I": + fmateStr="yyyy-MM-dd HH:mm"; + break; + case "S": + fmateStr="yyyy-MM-dd HH:mm:ss"; + break; + } + return fmateStr; + } + + public static String buildFormat(String dateTimeStr){ + String fmateStr=null; + int len=dateTimeStr.length(); + switch (len){ + case 4: + if(dateTimeStr.indexOf(":")<0){ + fmateStr="yyyy"; + }else if(dateTimeStr.indexOf("-")<0){ + fmateStr="H:mm"; + } + break; + case 5: + if(dateTimeStr.indexOf(":")<0){ + fmateStr="yy-MM"; + }else if(dateTimeStr.indexOf("-")<0){ + fmateStr="HH:mm"; + } + break; + case 7: + if(dateTimeStr.indexOf(":")<0){ + fmateStr="yyyy-MM"; + }else if(dateTimeStr.indexOf("-")<0){ + fmateStr="H:mm:ss"; + } + break; + case 8: + fmateStr="HH:mm:ss"; + break; + case 9: + fmateStr="yyyy-MM-dd"; + break; + case 10: + fmateStr="yyyy-MM-dd"; + break; + case 13: + fmateStr="yyyy-MM-dd HH"; + break; + case 16: + fmateStr="yyyy-MM-dd HH:mm"; + break; + case 19: + fmateStr="yyyy-MM-dd HH:mm:ss"; + break; + default: + fmateStr=""; + } + return fmateStr; + } + + /** + * 判断参数类型,并且获取content属性的值,或者String类型直接返回 + * @param obj + * @return + */ + public static String getContent(Object obj, SimpleDateFormat formatter){ + String date=""; + if(obj instanceof String || obj instanceof Character){ + date=obj.toString(); + }else if(obj instanceof Date){ + date=formatter.format(obj); + }else{ + DataType dataType=(DataType)obj; + Object content=dataType.getText(); + if(null!=content){ + date=content.toString(); + }else { + date = dataType.getContent() == null ? null : dataType.getContent().toString(); + } + } + return date; + } + + /** + * 计算日期间相隔天数 + * @param start + * @param end + * @return + */ + public static int daysBetween(Date start, Date end) { + if(start == null || end == null || start.getTime() >= end.getTime()) return 0; + + Date startDate = DateUtils.truncate(start, Calendar.DATE); + return Days.daysBetween(new DateTime(startDate), new DateTime(end)).getDays(); + } +} diff --git a/src/com/engine/salary/formlua/util/ErrorUtil.java b/src/com/engine/salary/formlua/util/ErrorUtil.java new file mode 100644 index 000000000..2ed8d55fd --- /dev/null +++ b/src/com/engine/salary/formlua/util/ErrorUtil.java @@ -0,0 +1,33 @@ +package com.engine.salary.formlua.util; + +import com.alibaba.fastjson.JSONObject; + + +public class ErrorUtil { + private static JSONObject errorJson=new JSONObject(); + public static JSONObject buildDataError(String func,int errorIdx,Object errorData,String msg){ + errorJson.put("msg",msg); + errorJson.put("func",func); + errorJson.put("errorIdx",errorIdx); + errorJson.put("errorData",errorData); + errorJson.put("excute",false); + return errorJson; + } + public static JSONObject buildError(String func,Integer errorIdx,Integer errorFunc,String msg){ + errorJson.put("msg",msg); + errorJson.put("func",func); + errorJson.put("errorIdx",errorIdx); + errorJson.put("errorFunc",errorFunc); + errorJson.put("excute",false); + return errorJson; + } + public static JSONObject buildError(String func,int errorIdx,int endIndex,Object errorData,String msg){ + errorJson.put("msg",msg); + errorJson.put("func",func); + errorJson.put("errorIdx",errorIdx); + errorJson.put("errorEndIdx",endIndex); + errorJson.put("errorData",errorData); + errorJson.put("excute",false); + return errorJson; + } +} diff --git a/src/com/engine/salary/formlua/util/ExcelParamUtil.java b/src/com/engine/salary/formlua/util/ExcelParamUtil.java new file mode 100644 index 000000000..10b20219c --- /dev/null +++ b/src/com/engine/salary/formlua/util/ExcelParamUtil.java @@ -0,0 +1,1104 @@ +package com.engine.salary.formlua.util; + +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.weaver.common.form.component.base.Component; +import com.weaver.common.form.component.base.ComponentType; +import com.weaver.common.form.conditionrule.FixedField; +import com.weaver.common.form.metadata.ModuleSource; +import com.weaver.excel.formula.api.entity.FormulaVar; +import com.weaver.excel.formula.entity.parameter.*; +import com.weaver.excel.formula.entity.standard.execute.FixFieldType; +import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.Array; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public class ExcelParamUtil { + protected static final Logger logger = LoggerFactory.getLogger(ExcelParamUtil.class); + public final static String[] NUMBERFIELD=new String[]{"NumberComponent","Money","Monitor","Raty","ProgressBar", FixFieldType.Num.toString(),DataType.NUMBER}; + public final static String[] DATEFIELD=new String[]{"DateComponent","DateInterval","TimeComponent",DataType.DATE}; + public final static String[] TEXTFIELD=new String[]{"Text","TextArea","Email","Phone","Mobile","IDCard","FileComponent","SerialNumber","PositionComponent","Paragraph",FixFieldType.Text.toString(),DataType.STRING}; + public final static String[] SELECTFIELD=new String[]{"ImageComponent","RadioBox","CheckBox","Select","ComboSelect","ImageRadioBox","ImageCheckBox","TreeSelect","MatrixComponent",FixFieldType.Select.toString(),"option","employee","department","subcompany","operator",DataType.OPTION}; + public final static String[] DATASOURCEFIELD=new String[]{"Employee","Department","Mainline","Task","Document","Workflow","AgendaComponent","FormComponent","CustomerComponent","ClueComponent","Subcompany", + "OrderComponent","ContactComponent","ChanceComponent","ProductionComponent","ContractComponent","ActivityComponent","WorkreportComponent","CompetitorComponent","KpiFlowComponent","Ebuilder","QuoteComponent","AttendComponent","DataSource", + FixFieldType.Department.toString(),FixFieldType.Employee.toString()}; + + private static String[] funcArray= IllegalList.getInstance().getNameIllegalArray(); + private final static String[] NUMBERCOMPONENTS=new String[]{"NumberComponent","Money","Raty","ProgressBar","Monitor"}; + private static String[] numberTypes=new String[]{"Integer","integer","Long","Double","Float","float","int","double","long","float","bigdecimal","BigDecimal"}; + public final static String CHECKLEVEL_NULL="NULL"; + public final static String CHECKLEVEL_STRING="STRING"; + + /** + * 自定义脚本生成调用的逻辑 + * @param funcString + * @return + */ + public static String initFunc(String funcString){ + if(StringUtils.isEmpty(funcString)){ + return funcString; + } + int startIdx=funcString.indexOf("("); + int endIdx=funcString.indexOf(")"); + int funcIdx=funcString.indexOf("function"); + if(startIdx==-1 ){ + throw new RuntimeException("【语法错误】缺少左括号("); + }else if(endIdx == -1){ + throw new RuntimeException("【语法错误】缺少右括号)"); + }else if(funcIdx ==-1){ + throw new RuntimeException("【语法错误】缺少function关键字"); + } + String funcName=funcString.substring(funcIdx+8,startIdx).trim(); + String paramStr=funcString.substring(startIdx+1,endIdx); + if(paramStr.trim().equalsIgnoreCase("")){ + funcString+=funcName+"();"; + return funcString; + } + String[] paramStrArray=paramStr.split(","); + logger.info("总参数个数:"+paramStrArray.length); + String paramNames=""; + for (int i=0;i numberList=Arrays.asList(NUMBERFIELD); + List textList=Arrays.asList(TEXTFIELD); + List selectList=Arrays.asList(SELECTFIELD); + List dataSourceList=Arrays.asList(DATASOURCEFIELD); + List dateList=Arrays.asList(DATEFIELD); + if(numberList.contains(compnentKey)){ + return DataType.NUMBER; + }else if(textList.contains(compnentKey)){ + return DataType.STRING; + }else if(dateList.contains(compnentKey)){ + return DataType.STRING; + }else if(selectList.contains(compnentKey)){ + return DataType.OPTION; + }else if(dataSourceList.contains(compnentKey)){ + return DataType.OPTION; + }else { + return ""; + } + } + + public static String findDataType(String compnentKey){ + List numberList=Arrays.asList(NUMBERFIELD); + List textList=Arrays.asList(TEXTFIELD); + List selectList=Arrays.asList(SELECTFIELD); + List dataSourceList=Arrays.asList(DATASOURCEFIELD); + List dateList=Arrays.asList(DATEFIELD); + if(numberList.contains(compnentKey)){ + return DataType.NUMBER; + }else if(textList.contains(compnentKey)){ + return DataType.STRING; + }else if(dateList.contains(compnentKey)){ + return DataType.STRING; + }else if(selectList.contains(compnentKey)){ + return DataType.OPTION; + }else if(dataSourceList.contains(compnentKey)){ + return DataType.OPTION; + }else { + return DataType.STRING; + } + } + public static String findTestDataType(String compnentKey){ + List numberList=Arrays.asList(NUMBERFIELD); + List textList=Arrays.asList(TEXTFIELD); + List selectList=Arrays.asList(SELECTFIELD); + List dataSourceList=Arrays.asList(DATASOURCEFIELD); + List dateList=Arrays.asList(DATEFIELD); + if(numberList.contains(compnentKey)){ + return DataType.NUMBER; + }else if(textList.contains(compnentKey)){ + return DataType.STRING; + }else if(dateList.contains(compnentKey)){ + return DataType.DATE; + }else if(selectList.contains(compnentKey)){ + return DataType.OPTION; + }else if(dataSourceList.contains(compnentKey)){ + return DataType.OPTION; + }else { + return DataType.STRING; + } + } + /** + * 判断变量是否为空 + * @param objects + * @return + */ + public static boolean checkIsNull(Object... objects){ + String checkLevel=objects[objects.length-1].toString(); + List formulavars=new ArrayList<>(); + for (int i=0;i findAggParam(String sql){ + List list=new LinkedList<>(); + String partternStr="(COUNT|SUM|MIN|MAX|AVG){1}\\(+.+?\\)+"; + Pattern pt=Pattern.compile(partternStr); + Matcher matcher=pt.matcher(sql); + while (matcher.find()){ + String aggStr=matcher.group(); + aggStr=aggStr.replaceAll("(COUNT|SUM|MIN|MAX|AVG){1}",""); + String[] paramArray=aggStr.split(",",2); + if(paramArray.length==2){ + String cndParam=paramArray[1]; + cndParam=cndParam.substring(0,cndParam.length()-1); + list.add(cndParam); + } + } + + + return list; + } + + /** + * 替换聚合函数的条件参数,一般是从规则库返回过来的条件语句 + * @param sql + * @param replaceArray + * @return + */ + public static String replaceAggParam(String sql,List replaceArray){ + String partternStr="(COUNT|SUM|MIN|MAX|AVG){1}\\(.+?\\){1}?"; + Pattern pt=Pattern.compile(partternStr); + Matcher matcher=pt.matcher(sql); + String paramPattStr="\\(.+?\\){1}?"; + Pattern ppatt=Pattern.compile(paramPattStr); + int loop=0; + while (matcher.find()){ + String matherString=matcher.group(); + String[] paramStrArray=matherString.replaceAll("(\\(|\\))","").split(","); + String newmatherString=matherString.replace(paramStrArray[1],"{"+replaceArray.get(loop)+"}"); + sql=sql.replace(matherString,newmatherString); + loop++; + } + return sql; + } + + + + public static void checkParamArrayDataType(List formulavars){ + for (FormulaVar formulaVar:formulavars){ + if(formulaVar.getComponentKey()!=null&&!formulaVar.getComponentKey().equals("")){ + String componentKey=formulaVar.getComponentKey(); + Arrays.sort(NUMBERCOMPONENTS); + int searchIdx=Arrays.binarySearch(NUMBERCOMPONENTS,componentKey); + if(searchIdx>=0){ + formulaVar.setFieldType("Number"); + } + Arrays.sort(ReturnType.CHECK_TYPE); + if(Arrays.binarySearch(ReturnType.CHECK_TYPE,componentKey)>=0){ + formulaVar.setFieldType("String"); + } + if(formulaVar.getOptionId()!=null){ + formulaVar.setFieldType("String"); + } + } + + } + } + + + /** + * 替换语句中的参数为参数列表中的Key + * @param sql + * @param formulaVars + * @return + */ + public static String replaceAllParam(String sql,List formulaVars){ + if(null==formulaVars){ + return sql; + } + //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 + String partternStr="\\{.+?\\}{1}?"; + Pattern pt=Pattern.compile(partternStr); + Matcher matcher=pt.matcher(sql); + + int loop=0; + //替换逻辑 + while (matcher.find()){ + String matherString=matcher.group(); + //替换特殊字符 + matherString=matherString.replace("{",""); + matherString=matherString.replace("}",""); + matherString=matherString.replace("(","\\("); + matherString=matherString.replace(")","\\)"); + matherString=matherString.replaceAll("\\+","\\\\+"); + matherString=matherString.replaceAll("\\-","\\\\-"); + matherString=matherString.replaceAll("\\*","\\\\*"); + matherString=matherString.replaceAll("\\/","\\\\/"); + if(formulaVars!=null&&loop") + .replace("<","<"); + return formatStr; + } + + /** + * 过滤 除了数字外的其他参数类型 + * @param param + * @return + */ + public static boolean inNumber(Object param){ + boolean r=false; + Class[] paramClasses=new Class[]{Integer.class,Double.class,Float.class,Long.class,Short.class}; + for(int i=0;i numberList=Arrays.asList(numberTypes); + if(typeAllName.equals("Character")){ + return "String"; + }else if(numberList.contains(typeAllName.toLowerCase())){ + return "Number"; + } + return typeAllName; + } + + /** + * 获取参数类型 + * @param + * @return + */ + public static String getParamType(Object dataType){ + if(dataType instanceof DataType){ + DataType data=(DataType)dataType; + String filedType=data.getDataType(); + filedType=filedType.toLowerCase(); + + switch (filedType){ + case "number": + filedType= ParamType.DOUBLE.getName(); + break; + case "string": + filedType=ParamType.STRING.getName(); + break; + case "boolean": + filedType=ParamType.BOOLEAN.getName(); + break; + case "select": + filedType=ParamType.STRING.getName(); + break; + case "text": + filedType=ParamType.STRING.getName(); + break; + case "employee": + filedType= ParamType.STRING.getName(); + break; + case "department": + filedType=ParamType.STRING.getName(); + break; + case "integer": + filedType=ParamType.DOUBLE.getName(); + break; + case "double": + filedType=ParamType.DOUBLE.getName(); + break; + case "float": + filedType=ParamType.DOUBLE.getName(); + break; + case "int": + filedType=ParamType.DOUBLE.getName(); + break; + case "long": + filedType=ParamType.DOUBLE.getName(); + break; + case "bigdecimal": + filedType=ParamType.DOUBLE.getName(); + break; + + } + return filedType; + }else { + return getParamType(dataType.getClass().getName()); + } + } + + /** + * 从DataType中获取值 + * @param object + * @return + */ + public static List getParamContent(Object object){ + List dataList=new ArrayList<>(); + if(object!=null){ + if(object instanceof DataType){ + DataType data=(DataType)object; + dataList.add(getDataTypeContent(data)); + return dataList; + }else if(object instanceof List){ + List sourceDataList=(List)object; + for (Object paramObj:sourceDataList){ + if(paramObj instanceof DataType){ + DataType pramDataType=(DataType)paramObj; + dataList.add(pramDataType.getContent()); + }else{ + dataList.add(paramObj); + } + } + return dataList; + }else if(object instanceof Object[]){ + Object[] sourceDataList=(Object[]) object; + for (Object paramObj:sourceDataList){ + if(paramObj instanceof DataType){ + DataType pramDataType=(DataType)paramObj; + dataList.add(pramDataType.getContent()); + }else{ + dataList.add(paramObj); + } + } + return dataList; + }else { + dataList.add(object); + return dataList; + } + } + dataList.add(object); + return dataList; + } + public static Object getDataTypeContent(DataType dataType){ + String properType=""; + Object content=null; + if(StringUtils.isNotEmpty(dataType.getComponentKey())){ + properType=dataType.getComponentKey(); + }else if(StringUtils.isNotEmpty(dataType.getDataType())){ + properType=dataType.getDataType(); + } + switch (findType(properType)){ + case DataType.NUMBER: + case DataType.STRING: + case DataType.DATE: + content=dataType.getContent(); + break; + case DataType.OPTION: + content=dataType.getContent(); + break; + } + return content; + } + + /** + * 获取JSON的content内容 + * @param object + * @return + */ + public static Object getParamContent(Object object,String funcType){ + Object result=null; + if(object instanceof DataType){ + DataType dataType=(DataType)object; + switch (dataType.getDataType()){ + case DataType.DATE: + if(dataType.getContent()==null||dataType.getContent().equals("")){ + return ""; + } + String format= DateUtil.buildFormat(dataType.getContent().toString()); + SimpleDateFormat formatter = new SimpleDateFormat(format); + try { + Date date=formatter.parse(dataType.getContent().toString()); + result=funcType.equalsIgnoreCase("string")?dataType.getContent():date.getTime(); + } catch (ParseException e) { + logger.error("err",e); + } + break; + case DataType.NUMBER: + if(null==dataType.getContent()||dataType.getContent().equals("")){ + return 0; + } + if(funcType.equalsIgnoreCase("string")){ + result=dataType.getContent(); + + }else { + if(!RegularUtil.isNumber(dataType.getContent())){ + return 0; + } + if(dataType.getContent().toString().indexOf(".")>=0){ +// result=Double.parseDouble(dataType.getContent().toString()); + result=new BigDecimal(dataType.getContent().toString()); + }else if(dataType.getContent().toString().length()<=9){ + result=Integer.parseInt(dataType.getContent().toString()); + }else { + result=Long.parseLong(dataType.getContent().toString()); + } + } + break; + case DataType.STRING: + if(null==dataType.getContent()){ + result=""; + }else { + result=dataType.getContent().toString().trim(); + } + + break; + case DataType.OPTION: + if(funcType.equalsIgnoreCase("string")){ + if(StringUtils.isNotEmpty(dataType.getOptionContent())){ + result=dataType.getOptionContent(); + }else { + result=""; + } + + }else { + result=dataType.getContent(); + } + break; + case DataType.BOOL: + result=dataType.getContent(); + break; + default: + if(dataType.getContent()==null){ + return ""; + } + result=dataType.getContent().toString(); + break; + } + }else if(object instanceof Date){ + Date date=(Date)object; + result=date.getTime(); + }else { + if(funcType.equalsIgnoreCase(DataType.BOOL)){ + result=object==null?false:object; + }else if(object instanceof Boolean){ + result=object; + }else if(object instanceof Integer || object instanceof Double || object instanceof Long || object instanceof BigDecimal){ + result=object; + }else { + result=object==null?"":object+""; + } + + } + return result; + } + + /** + * 获取参数的数据类型,从DataType中获取或者直接获取 + * @param object + * @return + */ + public static String checkParamType(Object object){ + String typeName=null; + if(object instanceof DataType){ + DataType dataType=(DataType)object; + typeName= dataType.getDataType(); + }else { + typeName= ExcelParamUtil.getParamType(object.getClass().getName()); + } + return typeName; + } + + /** + * 运行公式时的参数设置 + * @param formulavars + * @param expressMap + * @return + */ + public static Map buildParam(List formulavars, Map expressMap){ + checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 + for(FormulaVar formulaVar:formulavars){ + DataType dataType=new DataType(); + String key=null; + if(formulaVar.getFormId()!=null&&formulaVar.getFieldId()==null){ + key="form"+formulaVar.getFormId(); + }else if(formulaVar.getFieldId()!=null&&formulaVar.getOptionId()==null){ + String fieldId=formulaVar.getFieldId().toString(); + key="field"+fieldId; + dataType.setFieldId(fieldId); + }else if(formulaVar.getOptionId()!=null){ + key="option"+formulaVar.getOptionId(); + dataType.setContent(formulaVar.getOptionId()); + }else { + key="option"+formulaVar.getOptionId(); + } + + Arrays.sort(funcArray); + int sidx= Arrays.binarySearch(funcArray,key); + if( sidx>=0 ){ + throw new RuntimeException("变量名非法"); + } + if(formulaVar.getOptionId()!=null){ + dataType.setDataType(DataType.OPTION); + } + if(expressMap.containsKey(key)){ + String newKey= ExcelParamUtil.randomNumber()+"_"+key; + expressMap.put(newKey,dataType); + formulaVar.setKey(newKey); + }else { + expressMap.put(key,dataType); + } + } + + return expressMap; + } + + /*** + * 验证函数时构建参数设置参数值 + * 把FormulaVar类型的参数封装成DataType类型参数 + * @param formulavars 入参类型 + * @param expressMap 返回Map + * @return + */ + public static Map buildLocalParam(List formulavars, Map expressMap, SimpleEmployee employee){ + + checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 + for(FormulaVar formulaVar:formulavars){ + DataType dataType=new DataType(); + dataType.setScore(0d); + dataType.setName((null==formulaVar.getName() || formulaVar.getName().equals(""))?formulaVar.getParent():formulaVar.getName()); + dataType.setFieldId(formulaVar.getFieldId()!=null?formulaVar.getFieldId().toString():null); + String key=null; + if(formulaVar.getModule()!=null&&!formulaVar.getModule().equals("")){ + try { + dataType.setModule(formulaVar.getModule()); + } catch (IllegalArgumentException e) { + logger.error("err",e); + dataType.setModule(formulaVar.getModule()); + } + } + dataType.setFormId(formulaVar.getFormId()!=null?Long.parseLong(formulaVar.getFormId()):null); + if(formulaVar.getName()!=null&&formulaVar.getName().equals("当前操作人")){ + key=formulaVar.getKey(); + formulaVar.setContent(employee.getUserId().toString()); + dataType.setContent(formulaVar.getContent()); + dataType.setText(formulaVar.getContent()); + dataType.setDataType(DataType.OPTION); + }else{ + if(formulaVar.getFormId()!=null&&formulaVar.getFieldId()==null&&formulaVar.getOptionId()==null){ + key="form"+formulaVar.getFormId().toString(); + ThreadLocalData threadLocalData=new ThreadLocalData(); + threadLocalData.setEmployee(employee); + threadLocalData.setModuleSource(ModuleSource.biaoge); + ParamContext.get().setValue(formulaVar.getFormId().toString(),threadLocalData); + }else if(formulaVar.getFieldId()!=null&&formulaVar.getOptionId()==null){ + String fieldId=formulaVar.getFieldId().toString(); + key="field"+fieldId; + dataType.setFieldId(fieldId); + }else if(formulaVar.getOptionId()!=null){ + key="option"+formulaVar.getOptionId().toString(); + dataType.setContent(formulaVar.getOptionId()); + dataType.setText(formulaVar.getName()); + dataType.setFormId(null); + }else { + key="option"+formulaVar.getOptionId().toString(); + } + } + + Arrays.sort(funcArray); + int sidx= Arrays.binarySearch(funcArray,key); + if( sidx>=0 ){ + throw new RuntimeException("变量名非法"); + } + if(formulaVar.getOptionId()!=null){ + dataType.setDataType(DataType.OPTION); + } + + if(StringUtils.isEmpty(dataType.getDataType())){ + String typeKey=null; + if(StringUtils.isNotEmpty(formulaVar.getFieldType())){ + typeKey=formulaVar.getFieldType(); + }else if(StringUtils.isNotEmpty(formulaVar.getType())){ + typeKey=formulaVar.getType(); + }else if(StringUtils.isNotEmpty(formulaVar.getFieldType())){ + typeKey=formulaVar.getFieldType(); + } + dataType.setDataType(ExcelParamUtil.findTestDataType(typeKey)); + } + if(StringUtils.isEmpty(dataType.getComponentKey())){ + dataType.setComponentKey(formulaVar.getComponentKey()); + } + if(expressMap.containsKey(key)){ + String newKey=key+ ExcelParamUtil.randomNumber(); + formulaVar.setKey(newKey); + dataType.setAggCndKey(key); + expressMap.put(newKey,dataType); + }else { + expressMap.put(key,dataType); + } + } + + return expressMap; + } + + /** + * 格式化变量为数字 + * @param + */ + public static Object convertParamValToNumber(Object op1){ + BigDecimal oop1=new BigDecimal(ExcelParamUtil.getParamContent(op1,"string").toString()); + return oop1; + } + /** + * 格式化参数 + * @param op1 + * @param op2 + * @return + */ + public static List converParamValue(Object op1,Object op2){ + List list=new ArrayList<>(); + + + if(op1 instanceof DataType){ + list.add(op1); + DataType op1Data=(DataType)op1; + if(!(op2 instanceof DataType)&&op1Data.getDataType().toLowerCase().equals("date")){ + DataType dataType=new DataType(); + dataType.setDataType(DataType.STRING); + dataType.setContent(op2); + list.add(dataType); + }else if(op2 instanceof DataType&&op1Data.getDataType().toLowerCase().equals("date")){ + DataType dataType=(DataType)op2; + dataType.setDataType(DataType.STRING); + list.add(dataType); + }else{ + list.add(op2); + } + + }else if(op2 instanceof DataType){ + DataType op2Data=(DataType)op2; + if(!(op1 instanceof DataType)&&op2Data.getDataType().toLowerCase().equals("date")){ + DataType dataType=new DataType(); + dataType.setDataType(DataType.STRING); + dataType.setContent(op1); + list.add(dataType); + }else if(op1 instanceof DataType&&op2Data.getDataType().toLowerCase().equals("date")){ + DataType dataType=(DataType)op1; + dataType.setDataType(DataType.STRING); + list.add(dataType); + }else { + list.add(op1); + } + list.add(op2); + }else { + list.add(op1); + list.add(op2); + } + + return list; + } + + /** + * 统一处理参数类型不一致问题 + * @param typeName + * @return + */ + public static String checkParamType(String typeName){ + typeName=typeName.toLowerCase(); + switch (typeName){ + case "option": + typeName=ParamType.STRING.getName(); + break; + case "date": + typeName=DataType.STRING; + break; + case "number": + typeName=DataType.NUMBER; + break; + case "string": + typeName=ParamType.STRING.getName(); + break; + case "boolean": + typeName=ParamType.BOOLEAN.getName(); + break; + case "select": + typeName=ParamType.STRING.getName(); + break; + case "text": + typeName=ParamType.STRING.getName(); + break; + case "employee": + typeName=ParamType.STRING.getName(); + break; + case "department": + typeName=ParamType.STRING.getName(); + break; + case "integer": + typeName=DataType.NUMBER; + break; + case "double": + typeName=DataType.NUMBER; + break; + case "float": + typeName=DataType.NUMBER; + break; + case "int": + typeName=DataType.NUMBER; + break; + case "long": + typeName=DataType.NUMBER; + break; + case "bigdecimal": + typeName=DataType.NUMBER; + break; + + } + return typeName; + } + public static String getKeyString(Object obj){ + if(obj instanceof JSONObject){ + JSONObject jsonObject=(JSONObject)obj; + return jsonObject.getString("key"); + }else { + return obj.toString(); + } + } + /** + * 替换变量的错误位置 + * @param startIdx + * @param endIdx + * @param excuteStr + */ + public static Map replaceErrorPlace(int startIdx,int endIdx,String errorFunc,String excuteStr,Map paramMap){ + Map kvMap=loopMap(paramMap); + Map replaceMap=new HashMap<>(); + String excuteLeftStr=excuteStr.substring(0,startIdx); + if(!excuteLeftStr.equals("")){ + Iterator wordItaretor=kvMap.keySet().iterator(); + while (wordItaretor.hasNext()){ + String key=wordItaretor.next(); + String name=kvMap.get(key); + if(excuteLeftStr.indexOf(key)>=0){ + String newStr=excuteLeftStr.replaceAll(key,name); + startIdx=startIdx-(excuteLeftStr.length()-newStr.length()); + } + } + + } + if(kvMap.get(errorFunc)!=null){ + endIdx=startIdx+kvMap.get(errorFunc).length()-1; + }else { + endIdx=startIdx+errorFunc.length()-1; + } + + replaceMap.put("startIdx",startIdx); + replaceMap.put("endIdx",endIdx); + return replaceMap; + } + + public static Map loopMap(Map paramMap){ + Map kvMap=new HashMap<>(); + + Set set=paramMap.keySet(); + Iterator iterator=set.iterator(); + while (iterator.hasNext()){ + String key=iterator.next(); + DataType dataType=(DataType)paramMap.get(key); + kvMap.put(key,dataType.getName()); + } + return kvMap; + } + + public static boolean isNumber(Object object){ + String type= ExcelParamUtil.getParamType(object.getClass().getName()); + Arrays.sort(numberTypes); + if(Arrays.binarySearch(numberTypes,type)>=0){ + return true; + } + return false; + } + + public static String randomNumber(){ + int max=1000,min=1; + long randomNum = System.currentTimeMillis(); + int ran3 = (int) (randomNum%(max-min)+min); + return ran3+""; + } + + /** + * 长度不够则添加元素的字符串拼接 + * @param chars 将要拼接的字符 + * @param sourceStr 源字符 + * @param targetLength 目标字符长度 + * @param place 位置在左还是右 + * @return + */ + public static String appendString(String chars, String sourceStr, int targetLength, String place){ + StringBuilder builder = new StringBuilder(sourceStr); + + while (true){ + //长度相等,不做处理 + if(builder.length() == targetLength){ + break; + }else if(builder.length() > targetLength){ + //源字符长度大于目标长度则截取 + int length = builder.length() - targetLength; + + if("LEFT".equals(place)){ + String tempStr = builder.substring(length, builder.length()); + builder.replace(0, builder.length(), tempStr); + }else { + String tempStr = builder.substring(0, targetLength); + builder.replace(0, builder.length(), tempStr); + } + break; + } + + //源字符长度小于目标长度则不断拼接 + if("LEFT".equals(place)){ + builder.insert(0, chars.replaceAll(",","")); + }else { + builder.append(chars.replaceAll(",","")); + } + } + return builder.toString(); + } + + public static FormulaVar getFixFieldVar(List list, String key){ + FormulaVar formulaVar=new FormulaVar(); + for (FixedField fixedField:list){ + if(fixedField.getKey().equals(key)){ + Component component=(Component)fixedField.getMatchs().get(0); + ComponentType componentType=component.getComponentKey(); + if(componentType.equals(ComponentType.Text)){ + + } + } + } + return formulaVar; + } + + public static String findAggCndStr(String sql,Map paramMap){ + String partternStr="(COUNT|SUM|MIN|MAX|AVG|count|sum|min|max)+\\(+(.)+\\)+"; + Pattern pattern = Pattern.compile(partternStr); + Matcher matcher = pattern.matcher(sql ); + int i=0; + while (matcher.find()) { + String cnd = matcher.group(); + String[] cndArray=cnd.split(",",2); + if(cndArray.length==2){ + String realCnd=cndArray[1].substring(0,cndArray[1].length()-1); + String key="cnd"+i+Math.abs(realCnd.hashCode())+""; + sql=sql.replace(realCnd,key); + realCnd=realCnd.replace("{",""); + realCnd=realCnd.replace("}",""); + paramMap.put(key,realCnd); + } + i++; + } + return sql; + } + + + /** + * 执行语句的断句算法,通过计算小括号的数量进行断句断点的确定,然后拆分语句 + * @param sql + */ + public static String spliteSql(String sql,Map paramMap){ + List strList=new ArrayList<>(); + int pointIdx=0; + char[] charArray=sql.toCharArray(); + int leftBrakets=0; + char brackeLeft='('; + char brackeRight=')'; + boolean find=false; + for (int i=0;i=0?cndArray[0].length():0); + replaceSql+=cndArray[0]+findAggCndStr(realCnd,paramMap); + } + + }else { + replaceSql+=findAggCndStr(s,paramMap); + } + + } + sql=replaceSql; + return sql; + } + +} diff --git a/src/com/engine/salary/formlua/util/ExcelResult.java b/src/com/engine/salary/formlua/util/ExcelResult.java new file mode 100644 index 000000000..aaf70d575 --- /dev/null +++ b/src/com/engine/salary/formlua/util/ExcelResult.java @@ -0,0 +1,36 @@ +package com.engine.salary.formlua.util; + +import java.io.Serializable; + +/** + * @author + */ +public class ExcelResult implements Serializable { + private Object data; + private int code; + private String errorInfo; + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getErrorInfo() { + return errorInfo; + } + + public void setErrorInfo(String errorInfo) { + this.errorInfo = errorInfo; + } +} diff --git a/src/com/engine/salary/formlua/util/ExcelStandardUtil.java b/src/com/engine/salary/formlua/util/ExcelStandardUtil.java new file mode 100644 index 000000000..45489e83d --- /dev/null +++ b/src/com/engine/salary/formlua/util/ExcelStandardUtil.java @@ -0,0 +1,492 @@ +package com.engine.salary.formlua.util; + + +import com.alibaba.fastjson.JSON; +import com.weaver.common.form.component.base.ComponentType; +import com.weaver.excel.formula.api.entity.DataOption; +import com.weaver.excel.formula.api.entity.FormulaVar; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.excel.formula.entity.parameter.ParamFactory; +import com.weaver.excel.formula.entity.standard.front.CurrentVar; +import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ExcelStandardUtil { + protected static final Logger logger = LoggerFactory.getLogger(ExcelStandardUtil.class); + + public static Map replaceAllParam(String sql, List localVars,List dataVars, SimpleEmployee employee){ + if(null!=localVars){ + for (FormulaVar formulaVar:localVars){ + if(StringUtils.isNotEmpty(formulaVar.getDataId()) && StringUtils.isEmpty(formulaVar.getFormId())){ + formulaVar.setFormId(formulaVar.getDataId()); + } + if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_department")){ + formulaVar.setType("department"); + formulaVar.setComponentKey(ComponentType.Department.toString()); + } + if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_superior")){ + formulaVar.setType("employee"); + formulaVar.setComponentKey(ComponentType.Employee.toString()); + } + } + } + + Map dataMap=new HashMap<>(); + Map paramKeyMap=new HashMap<>(); + //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 + String partternStr="\\{.+?\\}{1}?"; + Pattern pt=Pattern.compile(partternStr); + Matcher matcher=pt.matcher(sql); + + int loop=0; + //替换逻辑 + while (matcher.find()){ + String matherString=matcher.group(); + //替换特殊字符 + matherString=matherString.replace("{",""); + matherString=matherString.replace("}",""); + matherString=matherString.replace("(","\\("); + matherString=matherString.replace(")","\\)"); + matherString=matherString.replaceAll("\\+","\\\\+"); + matherString=matherString.replaceAll("\\-","\\\\-"); + matherString=matherString.replaceAll("\\*","\\\\*"); + matherString=matherString.replaceAll("\\/","\\\\/"); + if(localVars!=null&&loop"+JSON.toJSONString(dataType)); + } + }else{ + String typeKey=localFormulaVar.getProperKey(); + if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ + typeKey=localFormulaVar.getFieldType(); + }else if(StringUtils.isNotEmpty(localFormulaVar.getType())){ + typeKey=localFormulaVar.getType(); + }else if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ + typeKey=localFormulaVar.getFieldType(); + localFormulaVar.setComponentKey(localFormulaVar.getFieldType()); + } + dataType.setDataType(ExcelParamUtil.findDataType(typeKey)); + dataType.setFieldId(localFormulaVar.getFieldId()); + dataType.setFormId(StringUtils.isNotEmpty(localFormulaVar.getFormId())?Long.parseLong(localFormulaVar.getFormId()):null); + try { + dataType.setModule(localFormulaVar.getModule()); + } catch (IllegalArgumentException e) { + logger.error("err",e); + dataType.setModule(localFormulaVar.getModule()); + } + dataType.setContent(""); + if(!paramKeyMap.containsKey(key)){ + paramKeyMap.put(key,dataType); + }else{ + logger.info("存在同名参数:"+key+"-->"+JSON.toJSONString(dataType)); + } + } + } + loop++; + } + } +// if(loop!=localVars.size()){ +// throw new RuntimeException("参数列表与执行语句不一致"); +// } + dataMap.put("param",paramKeyMap); + dataMap.put("sql",sql); + return dataMap; + } + + public static Map replaceAllParamForTest(String sql, List formulaVars, SimpleEmployee employee){ + if(null==formulaVars){ + return null; + } + for (FormulaVar formulaVar:formulaVars){ + if(StringUtils.isNotEmpty(formulaVar.getDataId()) && StringUtils.isEmpty(formulaVar.getFormId())){ + formulaVar.setFormId(formulaVar.getDataId()); + if(StringUtils.isNotEmpty(formulaVar.getType()) && StringUtils.isEmpty(formulaVar.getComponentKey())){ + if(formulaVar.getType().equalsIgnoreCase("operator") || formulaVar.getType().equalsIgnoreCase("employee")){ + formulaVar.setComponentKey(""); + } + } + } + if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_department")){ + formulaVar.setType("department"); + formulaVar.setComponentKey("Department"); + } + if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_superior")){ + formulaVar.setType("employee"); + formulaVar.setComponentKey("Employee"); + } + } + Map dataMap=new HashMap<>(); + Map paramKeyMap=new HashMap<>(); + //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 + String partternStr="\\{.+?\\}{1}?"; + Pattern pt=Pattern.compile(partternStr); + Matcher matcher=pt.matcher(sql); + + int loop=0; + //替换逻辑 + while (matcher.find()){ + String matherString=matcher.group(); + //替换特殊字符 + matherString=matherString.replace("{",""); + matherString=matherString.replace("}",""); + matherString=matherString.replace("(","\\("); + matherString=matherString.replace(")","\\)"); + matherString=matherString.replaceAll("\\+","\\\\+"); + matherString=matherString.replaceAll("\\-","\\\\-"); + matherString=matherString.replaceAll("\\*","\\\\*"); + matherString=matherString.replaceAll("\\/","\\\\/"); + if(formulaVars!=null&&loop dataVars,SimpleEmployee employee){ + DataType dataType =new DataType(); + if(localFormulaVar == null){ + return null; + } + + String typeKey=localFormulaVar.getProperKey(); + if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ + typeKey=localFormulaVar.getFieldType(); + }else if(StringUtils.isNotEmpty(localFormulaVar.getType())){ + typeKey=localFormulaVar.getType(); + }else if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ + typeKey=localFormulaVar.getFieldType(); + localFormulaVar.setComponentKey(localFormulaVar.getFieldType()); + } + logger.info(localFormulaVar.getId()+"typeKey=:"+typeKey); + switch (ExcelParamUtil.findDataType(typeKey)){ + case DataType.DATE: + dataType.setDataType(DataType.STRING); + setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"field"); + if(dataType.getContent()==null){ + dataType.setContent(""); + } + break; + case DataType.STRING: + dataType.setDataType(DataType.STRING); + setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"field"); + if(dataType.getContent()==null){ + dataType.setContent(""); + } + break; + case DataType.NUMBER: + dataType.setDataType(DataType.NUMBER); + setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"field"); + break; + case DataType.OPTION: + logger.info("函数构建选项型:"+JSON.toJSONString(localFormulaVar)); + dataType.setDataType(DataType.OPTION); + setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"option"); + if(dataType.getContent() == null){ + dataType.setContent(localFormulaVar.getId()!=null?localFormulaVar.getId():localFormulaVar.getOptionId()); + dataType.setText(dataType.getContent()+""); + } + //当前操作人赋值 + if(localFormulaVar.getId()!=null){ + switch (localFormulaVar.getId()){ + case "current_user": + dataType.setContent(employee.getId()); + dataType.setOptionContent(employee.getName()); + break; + case "current_superior": + dataType.setContent(employee.getSuperiorId()); + break; + case "current_department": + dataType.setContent(employee.getDepartmentId()); + break; + case "current_position": + dataType.setContent(employee.getPositionId()); + break; + default: + break; + } + logger.info("当前操作人赋值完成:"+JSON.toJSONString(dataType)); + } + break; + case DataType.DATASOURCE: + dataType.setDataType(DataType.DATASOURCE); + setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"option"); + break; + default: + logger.info("未匹配到参数类型:"+(JSON.toJSONString(localFormulaVar))); + break; + } + if(StringUtils.isNotEmpty(localFormulaVar.getDataType())){ + dataType.setDataType(localFormulaVar.getDataType()); + } + if(StringUtils.isEmpty(dataType.getComponentKey())){ + if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ + dataType.setComponentKey(localFormulaVar.getFieldType()); + }else if(StringUtils.isNotEmpty(localFormulaVar.getProperKey())){ + dataType.setComponentKey(localFormulaVar.getProperKey()); + }else if(StringUtils.isNotEmpty(localFormulaVar.getComponentKey())){ + dataType.setComponentKey(localFormulaVar.getComponentKey()); + } + } + dataType.setFieldId(localFormulaVar.getFieldId()+""); + dataType.setFormId(localFormulaVar.getFormId()!=null?Long.parseLong(localFormulaVar.getFormId()):null); + dataType.setEmployee(employee); + if(StringUtils.isNotEmpty(localFormulaVar.getModule())){ + try { + dataType.setModule(localFormulaVar.getModule()); + } catch (IllegalArgumentException e) { + logger.error("err",e); + dataType.setModule(localFormulaVar.getModule()); + } + } + dataType.setName(localFormulaVar.getTitle()!=null?localFormulaVar.getTitle():localFormulaVar.getName()); + logger.info("构建值完毕:"+JSON.toJSONString(dataType)); + return dataType; + } + private static void setContent(DataType dataType,String typeKey,String sourceVar,List targetVarList,String type){ + if(sourceVar==null){ + return ; + } + for (FormulaVar loopVar:targetVarList){ + switch (type){ + case "field": + if(sourceVar.equalsIgnoreCase(loopVar.getFieldId())){ + dataType.setContent(loopVar.getContent()!=null?loopVar.getContent():""); + dataType.setText(dataType.getContent()+""); + if(StringUtils.isNotEmpty(loopVar.getsFormId())){ + dataType.setSubFormId(Long.parseLong(loopVar.getsFormId())); + } + dataType.setComponentKey(loopVar.getComponentKey()); + }else{ + dataType.setComponentKey(typeKey); + } + break; + case "form": + if(sourceVar.equalsIgnoreCase(loopVar.getFormId())){ + dataType.setContent(loopVar.getContent()); + } + break; + case "option": + if(sourceVar.equalsIgnoreCase(loopVar.getFieldId())){ + dataType.setContent(loopVar.getContent()); + if(dataType.getContent()==null){ + dataType.setContent(loopVar.getOptionId()); + dataType.setText(loopVar.getOptionId()); + } + //常量 + if(StringUtils.isNotEmpty(loopVar.getOptionContent())){ + dataType.setOptionContent(loopVar.getOptionContent()); + }else if(loopVar.getDataOptionList()!=null && loopVar.getDataOptionList().size()>0){ + String optionContents=""; + List dataOptions=loopVar.getDataOptionList(); + for(DataOption dataOption:dataOptions){ + optionContents+=dataOption.getOptionContent()+","; + } + if(optionContents.lastIndexOf(",")>0){ + optionContents=optionContents.substring(0,optionContents.lastIndexOf(",")); + } + dataType.setOptionContent(optionContents); + }else {//变量 + dataType.setOptionContent(loopVar.getContent()); + } + + dataType.setScore(loopVar.getScore()); + if(StringUtils.isNotEmpty(loopVar.getsFormId())){ + dataType.setSubFormId(Long.parseLong(loopVar.getsFormId())); + } + dataType.setComponentKey(loopVar.getComponentKey()); + } + break; + default: + break; + } + } + } +} diff --git a/src/com/engine/salary/formlua/util/ExecuteTest.java b/src/com/engine/salary/formlua/util/ExecuteTest.java new file mode 100644 index 000000000..cfd350d6c --- /dev/null +++ b/src/com/engine/salary/formlua/util/ExecuteTest.java @@ -0,0 +1,47 @@ +package com.engine.salary.formlua.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.ql.util.express.ExpressRunner; +import com.weaver.excel.formula.api.entity.ExpressFormula; +import com.weaver.excel.formula.api.entity.FormulaVar; +import com.weaver.teams.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +public class ExecuteTest { + protected static final Logger logger = LoggerFactory.getLogger(ExecuteTest.class); + public static ExpressRunner runner; + + public static void main(String[] args){ + String[] strs=new String[]{"1","2","3"}; + List obj1=new ArrayList<>(); + for (int i =1 ;i localVars=paramArray.toJavaList(FormulaVar.class); + ExcelStandardUtil.replaceAllParam(expressFormula.getFormula(),localVars,null,null); + } + } + } + } +} diff --git a/src/com/engine/salary/formlua/util/ExpressRegularUtil.java b/src/com/engine/salary/formlua/util/ExpressRegularUtil.java new file mode 100644 index 000000000..a953ef1ec --- /dev/null +++ b/src/com/engine/salary/formlua/util/ExpressRegularUtil.java @@ -0,0 +1,227 @@ +package com.engine.salary.formlua.util; + +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.formlua.entity.parameter.FormulaContext; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + + +public class ExpressRegularUtil { + private static final String[] checkRegularNullParameter=new String[]{"TRUE","FALSE","NOW","TODAY"}; + private static final String[] operSymbs=new String[]{">",">=","=","<","<=","\\+","-","\\*","\\/","!="}; + private static final String checkRegularParameter="AND|OR|IF|NOT|LIKE|DATEDIFF|DATEADD|WEEKNUM|WEEKDAY|DATEFORMAT|Y|M|D|H|I|S|COUNT|SUM|MAX|MIN|CONCAT|SEARCH|TEXT|PAD|REPLACE|VALUE|LEN|LEFT|RIGHT|MID"; + private final static String leftCircleBracket="Unmatched closing '('"; + private final static String rightCircleBracket="Unmatched closing ')'"; + private final static String leftSquareBracket="Unmatched closing '['"; + private final static String rightSquareeBracket="Unmatched closing ']'"; + private final static String leftBigBracket="Unmatched closing '{'"; + private final static String rightBigBracket="Unmatched closing '}'"; + public static boolean checkFuncExpress(String str){ + filter(str); + return true; + } + + public static boolean isContainChinese(String str) { + Pattern p = Pattern.compile("[\u4E00-\u9FA5|\\!|\\,|\\。|\\(|\\)|\\《|\\》|\\“|\\”|\\?|\\:|\\;|\\【|\\】]"); + Matcher m = p.matcher(str); + if (m.find()) { + return true; + } + return false; + } + + private static void filter(String formula){ + try { + testSymbol(formula); + checkNullRegular(formula); + checkOperatorNullParam(formula); + formula=formula.replaceAll("","#"); + String leftReplace=""; + String rightReplace=""; + leftReplace=formula.replaceAll("\\(",""); + rightReplace=formula.replaceAll("\\)",""); + if(leftReplace.length()>rightReplace.length()){ + PatternSyntaxException patternSyntaxException=new PatternSyntaxException(leftCircleBracket,formula,formula.lastIndexOf(")")); + throw patternSyntaxException; + } + if(leftReplace.length()rightReplace.length()){ + PatternSyntaxException patternSyntaxException=new PatternSyntaxException(leftBigBracket,formula,formula.lastIndexOf("}")); + throw patternSyntaxException; + } + if(leftReplace.length()rightReplace.length()){ + PatternSyntaxException patternSyntaxException=new PatternSyntaxException(leftSquareBracket,formula,formula.lastIndexOf("]")); + throw patternSyntaxException; + } + if(leftReplace.length()=0){ + if(FormulaContext.get().getValue(checkRegularNullParameter[i])!=null){ + Integer paramCount=FormulaContext.get().getValue(checkRegularNullParameter[i]); + paramCount++; + FormulaContext.get().setValue(checkRegularNullParameter[i]); + }else { + FormulaContext.get().setValue(checkRegularNullParameter[i]); + } + filterPattern=checkRegularNullParameter[i]+"{1}\\({1}\\){1}"; + Pattern pattern= Pattern.compile(filterPattern); + Matcher matcher=pattern.matcher(formula); + boolean excuteBool=matcher.find(); + if(!excuteBool){ + eidx=0; + Integer errorCount=FormulaContext.get().getFormulaJson().getInteger(checkRegularNullParameter[i]); + String [] errorCutArray=formula.split(checkRegularNullParameter[i]); + for (int fi=0;fi1&&fi>0){ + eidx+=checkRegularNullParameter[i].length(); + } + } + PatternSyntaxException patternSyntaxException=new PatternSyntaxException(checkRegularNullParameter[i]+"函数不能有参数",formula,eidx); + throw patternSyntaxException; + } + }else { + + } + } + } + + private static void checkOperatorNullParam(String formula){ + formula=formula.trim(); + JSONObject errorJson=new JSONObject(); + Map operMap=new HashMap<>(); + + for (int i=0;i="); + } + + +} diff --git a/src/com/engine/salary/formlua/util/IgnoreFilter.java b/src/com/engine/salary/formlua/util/IgnoreFilter.java new file mode 100644 index 000000000..a5ab03f14 --- /dev/null +++ b/src/com/engine/salary/formlua/util/IgnoreFilter.java @@ -0,0 +1,21 @@ +package com.engine.salary.formlua.util; + +import java.util.LinkedList; +import java.util.List; + + +public class IgnoreFilter { + private static List list=new LinkedList(); + public static boolean contains(String key){ + list.add("formId"); + return list.contains(key); + } + public static boolean containsFixedKey(String key){ + list.add("operators"); + list.add("names"); + list.add("createTimes"); + list.add("types"); + list.add("datastatus"); + return list.contains(key); + } +} diff --git a/src/com/engine/salary/formlua/util/IgnoreParamFilter.java b/src/com/engine/salary/formlua/util/IgnoreParamFilter.java new file mode 100644 index 000000000..31f670347 --- /dev/null +++ b/src/com/engine/salary/formlua/util/IgnoreParamFilter.java @@ -0,0 +1,769 @@ +package com.engine.salary.formlua.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.salary.formlua.core.exception.ErrorType; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.entity.parameter.FormulaContext; +import com.engine.salary.formlua.entity.parameter.FuncNames; +import com.weaver.esb.server.enums.ParamType; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; + + +public class IgnoreParamFilter { + protected static final Logger logger = LoggerFactory.getLogger(IgnoreParamFilter.class); + private static JSONObject errorJson = null; + private static String[] dateFuncs = new String[]{"YEAR", "MONTH", "DAY", "HOUR", "MINUTE", "SECOND"}; + private static String[] numberOperArray = new String[]{">", "<", ">=", "<="}; + + public static void main(String[] args) throws Exception { + DataType dataType = new DataType(); + dataType.setDataType(DataType.NUMBER); + dataType.setContent(0.0); +// DataType dataType2=new DataType(); +// dataType2.setDataType(DataType.STRING); +// DataType dataType3=new DataType(); +// dataType3.setDataType(DataType.STRING); + + filterCompareFunc("", 0.5); + } + + /** + * 判断是人员参数 + * + * @param object + * @return + */ + public static boolean isEmployee(Object object) { + logger.info("校验人员参数" + JSON.toJSONString(object)); +// if (object instanceof DataType) { +// DataType dataType = (DataType) object; +// if (dataType.getComponentKey() != null && dataType.getComponentKey().equalsIgnoreCase(ComponentType.Employee.toString())) { +// return true; +// } +// } + return false; + } + + /** + * 通用的校验参数类型一致的方法 + * + * @param objects + * @return + */ + public static boolean checkType(Object... objects) { + if (objects == null || objects.length == 0) { + return true; + } + Map typeCheckMap = new HashMap<>(); + int i; + for (i = 0; i < objects.length; i++) { + Object obj = objects[i]; + if (obj instanceof DataType) { + DataType dataType = (DataType) obj; + if (StringUtils.isNotEmpty(dataType.getDataType())) { + typeCheckMap.put(DataType.returnType(dataType.getDataType()).toLowerCase(), obj); + } else if (StringUtils.isNotEmpty(dataType.getComponentKey())) { + typeCheckMap.put(DataType.returnType(dataType.getComponentKey()).toLowerCase(), obj); + } + } else { + String localtype = obj.getClass().getName(); + typeCheckMap.put(DataType.returnType(ExcelParamUtil.getParamType(localtype).toLowerCase()), obj); + } + } + if (typeCheckMap.keySet().size() > 1) { + return false; + } else { + return true; + } + } + + /** + * 校验参数是否统一了类型 + * + * @param objects + * @return + */ + public static boolean commonCheckParamsType(Object... objects) { + if (objects == null || objects.length == 0) { + return false; + } + String type = null; + String objFunc = objects[objects.length - 1].toString(); + for (int i = 0; i < objects.length - 1; i++) { + Object obj = objects[i]; + + String loopType = ExcelParamUtil.getParamType(obj); + if (type == null) { + type = loopType; + } else { + if (!type.equalsIgnoreCase(loopType)) { + return false; + } + } + } + return true; + } + + public static void filterParams(String func, int min, int max, Object... objects) { + Integer number = getSetFuncNumber(func); + if (null == objects) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数参数为空"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (objects.length < min) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数至少需要" + min + "个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (max > 0 && objects.length > max) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数最多允许" + max + "个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + public static void filterDateParamTypes(String func, int funcNumber, Class[] typeClasses, Object... objects) { + Integer number = funcNumber; + if (null == objects || null == typeClasses || objects.length == 0 || typeClasses.length == 0 || objects.length > typeClasses.length) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + /** + * 通用验证方法 + * + * @param func + * @param min + * @param max + * @param typeClasses + * @param objects + */ + public static void commonFilter(String func, int min, int max, Class[] typeClasses, Object... objects) { + Integer number = getSetFuncNumber(func); + if (null == objects) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数参数为空"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (objects.length < min) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数至少需要" + min + "个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (max > 0 && objects.length > max) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数最多允许" + max + "个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (typeClasses != null && typeClasses.length > 0) { + if (null == objects || objects.length == 0 || typeClasses.length == 0 || objects.length > typeClasses.length) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + for (int i = 0; i < objects.length; i++) { + String fieldType = null; + String paramType = ExcelParamUtil.getParamType(typeClasses[i].getName()); + paramType = ExcelParamUtil.checkParamType(paramType); + if (objects[i] instanceof DataType) { + DataType dataType = (DataType) objects[i]; + List datafunclist = Arrays.asList(dateFuncs); + if (datafunclist.contains(func)) { + fieldType = dataType.getDataType(); + } else { + fieldType = ExcelParamUtil.checkParamType(dataType.getDataType()); + } + } else { + fieldType = ExcelParamUtil.getParamType(objects[i].getClass().getName()); + fieldType = ExcelParamUtil.checkParamType(fieldType); + } + if (null == fieldType) { + errorJson = ErrorUtil.buildError(func, i + 1, number, func + "函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + boolean compareResult = false; + if (paramType.equals("dateandstring") && (fieldType.toLowerCase().equals("string") || fieldType.toLowerCase().equals("date"))) { + compareResult = true; + } else if (paramType.toLowerCase().equals(fieldType.toLowerCase())) { + compareResult = true; + } else if (ExcelParamUtil.inNumber(paramType) && ExcelParamUtil.inNumber(fieldType)) { + compareResult = true; + } else { + if (!compareResult) { + errorJson = ErrorUtil.buildError(func, (i + 1), number, func + "函数参数类型错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + } + } + + } + + + /** + * 过滤字符串函数参数 + * + * @param objects + */ + public static void filterStringConcat(int min, int max, Object... objects) { + + Integer number = getSetFuncNumber(FuncNames.CONCAT.toString()); + String func = FuncNames.CONCAT.toString(); + if (objects.length < min) { + errorJson = ErrorUtil.buildError(func, number, number, "CONCAT函数至少需要" + min + "个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (max > 0 && objects.length > max) { + errorJson = ErrorUtil.buildError(func, number, number, "CONCAT函数最多允许" + min + "个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + + /** + * 过滤聚合函数参数 + * + * @param objects + * @throws RuntimeException + */ + public static void filterAggFunc(String func, Object... objects) throws RuntimeException { + logger.info("聚合参数:" + JSON.toJSONString(objects)); + Integer number = getSetFuncNumber(func); + Map map = new HashMap<>(); + boolean mustNumber = false; + if (objects == null) { + errorJson = ErrorUtil.buildError(func, number, number, func + ErrorType.VAR_TYPE_WRONG.name()); + throw new RuntimeException(errorJson.getString("msg")); + } + if (objects.length > 2) { + errorJson = ErrorUtil.buildError(func, number, number, func + "函数最多只支持两个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + checkArrayParamNull(func, number, objects); + Object obj = objects[0]; + if (func.equals("MAX") || func.equals("MIN") || func.equals("AVG") || func.equals("SUM")) { + mustNumber = true; + } + if (!(obj instanceof DataType)) { + number = getSetFuncNumber(obj.toString()); + errorJson = ErrorUtil.buildError(obj.toString(), number, number, func + "函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + String paramType = ""; + DataType dataType = (DataType) objects[0]; + if (dataType.getFormId() == null && dataType.getFieldId() == null) { + number = getSetFuncNumber(obj.toString()); + errorJson = ErrorUtil.buildError(obj.toString(), number, number, func + "函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + + //除了 + if (mustNumber) { + if (objects[0] instanceof DataType && dataType.getDataType() != null) { + paramType = ExcelParamUtil.checkParamType(dataType.getDataType()); + if (paramType != null) { + paramType = ExcelParamUtil.checkParamType(paramType); + } + } else { + errorJson = ErrorUtil.buildError(func, number, number, func + "函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (paramType == null || !(paramType.equals(DataType.NUMBER))) { + errorJson = ErrorUtil.buildError(func, number, number, func + "第一个变量必须为数字字段"); + throw new RuntimeException(errorJson.getString("msg")); + } + } else { + if (dataType.getFormId() == null) { + errorJson = ErrorUtil.buildError(func, number, number, func + "第一个变量必须为表格"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + for (int i = 0; i < objects.length; i++) { + Object param = objects[i]; + if (param != null && param instanceof DataType) { + DataType pramDataType = (DataType) param; + if (pramDataType.getSubLogic() != null && pramDataType.getSubLogic().size() > 1) { + throw new RuntimeException(func + "函数的参数不能嵌套使用逻辑函数(AND、OR)"); + } + } + } + + } + + public static void filterInFunc(Object... objects) { + String oper = objects[objects.length - 1].toString(); + Integer number = getSetFuncNumber(oper); + List params = (List) objects[0]; + if (params.size() < 2) { + errorJson = ErrorUtil.buildError(oper, number, number, "IN操作符第二个条件至少需要两个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + String type = null; + for (Object object : params) { + String thisType; + if (object instanceof DataType) { + thisType = ((DataType) object).getDataType(); + if (type == null) { + type = thisType; + } else { + if (!thisType.equals(type)) { + errorJson = ErrorUtil.buildError(oper, number, number, "IN操作符参数类型不一致"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + } + } + } + + /*** + * 过滤比较操作符的参数类型 + * @param objects + */ + public static void filterCompareFunc(Object... objects) throws Exception { + String oper = objects[objects.length - 1].toString(); + Integer number = getSetFuncNumber(oper); + String type1 = ""; + String type2 = ""; + + for (int i = 0; i < objects.length; i++) { + Object object = objects[i]; + if (object == null) { + throw new RuntimeException("[" + oper + "]" + ErrorType.VAR_NOT_NULL.name()); + } + } + if (objects.length < 2) { + throw new RuntimeException("[" + oper + "]" + ErrorType.VAR_NOT_NULL.name()); + } + boolean isDate = false; + for (int i = 0; i < objects.length - 1; i++) { + + Object object = objects[i]; + if (object == null) { + throw new RuntimeException("[" + oper + "]" + ErrorType.VAR_NOT_NULL.name()); + } + String typeName = ""; + + if (object instanceof DataType) { + DataType param = (DataType) object; + typeName = param.getDataType(); + if (typeName.equalsIgnoreCase(DataType.FORM)) { + throw new RuntimeException("[" + oper + "]" + ErrorType.CANT_FORM_FIELD.name()); + } + + if (!typeName.toLowerCase().equals("option")) { + typeName = ExcelParamUtil.checkParamType(typeName.toLowerCase()); + } + if (typeName.toLowerCase().equals(DataType.DATE.toLowerCase())) { + typeName = DataType.STRING; + isDate = true; + } + } else { + //校验比较操作符中的数组是不是为空 + if (object instanceof Object[]) { + Object[] arrayP = (Object[]) object; + if (arrayP.length == 0) { + throw new RuntimeException("[" + oper + "]" + ErrorType.VAR_NOT_NULL.name()); + } + if (arrayP[0] instanceof DataType) { + DataType arrayParamOne = (DataType) arrayP[0]; + typeName = arrayParamOne.getDataType(); + } else { + typeName = ExcelParamUtil.getParamType(arrayP[0].getClass().getName()); + } + } else { + typeName = ExcelParamUtil.getParamType(object.getClass().getName()); + + } + if (!typeName.equalsIgnoreCase("option")) { + typeName = ExcelParamUtil.checkParamType(typeName); + } + } + //判断非等于和不等于操作符的两端参数是否为数字,不是数字返回错误 + if (!isDate && !oper.equals("=") && !oper.equals("!=") && (typeName.toLowerCase().equals(DataType.OPTION))) { + errorJson = ErrorUtil.buildError(oper, 1, number, "比较操作符'" + oper + "'不支持选项类型的运算"); + throw new RuntimeException(errorJson.getString("msg")); + } + + + if (i == 0) { + type1 = typeName; + } else { + type2 = typeName; + } + } + List operList = Arrays.asList(numberOperArray); + if (operList.contains(oper) && (type1.equalsIgnoreCase("string") || type2.equalsIgnoreCase("string"))) { + String msg = "[" + oper + "]操作符不允许非数字类型参数"; + throw new RuntimeException(msg); + } + if (!IgnoreParamFilter.checkType(objects[0], objects[1])) { + errorJson = ErrorUtil.buildError(oper, 1, number, "比较操作符参数类型不一致"); + throw new RuntimeException(errorJson.getString("msg")); + } + + if (objects[0] instanceof Object[]) { + errorJson = ErrorUtil.buildError(oper, 1, number, "比较操作符不支持数组参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + /** + * 过滤日期函数参数 + * + * @param objects + * @throws Exception + */ + public static void filterDateFunc(Object... objects) throws Exception { + Integer number = getSetFuncNumber(""); + boolean isWrong = false; + if (objects.length < 2) { + errorJson = ErrorUtil.buildError("Date", 0, number, "日期函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + int idx = 1; + for (Object object : objects) { + + if (!(object instanceof String) && !(object instanceof Date) && !(object instanceof DataType)) { + isWrong = true; + break; + + } else if (object instanceof DataType) { + Object content; + DataType dataType = (DataType) object; + content = dataType.getContent(); + if (!(content instanceof String) && !(content instanceof Date) && !(content instanceof DataType)) { + isWrong = true; + break; + } + } + idx++; + } + if (isWrong) { + errorJson = ErrorUtil.buildDataError("Date", idx, objects, "日期函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + + } + + + /** + * 逻辑函数过滤器 + * + * @param objects + */ + public static void filterLogicAndORFunc(Object... objects) { + String method = objects[objects.length - 1].toString(); + FormulaContext.get().setValue(method); + Object[] paramArray = (Object[]) objects[0]; + Integer number = getSetFuncNumber(method); + if (null == paramArray || paramArray.length == 0) { + errorJson = ErrorUtil.buildError(method, 0, number, method + "函数参数不能为空"); + throw new RuntimeException(errorJson.getString("msg")); + } + for (int i = 0; i < paramArray.length; i++) { + String fieldType = null; + if (paramArray[i] instanceof DataType) { + DataType dataType = (DataType) paramArray[i]; + fieldType = dataType.getDataType(); + } else { + fieldType = ExcelParamUtil.getParamType(paramArray[i].getClass().getName()); + } + fieldType = ExcelParamUtil.checkParamType(fieldType); + if (!fieldType.equalsIgnoreCase(ParamType.BOOLEAN.getValue())) { + errorJson = ErrorUtil.buildError(method, (i + 1), number, method + "函数第" + (i + 1) + "个条件必须为真假值"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + } + + /** + * 判断IF函数的参数合法性 + * + * @param objects + */ + public static void filterIfFunc(Object... objects) { + Integer number = getSetFuncNumber("IF"); + String cndType = ""; + if (objects[0] instanceof DataType) { + DataType dataType = (DataType) objects[0]; + cndType = dataType.getDataType(); + } else { + cndType = ExcelParamUtil.getParamType(objects[0].getClass().getName()); + } + cndType = ExcelParamUtil.checkParamType(cndType); + if (null == cndType || !cndType.equals(ParamType.BOOLEAN.getValue())) { + errorJson = ErrorUtil.buildError("If", 0, number, "IF函数条件应为真假值类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + + String pType1 = ""; + String pType2 = ""; + if (objects[1] instanceof DataType) { + DataType dataType = (DataType) objects[1]; + pType1 = dataType.getDataType(); + } else { + pType1 = ExcelParamUtil.getParamType(objects[1].getClass().getName()); + } + pType1 = ExcelParamUtil.checkParamType(pType1); + if (objects[2] instanceof DataType) { + DataType dataType = (DataType) objects[2]; + pType2 = dataType.getDataType(); + } else { + pType2 = ExcelParamUtil.getParamType(objects[2].getClass().getName()); + } + pType2 = ExcelParamUtil.checkParamType(pType2); + if (!pType1.equals(pType2)) { + errorJson = ErrorUtil.buildError("If", 0, number, "IF函数表达式返回值不一致"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + public static void filterLikeFunc(Object... objects) { + Integer number = getSetFuncNumber("LIKE"); + String sourceTxt = ""; + List params = new ArrayList() { + }; + if (objects.length < 2) { + errorJson = ErrorUtil.buildError("LIKE", 0, number, "LIKE函数至少需要两个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } else if (objects.length > 2) { + errorJson = ErrorUtil.buildError("LIKE", 0, number, "LIKE函数最多支持两个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + for (Object obj : objects) { + if (obj.getClass().isArray()) { + Object[] subArray = (Object[]) obj; + for (int i = 0; i < subArray.length; i++) { + params.add(subArray[i]); + } + } else { + params.add(obj); + } + } + Object object = params.get(0); + if (object instanceof DataType) { + DataType dataType = (DataType) object; + sourceTxt = dataType.getDataType(); + } else { + sourceTxt = ExcelParamUtil.getParamType(object.getClass().getName()); + } + sourceTxt = ExcelParamUtil.checkParamType(sourceTxt); + if (null == sourceTxt || !sourceTxt.toLowerCase().equals(ParamType.STRING.getValue().toLowerCase())) { + String key = ExcelParamUtil.getKeyString(object); + number = getSetFuncNumber(key); + errorJson = ErrorUtil.buildError(key, 0, number, "LIKE函数第1个参数应该为文本类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + + for (int i = 0; i < params.size(); i++) { + Object txtObj = params.get(i); + if (null == txtObj) { + errorJson = ErrorUtil.buildError("LIKE", (i + 1), number, "LIKE函数条件错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + String txt = ""; + if (txtObj instanceof DataType) { + DataType dataType = (DataType) txtObj; + txt = dataType.getDataType(); + } else { + txt = ExcelParamUtil.getParamType(txtObj.getClass().getName()); + } + txt = ExcelParamUtil.checkParamType(txt); + if (!txt.toLowerCase().equals(ExcelParamUtil.getParamType(ParamType.STRING.getValue().toLowerCase()))) { + errorJson = ErrorUtil.buildError("LIKE", (i + 1), number, "LIKE函数条件数组第" + (i + 1) + "个参数应该为文本类型"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + } + + + public static int getSetFuncNumber(String func) { + Integer number = 0; + FormulaContext.get().getValue(func); + if (number == null || number == 0) { + FormulaContext.get().setValue(func); + number = FormulaContext.get().getValue(func); + } else { + FormulaContext.get().setValue(func); + number = FormulaContext.get().getValue(func); + } + return number; + } + + public static void checkArrayParamNull(String func, int number, Object[] objects) { + for (Object object : objects) { + if (object == null) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数条件存在未知参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + } + + /** + * 校验数学加减乘除运算符号 + * + * @param objects + * @param oper + */ + public static void checkNumberOper(Object[] objects, String oper) { + Integer number = getSetFuncNumber(""); + if (objects.length != 2) { + errorJson = ErrorUtil.buildError(oper, 1, number, "操作符只支持数字类型的运算"); + throw new RuntimeException(errorJson.getString("msg")); + } + String type1 = ""; + String type2 = ""; + for (int i = 0; i < objects.length; i++) { + + Object object = objects[i]; + if (object == null) { + errorJson = ErrorUtil.buildError(oper, 1, number, "[" + oper + "]" + "操作符参数不能为空"); + throw new RuntimeException(errorJson.getString("msg")); + } + String typeName = ""; + + if (object instanceof DataType) { + DataType param = (DataType) object; + if (param.getContent() == null) { + param.setContent(0);//没有值时给0,保存函数运算结果 + } + if (param.getName() != null && param.getName().equals("当前表格")) { + errorJson = ErrorUtil.buildError(oper, 1, number, "[" + oper + "]" + "操作符参数不能为空"); + throw new RuntimeException(errorJson.getString("msg")); + } + typeName = param.getDataType(); + if (!typeName.toLowerCase().equals("option")) { + typeName = ExcelParamUtil.checkParamType(typeName.toLowerCase()); + } + if (typeName.toLowerCase().equals(DataType.DATE.toLowerCase())) { + typeName = DataType.STRING; + } + } else if (object instanceof Date) { + typeName = "string"; + //当参数为数组时 + } else if (object instanceof Object[]) { + Object[] objArray = (Object[]) object; + String arrayType = null; + for (Object obj : objArray) { + String localType = null; + if (obj instanceof DataType) { + localType = ExcelParamUtil.getParamType(obj); + localType = ExcelParamUtil.checkParamType(localType); + } else { + localType = ExcelParamUtil.getParamType(obj.getClass().getName()).toLowerCase(); + localType = ExcelParamUtil.checkParamType(localType); + } + if (arrayType == null) { + arrayType = localType; + } else { + if (!arrayType.equals(localType)) { + errorJson = ErrorUtil.buildError(oper, 1, number, "操作符参数类型不一致"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + } + typeName = arrayType; + } else { + typeName = ExcelParamUtil.getParamType(object.getClass().getName()); + typeName = ExcelParamUtil.checkParamType(typeName); + } + //判断非等于和不等于操作符的两端参数是否为数字,不是数字返回错误 + if (!typeName.toLowerCase().equals(DataType.NUMBER)) { + errorJson = ErrorUtil.buildError(oper, 1, number, "操作符只支持数字类型的运算"); + throw new RuntimeException(errorJson.getString("msg")); + } + + if (i == 0) { + type1 = typeName; + } else { + type2 = typeName; + } + } + if (!type1.toLowerCase().equals(type2.toLowerCase()) || type1.equals("") || type2.equals("")) { + errorJson = ErrorUtil.buildError(oper, 1, number, "操作符参数类型不一致"); + throw new RuntimeException(errorJson.getString("msg")); + } + + } + + /** + * 校验分数取值函数 + * + * @param func + * @param objects + */ + public static void checkFraction(String func, Object... objects) { + Integer number = getSetFuncNumber(func); + if (objects == null || objects.length == 0) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数参数为空"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (objects.length > 1) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数参数错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + Object object = objects[0]; + if (object instanceof DataType) { + DataType dataType = (DataType) object; + if (null == dataType.getScore()) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数参数类型错误"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + + } + + public static void checkValiIdCard(String func, Object... objects) { + Integer number = getSetFuncNumber(func); + if (objects == null || objects.length == 0) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数参数为空"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (objects.length != 2) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数只允许两个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + if (objects[0] instanceof DataType) { + DataType dataType = (DataType) objects[0]; + if (dataType.getDataType().equalsIgnoreCase(DataType.OPTION) || dataType.getDataType().equalsIgnoreCase(DataType.DATE)) { + errorJson = ErrorUtil.buildError(func, 0, number, func + "函数只允许操作数字或字符"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + } + + /** + * 校验参数类型 + * + * @param paramArray + * @param exclDataTypeList + * @return + */ + public static List checkParamType(Object[] paramArray, List exclDataTypeList) { + List errorIdxList = new ArrayList(); + if (paramArray != null && paramArray.length != 0) { + for (int i = 0; i < paramArray.length; i++) { + Object object = paramArray[i]; + if (object instanceof DataType) { + DataType paramDataType = (DataType) object; + if (paramDataType.getDataType() != null && !paramDataType.getDataType().equalsIgnoreCase(exclDataTypeList.get(i))) { + errorIdxList.add(i); + return errorIdxList; + } + } else { + String typeString = ExcelParamUtil.getParamType(object.getClass().getName()); + typeString = DataType.returnType(typeString); + if (!typeString.equalsIgnoreCase(exclDataTypeList.get(0))) { + errorIdxList.add(i); + return errorIdxList; + } + } + } + } + return errorIdxList; + } + + +} diff --git a/src/com/engine/salary/formlua/util/NativePlace.java b/src/com/engine/salary/formlua/util/NativePlace.java new file mode 100644 index 000000000..94aa01640 --- /dev/null +++ b/src/com/engine/salary/formlua/util/NativePlace.java @@ -0,0 +1,7162 @@ +package com.engine.salary.formlua.util; + +import org.apache.commons.lang.StringUtils; + +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class NativePlace { + + public static void main(String args[]){ + Map placeMap=getAddressInfo("湖南省长沙市雨花区蔡锷路103号"); + } + /** + * 解析地址 + * @param address + * @return + */ + public static Map getAddressInfo(String address) { + //1级 省 直辖市 自治区 2级 市 自治州 地区 3级:区县市旗 + String province = null, city = null, provinceAndCity = null, town = null ,addr=null; + Map row = new LinkedHashMap<>(); + List> table = new ArrayList<>(); + Map resultMap = new HashMap<>(4); + + //不解析香港、澳门、台湾,这些特别行政地区过于特殊 + if (address.startsWith("香港")) { + resultMap.put("province","香港"); + return resultMap; + } else if (address.contains("澳门")) { + resultMap.put("province","澳门"); + return resultMap; + } else if (address.contains("台湾")) { + resultMap.put("province","台湾"); + return resultMap; + } else { + //普通地址,先将省市匹配出来,用户输入的时候必须要有至少两个级别的行政单位 + String regex = "((?[^市]+市|.*?自治州|.*?区|.*县)(?[^区]+区|.*?市|.*?县|.*?路|.*?街|.*?道|.*?镇|.*?旗)(?.*))"; + Matcher m = Pattern.compile(regex).matcher(address); + //匹配出省市后再拆分出省自治区直辖市,上面的正则先从整体角度匹配,确保地址的基本信息正确, + //拆分省市的时候,只要匹配到了省、直辖市、自治区,那么剩下的全部视为二级行政单位名称 + // 拆分的时候如果没有省级行政单位,那就只返回一个区 + while (m.find()) { + provinceAndCity = m.group("provinceAndCity"); + String regex2 = "((?[^省]+省|.+自治区|上海市|北京市|天津市|重庆市|上海|北京|天津|重庆)(?.*))"; + Matcher m2 = Pattern.compile(regex2).matcher(provinceAndCity); + while (m2.find()) { + province = m2.group("province"); + row.put("province", province == null ? "" : province.trim()); + city = m2.group("city"); + row.put("city", city == null ? "" : city.trim()); + } + town = m.group("town"); + addr = m.group("detailAddress"); + row.put("town", town == null ? "" : town.trim()); + row.put("addr",addr == null ? "" :addr.trim()); + table.add(row); + } + } + //对直辖市自治区做二次调整,提取名称,直辖市的二级行政单位和一级名称保持一致,自治区去掉后面的自治区后缀 + if (table != null && table.size() > 0) { + if (StringUtils.isNotBlank(table.get(0).get("province"))) { + province = table.get(0).get("province"); + //如果用户输入的是自治区,对自治区进行处理,自治区的一共五个,一个西藏两个名字,其他的是四个或者3个名字,这里截取后会存在多一个字符的情况,后面会接着处理 + if (province.contains("自治区")) { + if (province.contains("内蒙古")) { + province = province.substring(0,4); + } else { + province = province.substring(0,3); + } + + } + } + if (StringUtils.isNotBlank(province)) { + //直辖市的二级行政单位也是自己 + if (StringUtils.isNotBlank(table.get(0).get("city"))) { + city = table.get(0).get("city"); + if (city.equals("上海市") || city.equals("重庆市") || city.equals("北京市") || city.equals("天津市")) { + province = table.get(0).get("city"); + } + } + + else if (province.equals("上海市") || province.equals("重庆市") || province.equals("北京市") || province.equals("天津市")) { + city = province; + } + //所有直辖市、自治区,名称去掉行政单位(区、市) + if (StringUtils.isNotBlank(table.get(0).get("town"))) { + town = table.get(0).get("town"); + } + //对提取名称多出一个字的情况做处理,直辖市的去掉"市" + province = province.substring(0,province.length() - 1); + + } + + } else { + return resultMap; + } + resultMap.put("province",province); + resultMap.put("city",city); + resultMap.put("town",town); + resultMap.put("addr",addr); + return resultMap; + } + + + + + + public static String getNativePlace(int nativePlaceCode) { + int shengCode = nativePlaceCode / 10000; + int shiCode = nativePlaceCode / 100; + int quxianCode = nativePlaceCode; + String sheng = getNameString(shengCode); + String shi = getNameString(shiCode); + String quxian = getNameString(quxianCode); + String nativePlace = ""; + if (sheng != null) { + nativePlace += sheng; + } + if (shi != null) { + nativePlace += shi; + } + if (quxian != null) { + nativePlace += quxian; + } + return sheng; + } + + private static String getNameString(int code) { + switch (code) { + case 11: + return "北京市"; + case 1101: + return "市辖区"; + case 110101: + return "东城区"; + case 110102: + return "西城区"; + case 110105: + return "朝阳区"; + case 110106: + return "丰台区"; + case 110107: + return "石景山区"; + case 110108: + return "海淀区"; + case 110109: + return "门头沟区"; + case 110111: + return "房山区"; + case 110112: + return "通州区"; + case 110113: + return "顺义区"; + case 110114: + return "昌平区"; + case 110115: + return "大兴区"; + case 110116: + return "怀柔区"; + case 110117: + return "平谷区"; + case 1102: + return "县"; + case 110228: + return "密云县"; + case 110229: + return "延庆县"; + case 12: + return "天津市"; + case 1201: + return "市辖区"; + case 120101: + return "和平区"; + case 120102: + return "河东区"; + case 120103: + return "河西区"; + case 120104: + return "南开区"; + case 120105: + return "河北区"; + case 120106: + return "红桥区"; + case 120110: + return "东丽区"; + case 120111: + return "西青区"; + case 120112: + return "津南区"; + case 120113: + return "北辰区"; + case 120114: + return "武清区"; + case 120115: + return "宝坻区"; + case 120116: + return "滨海新区"; + case 1202: + return "县"; + case 120221: + return "宁河县"; + case 120223: + return "静海县"; + case 120225: + return "蓟县"; + case 13: + return "河北省"; + case 1301: + return "石家庄市"; + case 130101: + return "市辖区"; + case 130102: + return "长安区"; + case 130104: + return "桥西区"; + case 130105: + return "新华区"; + case 130107: + return "井陉矿区"; + case 130108: + return "裕华区"; + case 130109: + return "藁城区"; + case 130110: + return "鹿泉区"; + case 130111: + return "栾城区"; + case 130121: + return "井陉县"; + case 130123: + return "正定县"; + case 130125: + return "行唐县"; + case 130126: + return "灵寿县"; + case 130127: + return "高邑县"; + case 130128: + return "深泽县"; + case 130129: + return "赞皇县"; + case 130130: + return "无极县"; + case 130131: + return "平山县"; + case 130132: + return "元氏县"; + case 130133: + return "赵县"; + case 130183: + return "晋州市"; + case 130184: + return "新乐市"; + case 1302: + return "唐山市"; + case 130201: + return "市辖区"; + case 130202: + return "路南区"; + case 130203: + return "路北区"; + case 130204: + return "古冶区"; + case 130205: + return "开平区"; + case 130207: + return "丰南区"; + case 130208: + return "丰润区"; + case 130209: + return "曹妃甸区"; + case 130223: + return "滦县"; + case 130224: + return "滦南县"; + case 130225: + return "乐亭县"; + case 130227: + return "迁西县"; + case 130229: + return "玉田县"; + case 130281: + return "遵化市"; + case 130283: + return "迁安市"; + case 1303: + return "秦皇岛市"; + case 130301: + return "市辖区"; + case 130302: + return "海港区"; + case 130303: + return "山海关区"; + case 130304: + return "北戴河区"; + case 130321: + return "青龙满族自治县"; + case 130322: + return "昌黎县"; + case 130323: + return "抚宁县"; + case 130324: + return "卢龙县"; + case 1304: + return "邯郸市"; + case 130401: + return "市辖区"; + case 130402: + return "邯山区"; + case 130403: + return "丛台区"; + case 130404: + return "复兴区"; + case 130406: + return "峰峰矿区"; + case 130421: + return "邯郸县"; + case 130423: + return "临漳县"; + case 130424: + return "成安县"; + case 130425: + return "大名县"; + case 130426: + return "涉县"; + case 130427: + return "磁县"; + case 130428: + return "肥乡县"; + case 130429: + return "永年县"; + case 130430: + return "邱县"; + case 130431: + return "鸡泽县"; + case 130432: + return "广平县"; + case 130433: + return "馆陶县"; + case 130434: + return "魏县"; + case 130435: + return "曲周县"; + case 130481: + return "武安市"; + case 1305: + return "邢台市"; + case 130501: + return "市辖区"; + case 130502: + return "桥东区"; + case 130503: + return "桥西区"; + case 130521: + return "邢台县"; + case 130522: + return "临城县"; + case 130523: + return "内丘县"; + case 130524: + return "柏乡县"; + case 130525: + return "隆尧县"; + case 130526: + return "任县"; + case 130527: + return "南和县"; + case 130528: + return "宁晋县"; + case 130529: + return "巨鹿县"; + case 130530: + return "新河县"; + case 130531: + return "广宗县"; + case 130532: + return "平乡县"; + case 130533: + return "威县"; + case 130534: + return "清河县"; + case 130535: + return "临西县"; + case 130581: + return "南宫市"; + case 130582: + return "沙河市"; + case 1306: + return "保定市"; + case 130601: + return "市辖区"; + case 130602: + return "新市区"; + case 130603: + return "北市区"; + case 130604: + return "南市区"; + case 130621: + return "满城县"; + case 130622: + return "清苑县"; + case 130623: + return "涞水县"; + case 130624: + return "阜平县"; + case 130625: + return "徐水县"; + case 130626: + return "定兴县"; + case 130627: + return "唐县"; + case 130628: + return "高阳县"; + case 130629: + return "容城县"; + case 130630: + return "涞源县"; + case 130631: + return "望都县"; + case 130632: + return "安新县"; + case 130633: + return "易县"; + case 130634: + return "曲阳县"; + case 130635: + return "蠡县"; + case 130636: + return "顺平县"; + case 130637: + return "博野县"; + case 130638: + return "雄县"; + case 130681: + return "涿州市"; + case 130683: + return "安国市"; + case 130684: + return "高碑店市"; + case 1307: + return "张家口市"; + case 130701: + return "市辖区"; + case 130702: + return "桥东区"; + case 130703: + return "桥西区"; + case 130705: + return "宣化区"; + case 130706: + return "下花园区"; + case 130721: + return "宣化县"; + case 130722: + return "张北县"; + case 130723: + return "康保县"; + case 130724: + return "沽源县"; + case 130725: + return "尚义县"; + case 130726: + return "蔚县"; + case 130727: + return "阳原县"; + case 130728: + return "怀安县"; + case 130729: + return "万全县"; + case 130730: + return "怀来县"; + case 130731: + return "涿鹿县"; + case 130732: + return "赤城县"; + case 130733: + return "崇礼县"; + case 1308: + return "承德市"; + case 130801: + return "市辖区"; + case 130802: + return "双桥区"; + case 130803: + return "双滦区"; + case 130804: + return "鹰手营子矿区"; + case 130821: + return "承德县"; + case 130822: + return "兴隆县"; + case 130823: + return "平泉县"; + case 130824: + return "滦平县"; + case 130825: + return "隆化县"; + case 130826: + return "丰宁满族自治县"; + case 130827: + return "宽城满族自治县"; + case 130828: + return "围场满族蒙古族自治县"; + case 1309: + return "沧州市"; + case 130901: + return "市辖区"; + case 130902: + return "新华区"; + case 130903: + return "运河区"; + case 130921: + return "沧县"; + case 130922: + return "青县"; + case 130923: + return "东光县"; + case 130924: + return "海兴县"; + case 130925: + return "盐山县"; + case 130926: + return "肃宁县"; + case 130927: + return "南皮县"; + case 130928: + return "吴桥县"; + case 130929: + return "献县"; + case 130930: + return "孟村回族自治县"; + case 130981: + return "泊头市"; + case 130982: + return "任丘市"; + case 130983: + return "黄骅市"; + case 130984: + return "河间市"; + case 1310: + return "廊坊市"; + case 131001: + return "市辖区"; + case 131002: + return "安次区"; + case 131003: + return "广阳区"; + case 131022: + return "固安县"; + case 131023: + return "永清县"; + case 131024: + return "香河县"; + case 131025: + return "大城县"; + case 131026: + return "文安县"; + case 131028: + return "大厂回族自治县"; + case 131081: + return "霸州市"; + case 131082: + return "三河市"; + case 1311: + return "衡水市"; + case 131101: + return "市辖区"; + case 131102: + return "桃城区"; + case 131121: + return "枣强县"; + case 131122: + return "武邑县"; + case 131123: + return "武强县"; + case 131124: + return "饶阳县"; + case 131125: + return "安平县"; + case 131126: + return "故城县"; + case 131127: + return "景县"; + case 131128: + return "阜城县"; + case 131181: + return "冀州市"; + case 131182: + return "深州市"; + case 1390: + return "省直辖县级行政区划"; + case 139001: + return "定州市"; + case 139002: + return "辛集市"; + case 14: + return "山西省"; + case 1401: + return "太原市"; + case 140101: + return "市辖区"; + case 140105: + return "小店区"; + case 140106: + return "迎泽区"; + case 140107: + return "杏花岭区"; + case 140108: + return "尖草坪区"; + case 140109: + return "万柏林区"; + case 140110: + return "晋源区"; + case 140121: + return "清徐县"; + case 140122: + return "阳曲县"; + case 140123: + return "娄烦县"; + case 140181: + return "古交市"; + case 1402: + return "大同市"; + case 140201: + return "市辖区"; + case 140202: + return "城区"; + case 140203: + return "矿区"; + case 140211: + return "南郊区"; + case 140212: + return "新荣区"; + case 140221: + return "阳高县"; + case 140222: + return "天镇县"; + case 140223: + return "广灵县"; + case 140224: + return "灵丘县"; + case 140225: + return "浑源县"; + case 140226: + return "左云县"; + case 140227: + return "大同县"; + case 1403: + return "阳泉市"; + case 140301: + return "市辖区"; + case 140302: + return "城区"; + case 140303: + return "矿区"; + case 140311: + return "郊区"; + case 140321: + return "平定县"; + case 140322: + return "盂县"; + case 1404: + return "长治市"; + case 140401: + return "市辖区"; + case 140402: + return "城区"; + case 140411: + return "郊区"; + case 140421: + return "长治县"; + case 140423: + return "襄垣县"; + case 140424: + return "屯留县"; + case 140425: + return "平顺县"; + case 140426: + return "黎城县"; + case 140427: + return "壶关县"; + case 140428: + return "长子县"; + case 140429: + return "武乡县"; + case 140430: + return "沁县"; + case 140431: + return "沁源县"; + case 140481: + return "潞城市"; + case 1405: + return "晋城市"; + case 140501: + return "市辖区"; + case 140502: + return "城区"; + case 140521: + return "沁水县"; + case 140522: + return "阳城县"; + case 140524: + return "陵川县"; + case 140525: + return "泽州县"; + case 140581: + return "高平市"; + case 1406: + return "朔州市"; + case 140601: + return "市辖区"; + case 140602: + return "朔城区"; + case 140603: + return "平鲁区"; + case 140621: + return "山阴县"; + case 140622: + return "应县"; + case 140623: + return "右玉县"; + case 140624: + return "怀仁县"; + case 1407: + return "晋中市"; + case 140701: + return "市辖区"; + case 140702: + return "榆次区"; + case 140721: + return "榆社县"; + case 140722: + return "左权县"; + case 140723: + return "和顺县"; + case 140724: + return "昔阳县"; + case 140725: + return "寿阳县"; + case 140726: + return "太谷县"; + case 140727: + return "祁县"; + case 140728: + return "平遥县"; + case 140729: + return "灵石县"; + case 140781: + return "介休市"; + case 1408: + return "运城市"; + case 140801: + return "市辖区"; + case 140802: + return "盐湖区"; + case 140821: + return "临猗县"; + case 140822: + return "万荣县"; + case 140823: + return "闻喜县"; + case 140824: + return "稷山县"; + case 140825: + return "新绛县"; + case 140826: + return "绛县"; + case 140827: + return "垣曲县"; + case 140828: + return "夏县"; + case 140829: + return "平陆县"; + case 140830: + return "芮城县"; + case 140881: + return "永济市"; + case 140882: + return "河津市"; + case 1409: + return "忻州市"; + case 140901: + return "市辖区"; + case 140902: + return "忻府区"; + case 140921: + return "定襄县"; + case 140922: + return "五台县"; + case 140923: + return "代县"; + case 140924: + return "繁峙县"; + case 140925: + return "宁武县"; + case 140926: + return "静乐县"; + case 140927: + return "神池县"; + case 140928: + return "五寨县"; + case 140929: + return "岢岚县"; + case 140930: + return "河曲县"; + case 140931: + return "保德县"; + case 140932: + return "偏关县"; + case 140981: + return "原平市"; + case 1410: + return "临汾市"; + case 141001: + return "市辖区"; + case 141002: + return "尧都区"; + case 141021: + return "曲沃县"; + case 141022: + return "翼城县"; + case 141023: + return "襄汾县"; + case 141024: + return "洪洞县"; + case 141025: + return "古县"; + case 141026: + return "安泽县"; + case 141027: + return "浮山县"; + case 141028: + return "吉县"; + case 141029: + return "乡宁县"; + case 141030: + return "大宁县"; + case 141031: + return "隰县"; + case 141032: + return "永和县"; + case 141033: + return "蒲县"; + case 141034: + return "汾西县"; + case 141081: + return "侯马市"; + case 141082: + return "霍州市"; + case 1411: + return "吕梁市"; + case 141101: + return "市辖区"; + case 141102: + return "离石区"; + case 141121: + return "文水县"; + case 141122: + return "交城县"; + case 141123: + return "兴县"; + case 141124: + return "临县"; + case 141125: + return "柳林县"; + case 141126: + return "石楼县"; + case 141127: + return "岚县"; + case 141128: + return "方山县"; + case 141129: + return "中阳县"; + case 141130: + return "交口县"; + case 141181: + return "孝义市"; + case 141182: + return "汾阳市"; + case 15: + return "内蒙古自治区"; + case 1501: + return "呼和浩特市"; + case 150101: + return "市辖区"; + case 150102: + return "新城区"; + case 150103: + return "回民区"; + case 150104: + return "玉泉区"; + case 150105: + return "赛罕区"; + case 150121: + return "土默特左旗"; + case 150122: + return "托克托县"; + case 150123: + return "和林格尔县"; + case 150124: + return "清水河县"; + case 150125: + return "武川县"; + case 1502: + return "包头市"; + case 150201: + return "市辖区"; + case 150202: + return "东河区"; + case 150203: + return "昆都仑区"; + case 150204: + return "青山区"; + case 150205: + return "石拐区"; + case 150206: + return "白云鄂博矿区"; + case 150207: + return "九原区"; + case 150221: + return "土默特右旗"; + case 150222: + return "固阳县"; + case 150223: + return "达尔罕茂明安联合旗"; + case 1503: + return "乌海市"; + case 150301: + return "市辖区"; + case 150302: + return "海勃湾区"; + case 150303: + return "海南区"; + case 150304: + return "乌达区"; + case 1504: + return "赤峰市"; + case 150401: + return "市辖区"; + case 150402: + return "红山区"; + case 150403: + return "元宝山区"; + case 150404: + return "松山区"; + case 150421: + return "阿鲁科尔沁旗"; + case 150422: + return "巴林左旗"; + case 150423: + return "巴林右旗"; + case 150424: + return "林西县"; + case 150425: + return "克什克腾旗"; + case 150426: + return "翁牛特旗"; + case 150428: + return "喀喇沁旗"; + case 150429: + return "宁城县"; + case 150430: + return "敖汉旗"; + case 1505: + return "通辽市"; + case 150501: + return "市辖区"; + case 150502: + return "科尔沁区"; + case 150521: + return "科尔沁左翼中旗"; + case 150522: + return "科尔沁左翼后旗"; + case 150523: + return "开鲁县"; + case 150524: + return "库伦旗"; + case 150525: + return "奈曼旗"; + case 150526: + return "扎鲁特旗"; + case 150581: + return "霍林郭勒市"; + case 1506: + return "鄂尔多斯市"; + case 150601: + return "市辖区"; + case 150602: + return "东胜区"; + case 150621: + return "达拉特旗"; + case 150622: + return "准格尔旗"; + case 150623: + return "鄂托克前旗"; + case 150624: + return "鄂托克旗"; + case 150625: + return "杭锦旗"; + case 150626: + return "乌审旗"; + case 150627: + return "伊金霍洛旗"; + case 1507: + return "呼伦贝尔市"; + case 150701: + return "市辖区"; + case 150702: + return "海拉尔区"; + case 150703: + return "扎赉诺尔区"; + case 150721: + return "阿荣旗"; + case 150722: + return "莫力达瓦达斡尔族自治旗"; + case 150723: + return "鄂伦春自治旗"; + case 150724: + return "鄂温克族自治旗"; + case 150725: + return "陈巴尔虎旗"; + case 150726: + return "新巴尔虎左旗"; + case 150727: + return "新巴尔虎右旗"; + case 150781: + return "满洲里市"; + case 150782: + return "牙克石市"; + case 150783: + return "扎兰屯市"; + case 150784: + return "额尔古纳市"; + case 150785: + return "根河市"; + case 1508: + return "巴彦淖尔市"; + case 150801: + return "市辖区"; + case 150802: + return "临河区"; + case 150821: + return "五原县"; + case 150822: + return "磴口县"; + case 150823: + return "乌拉特前旗"; + case 150824: + return "乌拉特中旗"; + case 150825: + return "乌拉特后旗"; + case 150826: + return "杭锦后旗"; + case 1509: + return "乌兰察布市"; + case 150901: + return "市辖区"; + case 150902: + return "集宁区"; + case 150921: + return "卓资县"; + case 150922: + return "化德县"; + case 150923: + return "商都县"; + case 150924: + return "兴和县"; + case 150925: + return "凉城县"; + case 150926: + return "察哈尔右翼前旗"; + case 150927: + return "察哈尔右翼中旗"; + case 150928: + return "察哈尔右翼后旗"; + case 150929: + return "四子王旗"; + case 150981: + return "丰镇市"; + case 1522: + return "兴安盟"; + case 152201: + return "乌兰浩特市"; + case 152202: + return "阿尔山市"; + case 152221: + return "科尔沁右翼前旗"; + case 152222: + return "科尔沁右翼中旗"; + case 152223: + return "扎赉特旗"; + case 152224: + return "突泉县"; + case 1525: + return "锡林郭勒盟"; + case 152501: + return "二连浩特市"; + case 152502: + return "锡林浩特市"; + case 152522: + return "阿巴嘎旗"; + case 152523: + return "苏尼特左旗"; + case 152524: + return "苏尼特右旗"; + case 152525: + return "东乌珠穆沁旗"; + case 152526: + return "西乌珠穆沁旗"; + case 152527: + return "太仆寺旗"; + case 152528: + return "镶黄旗"; + case 152529: + return "正镶白旗"; + case 152530: + return "正蓝旗"; + case 152531: + return "多伦县"; + case 1529: + return "阿拉善盟"; + case 152921: + return "阿拉善左旗"; + case 152922: + return "阿拉善右旗"; + case 152923: + return "额济纳旗"; + case 21: + return "辽宁省"; + case 2101: + return "沈阳市"; + case 210101: + return "市辖区"; + case 210102: + return "和平区"; + case 210103: + return "沈河区"; + case 210104: + return "大东区"; + case 210105: + return "皇姑区"; + case 210106: + return "铁西区"; + case 210111: + return "苏家屯区"; + case 210112: + return "浑南区"; + case 210113: + return "沈北新区"; + case 210114: + return "于洪区"; + case 210122: + return "辽中县"; + case 210123: + return "康平县"; + case 210124: + return "法库县"; + case 210181: + return "新民市"; + case 2102: + return "大连市"; + case 210201: + return "市辖区"; + case 210202: + return "中山区"; + case 210203: + return "西岗区"; + case 210204: + return "沙河口区"; + case 210211: + return "甘井子区"; + case 210212: + return "旅顺口区"; + case 210213: + return "金州区"; + case 210224: + return "长海县"; + case 210281: + return "瓦房店市"; + case 210282: + return "普兰店市"; + case 210283: + return "庄河市"; + case 2103: + return "鞍山市"; + case 210301: + return "市辖区"; + case 210302: + return "铁东区"; + case 210303: + return "铁西区"; + case 210304: + return "立山区"; + case 210311: + return "千山区"; + case 210321: + return "台安县"; + case 210323: + return "岫岩满族自治县"; + case 210381: + return "海城市"; + case 2104: + return "抚顺市"; + case 210401: + return "市辖区"; + case 210402: + return "新抚区"; + case 210403: + return "东洲区"; + case 210404: + return "望花区"; + case 210411: + return "顺城区"; + case 210421: + return "抚顺县"; + case 210422: + return "新宾满族自治县"; + case 210423: + return "清原满族自治县"; + case 2105: + return "本溪市"; + case 210501: + return "市辖区"; + case 210502: + return "平山区"; + case 210503: + return "溪湖区"; + case 210504: + return "明山区"; + case 210505: + return "南芬区"; + case 210521: + return "本溪满族自治县"; + case 210522: + return "桓仁满族自治县"; + case 2106: + return "丹东市"; + case 210601: + return "市辖区"; + case 210602: + return "元宝区"; + case 210603: + return "振兴区"; + case 210604: + return "振安区"; + case 210624: + return "宽甸满族自治县"; + case 210681: + return "东港市"; + case 210682: + return "凤城市"; + case 2107: + return "锦州市"; + case 210701: + return "市辖区"; + case 210702: + return "古塔区"; + case 210703: + return "凌河区"; + case 210711: + return "太和区"; + case 210726: + return "黑山县"; + case 210727: + return "义县"; + case 210781: + return "凌海市"; + case 210782: + return "北镇市"; + case 2108: + return "营口市"; + case 210801: + return "市辖区"; + case 210802: + return "站前区"; + case 210803: + return "西市区"; + case 210804: + return "鲅鱼圈区"; + case 210811: + return "老边区"; + case 210881: + return "盖州市"; + case 210882: + return "大石桥市"; + case 2109: + return "阜新市"; + case 210901: + return "市辖区"; + case 210902: + return "海州区"; + case 210903: + return "新邱区"; + case 210904: + return "太平区"; + case 210905: + return "清河门区"; + case 210911: + return "细河区"; + case 210921: + return "阜新蒙古族自治县"; + case 210922: + return "彰武县"; + case 2110: + return "辽阳市"; + case 211001: + return "市辖区"; + case 211002: + return "白塔区"; + case 211003: + return "文圣区"; + case 211004: + return "宏伟区"; + case 211005: + return "弓长岭区"; + case 211011: + return "太子河区"; + case 211021: + return "辽阳县"; + case 211081: + return "灯塔市"; + case 2111: + return "盘锦市"; + case 211101: + return "市辖区"; + case 211102: + return "双台子区"; + case 211103: + return "兴隆台区"; + case 211121: + return "大洼县"; + case 211122: + return "盘山县"; + case 2112: + return "铁岭市"; + case 211201: + return "市辖区"; + case 211202: + return "银州区"; + case 211204: + return "清河区"; + case 211221: + return "铁岭县"; + case 211223: + return "西丰县"; + case 211224: + return "昌图县"; + case 211281: + return "调兵山市"; + case 211282: + return "开原市"; + case 2113: + return "朝阳市"; + case 211301: + return "市辖区"; + case 211302: + return "双塔区"; + case 211303: + return "龙城区"; + case 211321: + return "朝阳县"; + case 211322: + return "建平县"; + case 211324: + return "喀喇沁左翼蒙古族自治县"; + case 211381: + return "北票市"; + case 211382: + return "凌源市"; + case 2114: + return "葫芦岛市"; + case 211401: + return "市辖区"; + case 211402: + return "连山区"; + case 211403: + return "龙港区"; + case 211404: + return "南票区"; + case 211421: + return "绥中县"; + case 211422: + return "建昌县"; + case 211481: + return "兴城市"; + case 22: + return "吉林省"; + case 2201: + return "长春市"; + case 220101: + return "市辖区"; + case 220102: + return "南关区"; + case 220103: + return "宽城区"; + case 220104: + return "朝阳区"; + case 220105: + return "二道区"; + case 220106: + return "绿园区"; + case 220112: + return "双阳区"; + case 220113: + return "九台区"; + case 220122: + return "农安县"; + case 220182: + return "榆树市"; + case 220183: + return "德惠市"; + case 2202: + return "吉林市"; + case 220201: + return "市辖区"; + case 220202: + return "昌邑区"; + case 220203: + return "龙潭区"; + case 220204: + return "船营区"; + case 220211: + return "丰满区"; + case 220221: + return "永吉县"; + case 220281: + return "蛟河市"; + case 220282: + return "桦甸市"; + case 220283: + return "舒兰市"; + case 220284: + return "磐石市"; + case 2203: + return "四平市"; + case 220301: + return "市辖区"; + case 220302: + return "铁西区"; + case 220303: + return "铁东区"; + case 220322: + return "梨树县"; + case 220323: + return "伊通满族自治县"; + case 220381: + return "公主岭市"; + case 220382: + return "双辽市"; + case 2204: + return "辽源市"; + case 220401: + return "市辖区"; + case 220402: + return "龙山区"; + case 220403: + return "西安区"; + case 220421: + return "东丰县"; + case 220422: + return "东辽县"; + case 2205: + return "通化市"; + case 220501: + return "市辖区"; + case 220502: + return "东昌区"; + case 220503: + return "二道江区"; + case 220521: + return "通化县"; + case 220523: + return "辉南县"; + case 220524: + return "柳河县"; + case 220581: + return "梅河口市"; + case 220582: + return "集安市"; + case 2206: + return "白山市"; + case 220601: + return "市辖区"; + case 220602: + return "浑江区"; + case 220605: + return "江源区"; + case 220621: + return "抚松县"; + case 220622: + return "靖宇县"; + case 220623: + return "长白朝鲜族自治县"; + case 220681: + return "临江市"; + case 2207: + return "松原市"; + case 220701: + return "市辖区"; + case 220702: + return "宁江区"; + case 220721: + return "前郭尔罗斯蒙古族自治县"; + case 220722: + return "长岭县"; + case 220723: + return "乾安县"; + case 220781: + return "扶余市"; + case 2208: + return "白城市"; + case 220801: + return "市辖区"; + case 220802: + return "洮北区"; + case 220821: + return "镇赉县"; + case 220822: + return "通榆县"; + case 220881: + return "洮南市"; + case 220882: + return "大安市"; + case 2224: + return "延边朝鲜族自治州"; + case 222401: + return "延吉市"; + case 222402: + return "图们市"; + case 222403: + return "敦化市"; + case 222404: + return "珲春市"; + case 222405: + return "龙井市"; + case 222406: + return "和龙市"; + case 222424: + return "汪清县"; + case 222426: + return "安图县"; + case 23: + return "黑龙江省"; + case 2301: + return "哈尔滨市"; + case 230101: + return "市辖区"; + case 230102: + return "道里区"; + case 230103: + return "南岗区"; + case 230104: + return "道外区"; + case 230108: + return "平房区"; + case 230109: + return "松北区"; + case 230110: + return "香坊区"; + case 230111: + return "呼兰区"; + case 230112: + return "阿城区"; + case 230123: + return "依兰县"; + case 230124: + return "方正县"; + case 230125: + return "宾县"; + case 230126: + return "巴彦县"; + case 230127: + return "木兰县"; + case 230128: + return "通河县"; + case 230129: + return "延寿县"; + case 230182: + return "双城市"; + case 230183: + return "尚志市"; + case 230184: + return "五常市"; + case 2302: + return "齐齐哈尔市"; + case 230201: + return "市辖区"; + case 230202: + return "龙沙区"; + case 230203: + return "建华区"; + case 230204: + return "铁锋区"; + case 230205: + return "昂昂溪区"; + case 230206: + return "富拉尔基区"; + case 230207: + return "碾子山区"; + case 230208: + return "梅里斯达斡尔族区"; + case 230221: + return "龙江县"; + case 230223: + return "依安县"; + case 230224: + return "泰来县"; + case 230225: + return "甘南县"; + case 230227: + return "富裕县"; + case 230229: + return "克山县"; + case 230230: + return "克东县"; + case 230231: + return "拜泉县"; + case 230281: + return "讷河市"; + case 2303: + return "鸡西市"; + case 230301: + return "市辖区"; + case 230302: + return "鸡冠区"; + case 230303: + return "恒山区"; + case 230304: + return "滴道区"; + case 230305: + return "梨树区"; + case 230306: + return "城子河区"; + case 230307: + return "麻山区"; + case 230321: + return "鸡东县"; + case 230381: + return "虎林市"; + case 230382: + return "密山市"; + case 2304: + return "鹤岗市"; + case 230401: + return "市辖区"; + case 230402: + return "向阳区"; + case 230403: + return "工农区"; + case 230404: + return "南山区"; + case 230405: + return "兴安区"; + case 230406: + return "东山区"; + case 230407: + return "兴山区"; + case 230421: + return "萝北县"; + case 230422: + return "绥滨县"; + case 2305: + return "双鸭山市"; + case 230501: + return "市辖区"; + case 230502: + return "尖山区"; + case 230503: + return "岭东区"; + case 230505: + return "四方台区"; + case 230506: + return "宝山区"; + case 230521: + return "集贤县"; + case 230522: + return "友谊县"; + case 230523: + return "宝清县"; + case 230524: + return "饶河县"; + case 2306: + return "大庆市"; + case 230601: + return "市辖区"; + case 230602: + return "萨尔图区"; + case 230603: + return "龙凤区"; + case 230604: + return "让胡路区"; + case 230605: + return "红岗区"; + case 230606: + return "大同区"; + case 230621: + return "肇州县"; + case 230622: + return "肇源县"; + case 230623: + return "林甸县"; + case 230624: + return "杜尔伯特蒙古族自治县"; + case 2307: + return "伊春市"; + case 230701: + return "市辖区"; + case 230702: + return "伊春区"; + case 230703: + return "南岔区"; + case 230704: + return "友好区"; + case 230705: + return "西林区"; + case 230706: + return "翠峦区"; + case 230707: + return "新青区"; + case 230708: + return "美溪区"; + case 230709: + return "金山屯区"; + case 230710: + return "五营区"; + case 230711: + return "乌马河区"; + case 230712: + return "汤旺河区"; + case 230713: + return "带岭区"; + case 230714: + return "乌伊岭区"; + case 230715: + return "红星区"; + case 230716: + return "上甘岭区"; + case 230722: + return "嘉荫县"; + case 230781: + return "铁力市"; + case 2308: + return "佳木斯市"; + case 230801: + return "市辖区"; + case 230803: + return "向阳区"; + case 230804: + return "前进区"; + case 230805: + return "东风区"; + case 230811: + return "郊区"; + case 230822: + return "桦南县"; + case 230826: + return "桦川县"; + case 230828: + return "汤原县"; + case 230833: + return "抚远县"; + case 230881: + return "同江市"; + case 230882: + return "富锦市"; + case 2309: + return "七台河市"; + case 230901: + return "市辖区"; + case 230902: + return "新兴区"; + case 230903: + return "桃山区"; + case 230904: + return "茄子河区"; + case 230921: + return "勃利县"; + case 2310: + return "牡丹江市"; + case 231001: + return "市辖区"; + case 231002: + return "东安区"; + case 231003: + return "阳明区"; + case 231004: + return "爱民区"; + case 231005: + return "西安区"; + case 231024: + return "东宁县"; + case 231025: + return "林口县"; + case 231081: + return "绥芬河市"; + case 231083: + return "海林市"; + case 231084: + return "宁安市"; + case 231085: + return "穆棱市"; + case 2311: + return "黑河市"; + case 231101: + return "市辖区"; + case 231102: + return "爱辉区"; + case 231121: + return "嫩江县"; + case 231123: + return "逊克县"; + case 231124: + return "孙吴县"; + case 231181: + return "北安市"; + case 231182: + return "五大连池市"; + case 2312: + return "绥化市"; + case 231201: + return "市辖区"; + case 231202: + return "北林区"; + case 231221: + return "望奎县"; + case 231222: + return "兰西县"; + case 231223: + return "青冈县"; + case 231224: + return "庆安县"; + case 231225: + return "明水县"; + case 231226: + return "绥棱县"; + case 231281: + return "安达市"; + case 231282: + return "肇东市"; + case 231283: + return "海伦市"; + case 2327: + return "大兴安岭地区"; + case 232721: + return "呼玛县"; + case 232722: + return "塔河县"; + case 232723: + return "漠河县"; + case 31: + return "上海市"; + case 3101: + return "市辖区"; + case 310101: + return "黄浦区"; + case 310104: + return "徐汇区"; + case 310105: + return "长宁区"; + case 310106: + return "静安区"; + case 310107: + return "普陀区"; + case 310108: + return "闸北区"; + case 310109: + return "虹口区"; + case 310110: + return "杨浦区"; + case 310112: + return "闵行区"; + case 310113: + return "宝山区"; + case 310114: + return "嘉定区"; + case 310115: + return "浦东新区"; + case 310116: + return "金山区"; + case 310117: + return "松江区"; + case 310118: + return "青浦区"; + case 310120: + return "奉贤区"; + case 3102: + return "县"; + case 310230: + return "崇明县"; + case 32: + return "江苏省"; + case 3201: + return "南京市"; + case 320101: + return "市辖区"; + case 320102: + return "玄武区"; + case 320104: + return "秦淮区"; + case 320105: + return "建邺区"; + case 320106: + return "鼓楼区"; + case 320111: + return "浦口区"; + case 320113: + return "栖霞区"; + case 320114: + return "雨花台区"; + case 320115: + return "江宁区"; + case 320116: + return "六合区"; + case 320117: + return "溧水区"; + case 320118: + return "高淳区"; + case 3202: + return "无锡市"; + case 320201: + return "市辖区"; + case 320202: + return "崇安区"; + case 320203: + return "南长区"; + case 320204: + return "北塘区"; + case 320205: + return "锡山区"; + case 320206: + return "惠山区"; + case 320211: + return "滨湖区"; + case 320281: + return "江阴市"; + case 320282: + return "宜兴市"; + case 3203: + return "徐州市"; + case 320301: + return "市辖区"; + case 320302: + return "鼓楼区"; + case 320303: + return "云龙区"; + case 320305: + return "贾汪区"; + case 320311: + return "泉山区"; + case 320312: + return "铜山区"; + case 320321: + return "丰县"; + case 320322: + return "沛县"; + case 320324: + return "睢宁县"; + case 320381: + return "新沂市"; + case 320382: + return "邳州市"; + case 3204: + return "常州市"; + case 320401: + return "市辖区"; + case 320402: + return "天宁区"; + case 320404: + return "钟楼区"; + case 320405: + return "戚墅堰区"; + case 320411: + return "新北区"; + case 320412: + return "武进区"; + case 320481: + return "溧阳市"; + case 320482: + return "金坛市"; + case 3205: + return "苏州市"; + case 320501: + return "市辖区"; + case 320505: + return "虎丘区"; + case 320506: + return "吴中区"; + case 320507: + return "相城区"; + case 320508: + return "姑苏区"; + case 320509: + return "吴江区"; + case 320581: + return "常熟市"; + case 320582: + return "张家港市"; + case 320583: + return "昆山市"; + case 320585: + return "太仓市"; + case 3206: + return "南通市"; + case 320601: + return "市辖区"; + case 320602: + return "崇川区"; + case 320611: + return "港闸区"; + case 320612: + return "通州区"; + case 320621: + return "海安县"; + case 320623: + return "如东县"; + case 320681: + return "启东市"; + case 320682: + return "如皋市"; + case 320684: + return "海门市"; + case 3207: + return "连云港市"; + case 320701: + return "市辖区"; + case 320703: + return "连云区"; + case 320706: + return "海州区"; + case 320707: + return "赣榆区"; + case 320722: + return "东海县"; + case 320723: + return "灌云县"; + case 320724: + return "灌南县"; + case 3208: + return "淮安市"; + case 320801: + return "市辖区"; + case 320802: + return "清河区"; + case 320803: + return "淮安区"; + case 320804: + return "淮阴区"; + case 320811: + return "清浦区"; + case 320826: + return "涟水县"; + case 320829: + return "洪泽县"; + case 320830: + return "盱眙县"; + case 320831: + return "金湖县"; + case 3209: + return "盐城市"; + case 320901: + return "市辖区"; + case 320902: + return "亭湖区"; + case 320903: + return "盐都区"; + case 320921: + return "响水县"; + case 320922: + return "滨海县"; + case 320923: + return "阜宁县"; + case 320924: + return "射阳县"; + case 320925: + return "建湖县"; + case 320981: + return "东台市"; + case 320982: + return "大丰市"; + case 3210: + return "扬州市"; + case 321001: + return "市辖区"; + case 321002: + return "广陵区"; + case 321003: + return "邗江区"; + case 321012: + return "江都区"; + case 321023: + return "宝应县"; + case 321081: + return "仪征市"; + case 321084: + return "高邮市"; + case 3211: + return "镇江市"; + case 321101: + return "市辖区"; + case 321102: + return "京口区"; + case 321111: + return "润州区"; + case 321112: + return "丹徒区"; + case 321181: + return "丹阳市"; + case 321182: + return "扬中市"; + case 321183: + return "句容市"; + case 3212: + return "泰州市"; + case 321201: + return "市辖区"; + case 321202: + return "海陵区"; + case 321203: + return "高港区"; + case 321204: + return "姜堰区"; + case 321281: + return "兴化市"; + case 321282: + return "靖江市"; + case 321283: + return "泰兴市"; + case 3213: + return "宿迁市"; + case 321301: + return "市辖区"; + case 321302: + return "宿城区"; + case 321311: + return "宿豫区"; + case 321322: + return "沭阳县"; + case 321323: + return "泗阳县"; + case 321324: + return "泗洪县"; + case 33: + return "浙江省"; + case 3301: + return "杭州市"; + case 330101: + return "市辖区"; + case 330102: + return "上城区"; + case 330103: + return "下城区"; + case 330104: + return "江干区"; + case 330105: + return "拱墅区"; + case 330106: + return "西湖区"; + case 330108: + return "滨江区"; + case 330109: + return "萧山区"; + case 330110: + return "余杭区"; + case 330122: + return "桐庐县"; + case 330127: + return "淳安县"; + case 330182: + return "建德市"; + case 330183: + return "富阳市"; + case 330185: + return "临安市"; + case 3302: + return "宁波市"; + case 330201: + return "市辖区"; + case 330203: + return "海曙区"; + case 330204: + return "江东区"; + case 330205: + return "江北区"; + case 330206: + return "北仑区"; + case 330211: + return "镇海区"; + case 330212: + return "鄞州区"; + case 330225: + return "象山县"; + case 330226: + return "宁海县"; + case 330281: + return "余姚市"; + case 330282: + return "慈溪市"; + case 330283: + return "奉化市"; + case 3303: + return "温州市"; + case 330301: + return "市辖区"; + case 330302: + return "鹿城区"; + case 330303: + return "龙湾区"; + case 330304: + return "瓯海区"; + case 330322: + return "洞头县"; + case 330324: + return "永嘉县"; + case 330326: + return "平阳县"; + case 330327: + return "苍南县"; + case 330328: + return "文成县"; + case 330329: + return "泰顺县"; + case 330381: + return "瑞安市"; + case 330382: + return "乐清市"; + case 3304: + return "嘉兴市"; + case 330401: + return "市辖区"; + case 330402: + return "南湖区"; + case 330411: + return "秀洲区"; + case 330421: + return "嘉善县"; + case 330424: + return "海盐县"; + case 330481: + return "海宁市"; + case 330482: + return "平湖市"; + case 330483: + return "桐乡市"; + case 3305: + return "湖州市"; + case 330501: + return "市辖区"; + case 330502: + return "吴兴区"; + case 330503: + return "南浔区"; + case 330521: + return "德清县"; + case 330522: + return "长兴县"; + case 330523: + return "安吉县"; + case 3306: + return "绍兴市"; + case 330601: + return "市辖区"; + case 330602: + return "越城区"; + case 330603: + return "柯桥区"; + case 330604: + return "上虞区"; + case 330624: + return "新昌县"; + case 330681: + return "诸暨市"; + case 330683: + return "嵊州市"; + case 3307: + return "金华市"; + case 330701: + return "市辖区"; + case 330702: + return "婺城区"; + case 330703: + return "金东区"; + case 330723: + return "武义县"; + case 330726: + return "浦江县"; + case 330727: + return "磐安县"; + case 330781: + return "兰溪市"; + case 330782: + return "义乌市"; + case 330783: + return "东阳市"; + case 330784: + return "永康市"; + case 3308: + return "衢州市"; + case 330801: + return "市辖区"; + case 330802: + return "柯城区"; + case 330803: + return "衢江区"; + case 330822: + return "常山县"; + case 330824: + return "开化县"; + case 330825: + return "龙游县"; + case 330881: + return "江山市"; + case 3309: + return "舟山市"; + case 330901: + return "市辖区"; + case 330902: + return "定海区"; + case 330903: + return "普陀区"; + case 330921: + return "岱山县"; + case 330922: + return "嵊泗县"; + case 3310: + return "台州市"; + case 331001: + return "市辖区"; + case 331002: + return "椒江区"; + case 331003: + return "黄岩区"; + case 331004: + return "路桥区"; + case 331021: + return "玉环县"; + case 331022: + return "三门县"; + case 331023: + return "天台县"; + case 331024: + return "仙居县"; + case 331081: + return "温岭市"; + case 331082: + return "临海市"; + case 3311: + return "丽水市"; + case 331101: + return "市辖区"; + case 331102: + return "莲都区"; + case 331121: + return "青田县"; + case 331122: + return "缙云县"; + case 331123: + return "遂昌县"; + case 331124: + return "松阳县"; + case 331125: + return "云和县"; + case 331126: + return "庆元县"; + case 331127: + return "景宁畲族自治县"; + case 331181: + return "龙泉市"; + case 34: + return "安徽省"; + case 3401: + return "合肥市"; + case 340101: + return "市辖区"; + case 340102: + return "瑶海区"; + case 340103: + return "庐阳区"; + case 340104: + return "蜀山区"; + case 340111: + return "包河区"; + case 340121: + return "长丰县"; + case 340122: + return "肥东县"; + case 340123: + return "肥西县"; + case 340124: + return "庐江县"; + case 340181: + return "巢湖市"; + case 3402: + return "芜湖市"; + case 340201: + return "市辖区"; + case 340202: + return "镜湖区"; + case 340203: + return "弋江区"; + case 340207: + return "鸠江区"; + case 340208: + return "三山区"; + case 340221: + return "芜湖县"; + case 340222: + return "繁昌县"; + case 340223: + return "南陵县"; + case 340225: + return "无为县"; + case 3403: + return "蚌埠市"; + case 340301: + return "市辖区"; + case 340302: + return "龙子湖区"; + case 340303: + return "蚌山区"; + case 340304: + return "禹会区"; + case 340311: + return "淮上区"; + case 340321: + return "怀远县"; + case 340322: + return "五河县"; + case 340323: + return "固镇县"; + case 3404: + return "淮南市"; + case 340401: + return "市辖区"; + case 340402: + return "大通区"; + case 340403: + return "田家庵区"; + case 340404: + return "谢家集区"; + case 340405: + return "八公山区"; + case 340406: + return "潘集区"; + case 340421: + return "凤台县"; + case 3405: + return "马鞍山市"; + case 340501: + return "市辖区"; + case 340503: + return "花山区"; + case 340504: + return "雨山区"; + case 340506: + return "博望区"; + case 340521: + return "当涂县"; + case 340522: + return "含山县"; + case 340523: + return "和县"; + case 3406: + return "淮北市"; + case 340601: + return "市辖区"; + case 340602: + return "杜集区"; + case 340603: + return "相山区"; + case 340604: + return "烈山区"; + case 340621: + return "濉溪县"; + case 3407: + return "铜陵市"; + case 340701: + return "市辖区"; + case 340702: + return "铜官山区"; + case 340703: + return "狮子山区"; + case 340711: + return "郊区"; + case 340721: + return "铜陵县"; + case 3408: + return "安庆市"; + case 340801: + return "市辖区"; + case 340802: + return "迎江区"; + case 340803: + return "大观区"; + case 340811: + return "宜秀区"; + case 340822: + return "怀宁县"; + case 340823: + return "枞阳县"; + case 340824: + return "潜山县"; + case 340825: + return "太湖县"; + case 340826: + return "宿松县"; + case 340827: + return "望江县"; + case 340828: + return "岳西县"; + case 340881: + return "桐城市"; + case 3410: + return "黄山市"; + case 341001: + return "市辖区"; + case 341002: + return "屯溪区"; + case 341003: + return "黄山区"; + case 341004: + return "徽州区"; + case 341021: + return "歙县"; + case 341022: + return "休宁县"; + case 341023: + return "黟县"; + case 341024: + return "祁门县"; + case 3411: + return "滁州市"; + case 341101: + return "市辖区"; + case 341102: + return "琅琊区"; + case 341103: + return "南谯区"; + case 341122: + return "来安县"; + case 341124: + return "全椒县"; + case 341125: + return "定远县"; + case 341126: + return "凤阳县"; + case 341181: + return "天长市"; + case 341182: + return "明光市"; + case 3412: + return "阜阳市"; + case 341201: + return "市辖区"; + case 341202: + return "颍州区"; + case 341203: + return "颍东区"; + case 341204: + return "颍泉区"; + case 341221: + return "临泉县"; + case 341222: + return "太和县"; + case 341225: + return "阜南县"; + case 341226: + return "颍上县"; + case 341282: + return "界首市"; + case 3413: + return "宿州市"; + case 341301: + return "市辖区"; + case 341302: + return "埇桥区"; + case 341321: + return "砀山县"; + case 341322: + return "萧县"; + case 341323: + return "灵璧县"; + case 341324: + return "泗县"; + case 3415: + return "六安市"; + case 341501: + return "市辖区"; + case 341502: + return "金安区"; + case 341503: + return "裕安区"; + case 341521: + return "寿县"; + case 341522: + return "霍邱县"; + case 341523: + return "舒城县"; + case 341524: + return "金寨县"; + case 341525: + return "霍山县"; + case 3416: + return "亳州市"; + case 341601: + return "市辖区"; + case 341602: + return "谯城区"; + case 341621: + return "涡阳县"; + case 341622: + return "蒙城县"; + case 341623: + return "利辛县"; + case 3417: + return "池州市"; + case 341701: + return "市辖区"; + case 341702: + return "贵池区"; + case 341721: + return "东至县"; + case 341722: + return "石台县"; + case 341723: + return "青阳县"; + case 3418: + return "宣城市"; + case 341801: + return "市辖区"; + case 341802: + return "宣州区"; + case 341821: + return "郎溪县"; + case 341822: + return "广德县"; + case 341823: + return "泾县"; + case 341824: + return "绩溪县"; + case 341825: + return "旌德县"; + case 341881: + return "宁国市"; + case 35: + return "福建省"; + case 3501: + return "福州市"; + case 350101: + return "市辖区"; + case 350102: + return "鼓楼区"; + case 350103: + return "台江区"; + case 350104: + return "仓山区"; + case 350105: + return "马尾区"; + case 350111: + return "晋安区"; + case 350121: + return "闽侯县"; + case 350122: + return "连江县"; + case 350123: + return "罗源县"; + case 350124: + return "闽清县"; + case 350125: + return "永泰县"; + case 350128: + return "平潭县"; + case 350181: + return "福清市"; + case 350182: + return "长乐市"; + case 3502: + return "厦门市"; + case 350201: + return "市辖区"; + case 350203: + return "思明区"; + case 350205: + return "海沧区"; + case 350206: + return "湖里区"; + case 350211: + return "集美区"; + case 350212: + return "同安区"; + case 350213: + return "翔安区"; + case 3503: + return "莆田市"; + case 350301: + return "市辖区"; + case 350302: + return "城厢区"; + case 350303: + return "涵江区"; + case 350304: + return "荔城区"; + case 350305: + return "秀屿区"; + case 350322: + return "仙游县"; + case 3504: + return "三明市"; + case 350401: + return "市辖区"; + case 350402: + return "梅列区"; + case 350403: + return "三元区"; + case 350421: + return "明溪县"; + case 350423: + return "清流县"; + case 350424: + return "宁化县"; + case 350425: + return "大田县"; + case 350426: + return "尤溪县"; + case 350427: + return "沙县"; + case 350428: + return "将乐县"; + case 350429: + return "泰宁县"; + case 350430: + return "建宁县"; + case 350481: + return "永安市"; + case 3505: + return "泉州市"; + case 350501: + return "市辖区"; + case 350502: + return "鲤城区"; + case 350503: + return "丰泽区"; + case 350504: + return "洛江区"; + case 350505: + return "泉港区"; + case 350521: + return "惠安县"; + case 350524: + return "安溪县"; + case 350525: + return "永春县"; + case 350526: + return "德化县"; + case 350527: + return "金门县"; + case 350581: + return "石狮市"; + case 350582: + return "晋江市"; + case 350583: + return "南安市"; + case 3506: + return "漳州市"; + case 350601: + return "市辖区"; + case 350602: + return "芗城区"; + case 350603: + return "龙文区"; + case 350622: + return "云霄县"; + case 350623: + return "漳浦县"; + case 350624: + return "诏安县"; + case 350625: + return "长泰县"; + case 350626: + return "东山县"; + case 350627: + return "南靖县"; + case 350628: + return "平和县"; + case 350629: + return "华安县"; + case 350681: + return "龙海市"; + case 3507: + return "南平市"; + case 350701: + return "市辖区"; + case 350702: + return "延平区"; + case 350721: + return "顺昌县"; + case 350722: + return "浦城县"; + case 350723: + return "光泽县"; + case 350724: + return "松溪县"; + case 350725: + return "政和县"; + case 350781: + return "邵武市"; + case 350782: + return "武夷山市"; + case 350783: + return "建瓯市"; + case 350784: + return "建阳市"; + case 3508: + return "龙岩市"; + case 350801: + return "市辖区"; + case 350802: + return "新罗区"; + case 350821: + return "长汀县"; + case 350822: + return "永定县"; + case 350823: + return "上杭县"; + case 350824: + return "武平县"; + case 350825: + return "连城县"; + case 350881: + return "漳平市"; + case 3509: + return "宁德市"; + case 350901: + return "市辖区"; + case 350902: + return "蕉城区"; + case 350921: + return "霞浦县"; + case 350922: + return "古田县"; + case 350923: + return "屏南县"; + case 350924: + return "寿宁县"; + case 350925: + return "周宁县"; + case 350926: + return "柘荣县"; + case 350981: + return "福安市"; + case 350982: + return "福鼎市"; + case 36: + return "江西省"; + case 3601: + return "南昌市"; + case 360101: + return "市辖区"; + case 360102: + return "东湖区"; + case 360103: + return "西湖区"; + case 360104: + return "青云谱区"; + case 360105: + return "湾里区"; + case 360111: + return "青山湖区"; + case 360121: + return "南昌县"; + case 360122: + return "新建县"; + case 360123: + return "安义县"; + case 360124: + return "进贤县"; + case 3602: + return "景德镇市"; + case 360201: + return "市辖区"; + case 360202: + return "昌江区"; + case 360203: + return "珠山区"; + case 360222: + return "浮梁县"; + case 360281: + return "乐平市"; + case 3603: + return "萍乡市"; + case 360301: + return "市辖区"; + case 360302: + return "安源区"; + case 360313: + return "湘东区"; + case 360321: + return "莲花县"; + case 360322: + return "上栗县"; + case 360323: + return "芦溪县"; + case 3604: + return "九江市"; + case 360401: + return "市辖区"; + case 360402: + return "庐山区"; + case 360403: + return "浔阳区"; + case 360421: + return "九江县"; + case 360423: + return "武宁县"; + case 360424: + return "修水县"; + case 360425: + return "永修县"; + case 360426: + return "德安县"; + case 360427: + return "星子县"; + case 360428: + return "都昌县"; + case 360429: + return "湖口县"; + case 360430: + return "彭泽县"; + case 360481: + return "瑞昌市"; + case 360482: + return "共青城市"; + case 3605: + return "新余市"; + case 360501: + return "市辖区"; + case 360502: + return "渝水区"; + case 360521: + return "分宜县"; + case 3606: + return "鹰潭市"; + case 360601: + return "市辖区"; + case 360602: + return "月湖区"; + case 360622: + return "余江县"; + case 360681: + return "贵溪市"; + case 3607: + return "赣州市"; + case 360701: + return "市辖区"; + case 360702: + return "章贡区"; + case 360703: + return "南康区"; + case 360721: + return "赣县"; + case 360722: + return "信丰县"; + case 360723: + return "大余县"; + case 360724: + return "上犹县"; + case 360725: + return "崇义县"; + case 360726: + return "安远县"; + case 360727: + return "龙南县"; + case 360728: + return "定南县"; + case 360729: + return "全南县"; + case 360730: + return "宁都县"; + case 360731: + return "于都县"; + case 360732: + return "兴国县"; + case 360733: + return "会昌县"; + case 360734: + return "寻乌县"; + case 360735: + return "石城县"; + case 360781: + return "瑞金市"; + case 3608: + return "吉安市"; + case 360801: + return "市辖区"; + case 360802: + return "吉州区"; + case 360803: + return "青原区"; + case 360821: + return "吉安县"; + case 360822: + return "吉水县"; + case 360823: + return "峡江县"; + case 360824: + return "新干县"; + case 360825: + return "永丰县"; + case 360826: + return "泰和县"; + case 360827: + return "遂川县"; + case 360828: + return "万安县"; + case 360829: + return "安福县"; + case 360830: + return "永新县"; + case 360881: + return "井冈山市"; + case 3609: + return "宜春市"; + case 360901: + return "市辖区"; + case 360902: + return "袁州区"; + case 360921: + return "奉新县"; + case 360922: + return "万载县"; + case 360923: + return "上高县"; + case 360924: + return "宜丰县"; + case 360925: + return "靖安县"; + case 360926: + return "铜鼓县"; + case 360981: + return "丰城市"; + case 360982: + return "樟树市"; + case 360983: + return "高安市"; + case 3610: + return "抚州市"; + case 361001: + return "市辖区"; + case 361002: + return "临川区"; + case 361021: + return "南城县"; + case 361022: + return "黎川县"; + case 361023: + return "南丰县"; + case 361024: + return "崇仁县"; + case 361025: + return "乐安县"; + case 361026: + return "宜黄县"; + case 361027: + return "金溪县"; + case 361028: + return "资溪县"; + case 361029: + return "东乡县"; + case 361030: + return "广昌县"; + case 3611: + return "上饶市"; + case 361101: + return "市辖区"; + case 361102: + return "信州区"; + case 361121: + return "上饶县"; + case 361122: + return "广丰县"; + case 361123: + return "玉山县"; + case 361124: + return "铅山县"; + case 361125: + return "横峰县"; + case 361126: + return "弋阳县"; + case 361127: + return "余干县"; + case 361128: + return "鄱阳县"; + case 361129: + return "万年县"; + case 361130: + return "婺源县"; + case 361181: + return "德兴市"; + case 37: + return "山东省"; + case 3701: + return "济南市"; + case 370101: + return "市辖区"; + case 370102: + return "历下区"; + case 370103: + return "市中区"; + case 370104: + return "槐荫区"; + case 370105: + return "天桥区"; + case 370112: + return "历城区"; + case 370113: + return "长清区"; + case 370124: + return "平阴县"; + case 370125: + return "济阳县"; + case 370126: + return "商河县"; + case 370181: + return "章丘市"; + case 3702: + return "青岛市"; + case 370201: + return "市辖区"; + case 370202: + return "市南区"; + case 370203: + return "市北区"; + case 370211: + return "黄岛区"; + case 370212: + return "崂山区"; + case 370213: + return "李沧区"; + case 370214: + return "城阳区"; + case 370281: + return "胶州市"; + case 370282: + return "即墨市"; + case 370283: + return "平度市"; + case 370285: + return "莱西市"; + case 3703: + return "淄博市"; + case 370301: + return "市辖区"; + case 370302: + return "淄川区"; + case 370303: + return "张店区"; + case 370304: + return "博山区"; + case 370305: + return "临淄区"; + case 370306: + return "周村区"; + case 370321: + return "桓台县"; + case 370322: + return "高青县"; + case 370323: + return "沂源县"; + case 3704: + return "枣庄市"; + case 370401: + return "市辖区"; + case 370402: + return "市中区"; + case 370403: + return "薛城区"; + case 370404: + return "峄城区"; + case 370405: + return "台儿庄区"; + case 370406: + return "山亭区"; + case 370481: + return "滕州市"; + case 3705: + return "东营市"; + case 370501: + return "市辖区"; + case 370502: + return "东营区"; + case 370503: + return "河口区"; + case 370521: + return "垦利县"; + case 370522: + return "利津县"; + case 370523: + return "广饶县"; + case 3706: + return "烟台市"; + case 370601: + return "市辖区"; + case 370602: + return "芝罘区"; + case 370611: + return "福山区"; + case 370612: + return "牟平区"; + case 370613: + return "莱山区"; + case 370634: + return "长岛县"; + case 370681: + return "龙口市"; + case 370682: + return "莱阳市"; + case 370683: + return "莱州市"; + case 370684: + return "蓬莱市"; + case 370685: + return "招远市"; + case 370686: + return "栖霞市"; + case 370687: + return "海阳市"; + case 3707: + return "潍坊市"; + case 370701: + return "市辖区"; + case 370702: + return "潍城区"; + case 370703: + return "寒亭区"; + case 370704: + return "坊子区"; + case 370705: + return "奎文区"; + case 370724: + return "临朐县"; + case 370725: + return "昌乐县"; + case 370781: + return "青州市"; + case 370782: + return "诸城市"; + case 370783: + return "寿光市"; + case 370784: + return "安丘市"; + case 370785: + return "高密市"; + case 370786: + return "昌邑市"; + case 3708: + return "济宁市"; + case 370801: + return "市辖区"; + case 370811: + return "任城区"; + case 370812: + return "兖州区"; + case 370826: + return "微山县"; + case 370827: + return "鱼台县"; + case 370828: + return "金乡县"; + case 370829: + return "嘉祥县"; + case 370830: + return "汶上县"; + case 370831: + return "泗水县"; + case 370832: + return "梁山县"; + case 370881: + return "曲阜市"; + case 370883: + return "邹城市"; + case 3709: + return "泰安市"; + case 370901: + return "市辖区"; + case 370902: + return "泰山区"; + case 370911: + return "岱岳区"; + case 370921: + return "宁阳县"; + case 370923: + return "东平县"; + case 370982: + return "新泰市"; + case 370983: + return "肥城市"; + case 3710: + return "威海市"; + case 371001: + return "市辖区"; + case 371002: + return "环翠区"; + case 371003: + return "文登区"; + case 371082: + return "荣成市"; + case 371083: + return "乳山市"; + case 3711: + return "日照市"; + case 371101: + return "市辖区"; + case 371102: + return "东港区"; + case 371103: + return "岚山区"; + case 371121: + return "五莲县"; + case 371122: + return "莒县"; + case 3712: + return "莱芜市"; + case 371201: + return "市辖区"; + case 371202: + return "莱城区"; + case 371203: + return "钢城区"; + case 3713: + return "临沂市"; + case 371301: + return "市辖区"; + case 371302: + return "兰山区"; + case 371311: + return "罗庄区"; + case 371312: + return "河东区"; + case 371321: + return "沂南县"; + case 371322: + return "郯城县"; + case 371323: + return "沂水县"; + case 371324: + return "兰陵县"; + case 371325: + return "费县"; + case 371326: + return "平邑县"; + case 371327: + return "莒南县"; + case 371328: + return "蒙阴县"; + case 371329: + return "临沭县"; + case 3714: + return "德州市"; + case 371401: + return "市辖区"; + case 371402: + return "德城区"; + case 371403: + return "陵城区"; + case 371422: + return "宁津县"; + case 371423: + return "庆云县"; + case 371424: + return "临邑县"; + case 371425: + return "齐河县"; + case 371426: + return "平原县"; + case 371427: + return "夏津县"; + case 371428: + return "武城县"; + case 371481: + return "乐陵市"; + case 371482: + return "禹城市"; + case 3715: + return "聊城市"; + case 371501: + return "市辖区"; + case 371502: + return "东昌府区"; + case 371521: + return "阳谷县"; + case 371522: + return "莘县"; + case 371523: + return "茌平县"; + case 371524: + return "东阿县"; + case 371525: + return "冠县"; + case 371526: + return "高唐县"; + case 371581: + return "临清市"; + case 3716: + return "滨州市"; + case 371601: + return "市辖区"; + case 371602: + return "滨城区"; + case 371603: + return "沾化区"; + case 371621: + return "惠民县"; + case 371622: + return "阳信县"; + case 371623: + return "无棣县"; + case 371625: + return "博兴县"; + case 371626: + return "邹平县"; + case 3717: + return "菏泽市"; + case 371701: + return "市辖区"; + case 371702: + return "牡丹区"; + case 371721: + return "曹县"; + case 371722: + return "单县"; + case 371723: + return "成武县"; + case 371724: + return "巨野县"; + case 371725: + return "郓城县"; + case 371726: + return "鄄城县"; + case 371727: + return "定陶县"; + case 371728: + return "东明县"; + case 41: + return "河南省"; + case 4101: + return "郑州市"; + case 410101: + return "市辖区"; + case 410102: + return "中原区"; + case 410103: + return "二七区"; + case 410104: + return "管城回族区"; + case 410105: + return "金水区"; + case 410106: + return "上街区"; + case 410108: + return "惠济区"; + case 410122: + return "中牟县"; + case 410181: + return "巩义市"; + case 410182: + return "荥阳市"; + case 410183: + return "新密市"; + case 410184: + return "新郑市"; + case 410185: + return "登封市"; + case 4102: + return "开封市"; + case 410201: + return "市辖区"; + case 410202: + return "龙亭区"; + case 410203: + return "顺河回族区"; + case 410204: + return "鼓楼区"; + case 410205: + return "禹王台区"; + case 410211: + return "金明区"; + case 410221: + return "杞县"; + case 410222: + return "通许县"; + case 410223: + return "尉氏县"; + case 410224: + return "开封县"; + case 410225: + return "兰考县"; + case 4103: + return "洛阳市"; + case 410301: + return "市辖区"; + case 410302: + return "老城区"; + case 410303: + return "西工区"; + case 410304: + return "瀍河回族区"; + case 410305: + return "涧西区"; + case 410306: + return "吉利区"; + case 410311: + return "洛龙区"; + case 410322: + return "孟津县"; + case 410323: + return "新安县"; + case 410324: + return "栾川县"; + case 410325: + return "嵩县"; + case 410326: + return "汝阳县"; + case 410327: + return "宜阳县"; + case 410328: + return "洛宁县"; + case 410329: + return "伊川县"; + case 410381: + return "偃师市"; + case 4104: + return "平顶山市"; + case 410401: + return "市辖区"; + case 410402: + return "新华区"; + case 410403: + return "卫东区"; + case 410404: + return "石龙区"; + case 410411: + return "湛河区"; + case 410421: + return "宝丰县"; + case 410422: + return "叶县"; + case 410423: + return "鲁山县"; + case 410425: + return "郏县"; + case 410481: + return "舞钢市"; + case 410482: + return "汝州市"; + case 4105: + return "安阳市"; + case 410501: + return "市辖区"; + case 410502: + return "文峰区"; + case 410503: + return "北关区"; + case 410505: + return "殷都区"; + case 410506: + return "龙安区"; + case 410522: + return "安阳县"; + case 410523: + return "汤阴县"; + case 410526: + return "滑县"; + case 410527: + return "内黄县"; + case 410581: + return "林州市"; + case 4106: + return "鹤壁市"; + case 410601: + return "市辖区"; + case 410602: + return "鹤山区"; + case 410603: + return "山城区"; + case 410611: + return "淇滨区"; + case 410621: + return "浚县"; + case 410622: + return "淇县"; + case 4107: + return "新乡市"; + case 410701: + return "市辖区"; + case 410702: + return "红旗区"; + case 410703: + return "卫滨区"; + case 410704: + return "凤泉区"; + case 410711: + return "牧野区"; + case 410721: + return "新乡县"; + case 410724: + return "获嘉县"; + case 410725: + return "原阳县"; + case 410726: + return "延津县"; + case 410727: + return "封丘县"; + case 410728: + return "长垣县"; + case 410781: + return "卫辉市"; + case 410782: + return "辉县市"; + case 4108: + return "焦作市"; + case 410801: + return "市辖区"; + case 410802: + return "解放区"; + case 410803: + return "中站区"; + case 410804: + return "马村区"; + case 410811: + return "山阳区"; + case 410821: + return "修武县"; + case 410822: + return "博爱县"; + case 410823: + return "武陟县"; + case 410825: + return "温县"; + case 410882: + return "沁阳市"; + case 410883: + return "孟州市"; + case 4109: + return "濮阳市"; + case 410901: + return "市辖区"; + case 410902: + return "华龙区"; + case 410922: + return "清丰县"; + case 410923: + return "南乐县"; + case 410926: + return "范县"; + case 410927: + return "台前县"; + case 410928: + return "濮阳县"; + case 4110: + return "许昌市"; + case 411001: + return "市辖区"; + case 411002: + return "魏都区"; + case 411023: + return "许昌县"; + case 411024: + return "鄢陵县"; + case 411025: + return "襄城县"; + case 411081: + return "禹州市"; + case 411082: + return "长葛市"; + case 4111: + return "漯河市"; + case 411101: + return "市辖区"; + case 411102: + return "源汇区"; + case 411103: + return "郾城区"; + case 411104: + return "召陵区"; + case 411121: + return "舞阳县"; + case 411122: + return "临颍县"; + case 4112: + return "三门峡市"; + case 411201: + return "市辖区"; + case 411202: + return "湖滨区"; + case 411221: + return "渑池县"; + case 411222: + return "陕县"; + case 411224: + return "卢氏县"; + case 411281: + return "义马市"; + case 411282: + return "灵宝市"; + case 4113: + return "南阳市"; + case 411301: + return "市辖区"; + case 411302: + return "宛城区"; + case 411303: + return "卧龙区"; + case 411321: + return "南召县"; + case 411322: + return "方城县"; + case 411323: + return "西峡县"; + case 411324: + return "镇平县"; + case 411325: + return "内乡县"; + case 411326: + return "淅川县"; + case 411327: + return "社旗县"; + case 411328: + return "唐河县"; + case 411329: + return "新野县"; + case 411330: + return "桐柏县"; + case 411381: + return "邓州市"; + case 4114: + return "商丘市"; + case 411401: + return "市辖区"; + case 411402: + return "梁园区"; + case 411403: + return "睢阳区"; + case 411421: + return "民权县"; + case 411422: + return "睢县"; + case 411423: + return "宁陵县"; + case 411424: + return "柘城县"; + case 411425: + return "虞城县"; + case 411426: + return "夏邑县"; + case 411481: + return "永城市"; + case 4115: + return "信阳市"; + case 411501: + return "市辖区"; + case 411502: + return "浉河区"; + case 411503: + return "平桥区"; + case 411521: + return "罗山县"; + case 411522: + return "光山县"; + case 411523: + return "新县"; + case 411524: + return "商城县"; + case 411525: + return "固始县"; + case 411526: + return "潢川县"; + case 411527: + return "淮滨县"; + case 411528: + return "息县"; + case 4116: + return "周口市"; + case 411601: + return "市辖区"; + case 411602: + return "川汇区"; + case 411621: + return "扶沟县"; + case 411622: + return "西华县"; + case 411623: + return "商水县"; + case 411624: + return "沈丘县"; + case 411625: + return "郸城县"; + case 411626: + return "淮阳县"; + case 411627: + return "太康县"; + case 411628: + return "鹿邑县"; + case 411681: + return "项城市"; + case 4117: + return "驻马店市"; + case 411701: + return "市辖区"; + case 411702: + return "驿城区"; + case 411721: + return "西平县"; + case 411722: + return "上蔡县"; + case 411723: + return "平舆县"; + case 411724: + return "正阳县"; + case 411725: + return "确山县"; + case 411726: + return "泌阳县"; + case 411727: + return "汝南县"; + case 411728: + return "遂平县"; + case 411729: + return "新蔡县"; + case 4190: + return "省直辖县级行政区划"; + case 419001: + return "济源市"; + case 42: + return "湖北省"; + case 4201: + return "武汉市"; + case 420101: + return "市辖区"; + case 420102: + return "江岸区"; + case 420103: + return "江汉区"; + case 420104: + return "硚口区"; + case 420105: + return "汉阳区"; + case 420106: + return "武昌区"; + case 420107: + return "青山区"; + case 420111: + return "洪山区"; + case 420112: + return "东西湖区"; + case 420113: + return "汉南区"; + case 420114: + return "蔡甸区"; + case 420115: + return "江夏区"; + case 420116: + return "黄陂区"; + case 420117: + return "新洲区"; + case 4202: + return "黄石市"; + case 420201: + return "市辖区"; + case 420202: + return "黄石港区"; + case 420203: + return "西塞山区"; + case 420204: + return "下陆区"; + case 420205: + return "铁山区"; + case 420222: + return "阳新县"; + case 420281: + return "大冶市"; + case 4203: + return "十堰市"; + case 420301: + return "市辖区"; + case 420302: + return "茅箭区"; + case 420303: + return "张湾区"; + case 420304: + return "郧阳区"; + case 420322: + return "郧西县"; + case 420323: + return "竹山县"; + case 420324: + return "竹溪县"; + case 420325: + return "房县"; + case 420381: + return "丹江口市"; + case 4205: + return "宜昌市"; + case 420501: + return "市辖区"; + case 420502: + return "西陵区"; + case 420503: + return "伍家岗区"; + case 420504: + return "点军区"; + case 420505: + return "猇亭区"; + case 420506: + return "夷陵区"; + case 420525: + return "远安县"; + case 420526: + return "兴山县"; + case 420527: + return "秭归县"; + case 420528: + return "长阳土家族自治县"; + case 420529: + return "五峰土家族自治县"; + case 420581: + return "宜都市"; + case 420582: + return "当阳市"; + case 420583: + return "枝江市"; + case 4206: + return "襄阳市"; + case 420601: + return "市辖区"; + case 420602: + return "襄城区"; + case 420606: + return "樊城区"; + case 420607: + return "襄州区"; + case 420624: + return "南漳县"; + case 420625: + return "谷城县"; + case 420626: + return "保康县"; + case 420682: + return "老河口市"; + case 420683: + return "枣阳市"; + case 420684: + return "宜城市"; + case 4207: + return "鄂州市"; + case 420701: + return "市辖区"; + case 420702: + return "梁子湖区"; + case 420703: + return "华容区"; + case 420704: + return "鄂城区"; + case 4208: + return "荆门市"; + case 420801: + return "市辖区"; + case 420802: + return "东宝区"; + case 420804: + return "掇刀区"; + case 420821: + return "京山县"; + case 420822: + return "沙洋县"; + case 420881: + return "钟祥市"; + case 4209: + return "孝感市"; + case 420901: + return "市辖区"; + case 420902: + return "孝南区"; + case 420921: + return "孝昌县"; + case 420922: + return "大悟县"; + case 420923: + return "云梦县"; + case 420981: + return "应城市"; + case 420982: + return "安陆市"; + case 420984: + return "汉川市"; + case 4210: + return "荆州市"; + case 421001: + return "市辖区"; + case 421002: + return "沙市区"; + case 421003: + return "荆州区"; + case 421022: + return "公安县"; + case 421023: + return "监利县"; + case 421024: + return "江陵县"; + case 421081: + return "石首市"; + case 421083: + return "洪湖市"; + case 421087: + return "松滋市"; + case 4211: + return "黄冈市"; + case 421101: + return "市辖区"; + case 421102: + return "黄州区"; + case 421121: + return "团风县"; + case 421122: + return "红安县"; + case 421123: + return "罗田县"; + case 421124: + return "英山县"; + case 421125: + return "浠水县"; + case 421126: + return "蕲春县"; + case 421127: + return "黄梅县"; + case 421181: + return "麻城市"; + case 421182: + return "武穴市"; + case 4212: + return "咸宁市"; + case 421201: + return "市辖区"; + case 421202: + return "咸安区"; + case 421221: + return "嘉鱼县"; + case 421222: + return "通城县"; + case 421223: + return "崇阳县"; + case 421224: + return "通山县"; + case 421281: + return "赤壁市"; + case 4213: + return "随州市"; + case 421301: + return "市辖区"; + case 421303: + return "曾都区"; + case 421321: + return "随县"; + case 421381: + return "广水市"; + case 4228: + return "恩施土家族苗族自治州"; + case 422801: + return "恩施市"; + case 422802: + return "利川市"; + case 422822: + return "建始县"; + case 422823: + return "巴东县"; + case 422825: + return "宣恩县"; + case 422826: + return "咸丰县"; + case 422827: + return "来凤县"; + case 422828: + return "鹤峰县"; + case 4290: + return "省直辖县级行政区划"; + case 429004: + return "仙桃市"; + case 429005: + return "潜江市"; + case 429006: + return "天门市"; + case 429021: + return "神农架林区"; + case 43: + return "湖南省"; + case 4301: + return "长沙市"; + case 430101: + return "市辖区"; + case 430102: + return "芙蓉区"; + case 430103: + return "天心区"; + case 430104: + return "岳麓区"; + case 430105: + return "开福区"; + case 430111: + return "雨花区"; + case 430112: + return "望城区"; + case 430121: + return "长沙县"; + case 430124: + return "宁乡县"; + case 430181: + return "浏阳市"; + case 4302: + return "株洲市"; + case 430201: + return "市辖区"; + case 430202: + return "荷塘区"; + case 430203: + return "芦淞区"; + case 430204: + return "石峰区"; + case 430211: + return "天元区"; + case 430221: + return "株洲县"; + case 430223: + return "攸县"; + case 430224: + return "茶陵县"; + case 430225: + return "炎陵县"; + case 430281: + return "醴陵市"; + case 4303: + return "湘潭市"; + case 430301: + return "市辖区"; + case 430302: + return "雨湖区"; + case 430304: + return "岳塘区"; + case 430321: + return "湘潭县"; + case 430381: + return "湘乡市"; + case 430382: + return "韶山市"; + case 4304: + return "衡阳市"; + case 430401: + return "市辖区"; + case 430405: + return "珠晖区"; + case 430406: + return "雁峰区"; + case 430407: + return "石鼓区"; + case 430408: + return "蒸湘区"; + case 430412: + return "南岳区"; + case 430421: + return "衡阳县"; + case 430422: + return "衡南县"; + case 430423: + return "衡山县"; + case 430424: + return "衡东县"; + case 430426: + return "祁东县"; + case 430481: + return "耒阳市"; + case 430482: + return "常宁市"; + case 4305: + return "邵阳市"; + case 430501: + return "市辖区"; + case 430502: + return "双清区"; + case 430503: + return "大祥区"; + case 430511: + return "北塔区"; + case 430521: + return "邵东县"; + case 430522: + return "新邵县"; + case 430523: + return "邵阳县"; + case 430524: + return "隆回县"; + case 430525: + return "洞口县"; + case 430527: + return "绥宁县"; + case 430528: + return "新宁县"; + case 430529: + return "城步苗族自治县"; + case 430581: + return "武冈市"; + case 4306: + return "岳阳市"; + case 430601: + return "市辖区"; + case 430602: + return "岳阳楼区"; + case 430603: + return "云溪区"; + case 430611: + return "君山区"; + case 430621: + return "岳阳县"; + case 430623: + return "华容县"; + case 430624: + return "湘阴县"; + case 430626: + return "平江县"; + case 430681: + return "汨罗市"; + case 430682: + return "临湘市"; + case 4307: + return "常德市"; + case 430701: + return "市辖区"; + case 430702: + return "武陵区"; + case 430703: + return "鼎城区"; + case 430721: + return "安乡县"; + case 430722: + return "汉寿县"; + case 430723: + return "澧县"; + case 430724: + return "临澧县"; + case 430725: + return "桃源县"; + case 430726: + return "石门县"; + case 430781: + return "津市市"; + case 4308: + return "张家界市"; + case 430801: + return "市辖区"; + case 430802: + return "永定区"; + case 430811: + return "武陵源区"; + case 430821: + return "慈利县"; + case 430822: + return "桑植县"; + case 4309: + return "益阳市"; + case 430901: + return "市辖区"; + case 430902: + return "资阳区"; + case 430903: + return "赫山区"; + case 430921: + return "南县"; + case 430922: + return "桃江县"; + case 430923: + return "安化县"; + case 430981: + return "沅江市"; + case 4310: + return "郴州市"; + case 431001: + return "市辖区"; + case 431002: + return "北湖区"; + case 431003: + return "苏仙区"; + case 431021: + return "桂阳县"; + case 431022: + return "宜章县"; + case 431023: + return "永兴县"; + case 431024: + return "嘉禾县"; + case 431025: + return "临武县"; + case 431026: + return "汝城县"; + case 431027: + return "桂东县"; + case 431028: + return "安仁县"; + case 431081: + return "资兴市"; + case 4311: + return "永州市"; + case 431101: + return "市辖区"; + case 431102: + return "零陵区"; + case 431103: + return "冷水滩区"; + case 431121: + return "祁阳县"; + case 431122: + return "东安县"; + case 431123: + return "双牌县"; + case 431124: + return "道县"; + case 431125: + return "江永县"; + case 431126: + return "宁远县"; + case 431127: + return "蓝山县"; + case 431128: + return "新田县"; + case 431129: + return "江华瑶族自治县"; + case 4312: + return "怀化市"; + case 431201: + return "市辖区"; + case 431202: + return "鹤城区"; + case 431221: + return "中方县"; + case 431222: + return "沅陵县"; + case 431223: + return "辰溪县"; + case 431224: + return "溆浦县"; + case 431225: + return "会同县"; + case 431226: + return "麻阳苗族自治县"; + case 431227: + return "新晃侗族自治县"; + case 431228: + return "芷江侗族自治县"; + case 431229: + return "靖州苗族侗族自治县"; + case 431230: + return "通道侗族自治县"; + case 431281: + return "洪江市"; + case 4313: + return "娄底市"; + case 431301: + return "市辖区"; + case 431302: + return "娄星区"; + case 431321: + return "双峰县"; + case 431322: + return "新化县"; + case 431381: + return "冷水江市"; + case 431382: + return "涟源市"; + case 4331: + return "湘西土家族苗族自治州"; + case 433101: + return "吉首市"; + case 433122: + return "泸溪县"; + case 433123: + return "凤凰县"; + case 433124: + return "花垣县"; + case 433125: + return "保靖县"; + case 433126: + return "古丈县"; + case 433127: + return "永顺县"; + case 433130: + return "龙山县"; + case 44: + return "广东省"; + case 4401: + return "广州市"; + case 440101: + return "市辖区"; + case 440103: + return "荔湾区"; + case 440104: + return "越秀区"; + case 440105: + return "海珠区"; + case 440106: + return "天河区"; + case 440111: + return "白云区"; + case 440112: + return "黄埔区"; + case 440113: + return "番禺区"; + case 440114: + return "花都区"; + case 440115: + return "南沙区"; + case 440116: + return "萝岗区"; + case 440117: + return "从化区"; + case 440118: + return "增城区"; + case 4402: + return "韶关市"; + case 440201: + return "市辖区"; + case 440203: + return "武江区"; + case 440204: + return "浈江区"; + case 440205: + return "曲江区"; + case 440222: + return "始兴县"; + case 440224: + return "仁化县"; + case 440229: + return "翁源县"; + case 440232: + return "乳源瑶族自治县"; + case 440233: + return "新丰县"; + case 440281: + return "乐昌市"; + case 440282: + return "南雄市"; + case 4403: + return "深圳市"; + case 440301: + return "市辖区"; + case 440303: + return "罗湖区"; + case 440304: + return "福田区"; + case 440305: + return "南山区"; + case 440306: + return "宝安区"; + case 440307: + return "龙岗区"; + case 440308: + return "盐田区"; + case 4404: + return "珠海市"; + case 440401: + return "市辖区"; + case 440402: + return "香洲区"; + case 440403: + return "斗门区"; + case 440404: + return "金湾区"; + case 4405: + return "汕头市"; + case 440501: + return "市辖区"; + case 440507: + return "龙湖区"; + case 440511: + return "金平区"; + case 440512: + return "濠江区"; + case 440513: + return "潮阳区"; + case 440514: + return "潮南区"; + case 440515: + return "澄海区"; + case 440523: + return "南澳县"; + case 4406: + return "佛山市"; + case 440601: + return "市辖区"; + case 440604: + return "禅城区"; + case 440605: + return "南海区"; + case 440606: + return "顺德区"; + case 440607: + return "三水区"; + case 440608: + return "高明区"; + case 4407: + return "江门市"; + case 440701: + return "市辖区"; + case 440703: + return "蓬江区"; + case 440704: + return "江海区"; + case 440705: + return "新会区"; + case 440781: + return "台山市"; + case 440783: + return "开平市"; + case 440784: + return "鹤山市"; + case 440785: + return "恩平市"; + case 4408: + return "湛江市"; + case 440801: + return "市辖区"; + case 440802: + return "赤坎区"; + case 440803: + return "霞山区"; + case 440804: + return "坡头区"; + case 440811: + return "麻章区"; + case 440823: + return "遂溪县"; + case 440825: + return "徐闻县"; + case 440881: + return "廉江市"; + case 440882: + return "雷州市"; + case 440883: + return "吴川市"; + case 4409: + return "茂名市"; + case 440901: + return "市辖区"; + case 440902: + return "茂南区"; + case 440904: + return "电白区"; + case 440981: + return "高州市"; + case 440982: + return "化州市"; + case 440983: + return "信宜市"; + case 4412: + return "肇庆市"; + case 441201: + return "市辖区"; + case 441202: + return "端州区"; + case 441203: + return "鼎湖区"; + case 441223: + return "广宁县"; + case 441224: + return "怀集县"; + case 441225: + return "封开县"; + case 441226: + return "德庆县"; + case 441283: + return "高要市"; + case 441284: + return "四会市"; + case 4413: + return "惠州市"; + case 441301: + return "市辖区"; + case 441302: + return "惠城区"; + case 441303: + return "惠阳区"; + case 441322: + return "博罗县"; + case 441323: + return "惠东县"; + case 441324: + return "龙门县"; + case 4414: + return "梅州市"; + case 441401: + return "市辖区"; + case 441402: + return "梅江区"; + case 441403: + return "梅县区"; + case 441422: + return "大埔县"; + case 441423: + return "丰顺县"; + case 441424: + return "五华县"; + case 441426: + return "平远县"; + case 441427: + return "蕉岭县"; + case 441481: + return "兴宁市"; + case 4415: + return "汕尾市"; + case 441501: + return "市辖区"; + case 441502: + return "城区"; + case 441521: + return "海丰县"; + case 441523: + return "陆河县"; + case 441581: + return "陆丰市"; + case 4416: + return "河源市"; + case 441601: + return "市辖区"; + case 441602: + return "源城区"; + case 441621: + return "紫金县"; + case 441622: + return "龙川县"; + case 441623: + return "连平县"; + case 441624: + return "和平县"; + case 441625: + return "东源县"; + case 4417: + return "阳江市"; + case 441701: + return "市辖区"; + case 441702: + return "江城区"; + case 441721: + return "阳西县"; + case 441723: + return "阳东县"; + case 441781: + return "阳春市"; + case 4418: + return "清远市"; + case 441801: + return "市辖区"; + case 441802: + return "清城区"; + case 441803: + return "清新区"; + case 441821: + return "佛冈县"; + case 441823: + return "阳山县"; + case 441825: + return "连山壮族瑶族自治县"; + case 441826: + return "连南瑶族自治县"; + case 441881: + return "英德市"; + case 441882: + return "连州市"; + case 4419: + return "东莞市"; + case 4420: + return "中山市"; + case 4451: + return "潮州市"; + case 445101: + return "市辖区"; + case 445102: + return "湘桥区"; + case 445103: + return "潮安区"; + case 445122: + return "饶平县"; + case 4452: + return "揭阳市"; + case 445201: + return "市辖区"; + case 445202: + return "榕城区"; + case 445203: + return "揭东区"; + case 445222: + return "揭西县"; + case 445224: + return "惠来县"; + case 445281: + return "普宁市"; + case 4453: + return "云浮市"; + case 445301: + return "市辖区"; + case 445302: + return "云城区"; + case 445303: + return "云安区"; + case 445321: + return "新兴县"; + case 445322: + return "郁南县"; + case 445381: + return "罗定市"; + case 45: + return "广西壮族自治区"; + case 4501: + return "南宁市"; + case 450101: + return "市辖区"; + case 450102: + return "兴宁区"; + case 450103: + return "青秀区"; + case 450105: + return "江南区"; + case 450107: + return "西乡塘区"; + case 450108: + return "良庆区"; + case 450109: + return "邕宁区"; + case 450122: + return "武鸣县"; + case 450123: + return "隆安县"; + case 450124: + return "马山县"; + case 450125: + return "上林县"; + case 450126: + return "宾阳县"; + case 450127: + return "横县"; + case 4502: + return "柳州市"; + case 450201: + return "市辖区"; + case 450202: + return "城中区"; + case 450203: + return "鱼峰区"; + case 450204: + return "柳南区"; + case 450205: + return "柳北区"; + case 450221: + return "柳江县"; + case 450222: + return "柳城县"; + case 450223: + return "鹿寨县"; + case 450224: + return "融安县"; + case 450225: + return "融水苗族自治县"; + case 450226: + return "三江侗族自治县"; + case 4503: + return "桂林市"; + case 450301: + return "市辖区"; + case 450302: + return "秀峰区"; + case 450303: + return "叠彩区"; + case 450304: + return "象山区"; + case 450305: + return "七星区"; + case 450311: + return "雁山区"; + case 450312: + return "临桂区"; + case 450321: + return "阳朔县"; + case 450323: + return "灵川县"; + case 450324: + return "全州县"; + case 450325: + return "兴安县"; + case 450326: + return "永福县"; + case 450327: + return "灌阳县"; + case 450328: + return "龙胜各族自治县"; + case 450329: + return "资源县"; + case 450330: + return "平乐县"; + case 450331: + return "荔浦县"; + case 450332: + return "恭城瑶族自治县"; + case 4504: + return "梧州市"; + case 450401: + return "市辖区"; + case 450403: + return "万秀区"; + case 450405: + return "长洲区"; + case 450406: + return "龙圩区"; + case 450421: + return "苍梧县"; + case 450422: + return "藤县"; + case 450423: + return "蒙山县"; + case 450481: + return "岑溪市"; + case 4505: + return "北海市"; + case 450501: + return "市辖区"; + case 450502: + return "海城区"; + case 450503: + return "银海区"; + case 450512: + return "铁山港区"; + case 450521: + return "合浦县"; + case 4506: + return "防城港市"; + case 450601: + return "市辖区"; + case 450602: + return "港口区"; + case 450603: + return "防城区"; + case 450621: + return "上思县"; + case 450681: + return "东兴市"; + case 4507: + return "钦州市"; + case 450701: + return "市辖区"; + case 450702: + return "钦南区"; + case 450703: + return "钦北区"; + case 450721: + return "灵山县"; + case 450722: + return "浦北县"; + case 4508: + return "贵港市"; + case 450801: + return "市辖区"; + case 450802: + return "港北区"; + case 450803: + return "港南区"; + case 450804: + return "覃塘区"; + case 450821: + return "平南县"; + case 450881: + return "桂平市"; + case 4509: + return "玉林市"; + case 450901: + return "市辖区"; + case 450902: + return "玉州区"; + case 450903: + return "福绵区"; + case 450921: + return "容县"; + case 450922: + return "陆川县"; + case 450923: + return "博白县"; + case 450924: + return "兴业县"; + case 450981: + return "北流市"; + case 4510: + return "百色市"; + case 451001: + return "市辖区"; + case 451002: + return "右江区"; + case 451021: + return "田阳县"; + case 451022: + return "田东县"; + case 451023: + return "平果县"; + case 451024: + return "德保县"; + case 451025: + return "靖西县"; + case 451026: + return "那坡县"; + case 451027: + return "凌云县"; + case 451028: + return "乐业县"; + case 451029: + return "田林县"; + case 451030: + return "西林县"; + case 451031: + return "隆林各族自治县"; + case 4511: + return "贺州市"; + case 451101: + return "市辖区"; + case 451102: + return "八步区"; + case 451121: + return "昭平县"; + case 451122: + return "钟山县"; + case 451123: + return "富川瑶族自治县"; + case 4512: + return "河池市"; + case 451201: + return "市辖区"; + case 451202: + return "金城江区"; + case 451221: + return "南丹县"; + case 451222: + return "天峨县"; + case 451223: + return "凤山县"; + case 451224: + return "东兰县"; + case 451225: + return "罗城仫佬族自治县"; + case 451226: + return "环江毛南族自治县"; + case 451227: + return "巴马瑶族自治县"; + case 451228: + return "都安瑶族自治县"; + case 451229: + return "大化瑶族自治县"; + case 451281: + return "宜州市"; + case 4513: + return "来宾市"; + case 451301: + return "市辖区"; + case 451302: + return "兴宾区"; + case 451321: + return "忻城县"; + case 451322: + return "象州县"; + case 451323: + return "武宣县"; + case 451324: + return "金秀瑶族自治县"; + case 451381: + return "合山市"; + case 4514: + return "崇左市"; + case 451401: + return "市辖区"; + case 451402: + return "江州区"; + case 451421: + return "扶绥县"; + case 451422: + return "宁明县"; + case 451423: + return "龙州县"; + case 451424: + return "大新县"; + case 451425: + return "天等县"; + case 451481: + return "凭祥市"; + case 46: + return "海南省"; + case 4601: + return "海口市"; + case 460101: + return "市辖区"; + case 460105: + return "秀英区"; + case 460106: + return "龙华区"; + case 460107: + return "琼山区"; + case 460108: + return "美兰区"; + case 4602: + return "三亚市"; + case 460201: + return "市辖区"; + case 460202: + return "海棠区"; + case 460203: + return "吉阳区"; + case 460204: + return "天涯区"; + case 460205: + return "崖州区"; + case 4603: + return "三沙市"; + case 4690: + return "省直辖县级行政区划"; + case 469001: + return "五指山市"; + case 469002: + return "琼海市"; + case 469003: + return "儋州市"; + case 469005: + return "文昌市"; + case 469006: + return "万宁市"; + case 469007: + return "东方市"; + case 469021: + return "定安县"; + case 469022: + return "屯昌县"; + case 469023: + return "澄迈县"; + case 469024: + return "临高县"; + case 469025: + return "白沙黎族自治县"; + case 469026: + return "昌江黎族自治县"; + case 469027: + return "乐东黎族自治县"; + case 469028: + return "陵水黎族自治县"; + case 469029: + return "保亭黎族苗族自治县"; + case 469030: + return "琼中黎族苗族自治县"; + case 50: + return "重庆市"; + case 5001: + return "市辖区"; + case 500101: + return "万州区"; + case 500102: + return "涪陵区"; + case 500103: + return "渝中区"; + case 500104: + return "大渡口区"; + case 500105: + return "江北区"; + case 500106: + return "沙坪坝区"; + case 500107: + return "九龙坡区"; + case 500108: + return "南岸区"; + case 500109: + return "北碚区"; + case 500110: + return "綦江区"; + case 500111: + return "大足区"; + case 500112: + return "渝北区"; + case 500113: + return "巴南区"; + case 500114: + return "黔江区"; + case 500115: + return "长寿区"; + case 500116: + return "江津区"; + case 500117: + return "合川区"; + case 500118: + return "永川区"; + case 500119: + return "南川区"; + case 500120: + return "璧山区"; + case 500151: + return "铜梁区"; + case 5002: + return "县"; + case 500223: + return "潼南县"; + case 500226: + return "荣昌县"; + case 500228: + return "梁平县"; + case 500229: + return "城口县"; + case 500230: + return "丰都县"; + case 500231: + return "垫江县"; + case 500232: + return "武隆县"; + case 500233: + return "忠县"; + case 500234: + return "开县"; + case 500235: + return "云阳县"; + case 500236: + return "奉节县"; + case 500237: + return "巫山县"; + case 500238: + return "巫溪县"; + case 500240: + return "石柱土家族自治县"; + case 500241: + return "秀山土家族苗族自治县"; + case 500242: + return "酉阳土家族苗族自治县"; + case 500243: + return "彭水苗族土家族自治县"; + case 51: + return "四川省"; + case 5101: + return "成都市"; + case 510101: + return "市辖区"; + case 510104: + return "锦江区"; + case 510105: + return "青羊区"; + case 510106: + return "金牛区"; + case 510107: + return "武侯区"; + case 510108: + return "成华区"; + case 510112: + return "龙泉驿区"; + case 510113: + return "青白江区"; + case 510114: + return "新都区"; + case 510115: + return "温江区"; + case 510121: + return "金堂县"; + case 510122: + return "双流县"; + case 510124: + return "郫县"; + case 510129: + return "大邑县"; + case 510131: + return "蒲江县"; + case 510132: + return "新津县"; + case 510181: + return "都江堰市"; + case 510182: + return "彭州市"; + case 510183: + return "邛崃市"; + case 510184: + return "崇州市"; + case 5103: + return "自贡市"; + case 510301: + return "市辖区"; + case 510302: + return "自流井区"; + case 510303: + return "贡井区"; + case 510304: + return "大安区"; + case 510311: + return "沿滩区"; + case 510321: + return "荣县"; + case 510322: + return "富顺县"; + case 5104: + return "攀枝花市"; + case 510401: + return "市辖区"; + case 510402: + return "东区"; + case 510403: + return "西区"; + case 510411: + return "仁和区"; + case 510421: + return "米易县"; + case 510422: + return "盐边县"; + case 5105: + return "泸州市"; + case 510501: + return "市辖区"; + case 510502: + return "江阳区"; + case 510503: + return "纳溪区"; + case 510504: + return "龙马潭区"; + case 510521: + return "泸县"; + case 510522: + return "合江县"; + case 510524: + return "叙永县"; + case 510525: + return "古蔺县"; + case 5106: + return "德阳市"; + case 510601: + return "市辖区"; + case 510603: + return "旌阳区"; + case 510623: + return "中江县"; + case 510626: + return "罗江县"; + case 510681: + return "广汉市"; + case 510682: + return "什邡市"; + case 510683: + return "绵竹市"; + case 5107: + return "绵阳市"; + case 510701: + return "市辖区"; + case 510703: + return "涪城区"; + case 510704: + return "游仙区"; + case 510722: + return "三台县"; + case 510723: + return "盐亭县"; + case 510724: + return "安县"; + case 510725: + return "梓潼县"; + case 510726: + return "北川羌族自治县"; + case 510727: + return "平武县"; + case 510781: + return "江油市"; + case 5108: + return "广元市"; + case 510801: + return "市辖区"; + case 510802: + return "利州区"; + case 510811: + return "昭化区"; + case 510812: + return "朝天区"; + case 510821: + return "旺苍县"; + case 510822: + return "青川县"; + case 510823: + return "剑阁县"; + case 510824: + return "苍溪县"; + case 5109: + return "遂宁市"; + case 510901: + return "市辖区"; + case 510903: + return "船山区"; + case 510904: + return "安居区"; + case 510921: + return "蓬溪县"; + case 510922: + return "射洪县"; + case 510923: + return "大英县"; + case 5110: + return "内江市"; + case 511001: + return "市辖区"; + case 511002: + return "市中区"; + case 511011: + return "东兴区"; + case 511024: + return "威远县"; + case 511025: + return "资中县"; + case 511028: + return "隆昌县"; + case 5111: + return "乐山市"; + case 511101: + return "市辖区"; + case 511102: + return "市中区"; + case 511111: + return "沙湾区"; + case 511112: + return "五通桥区"; + case 511113: + return "金口河区"; + case 511123: + return "犍为县"; + case 511124: + return "井研县"; + case 511126: + return "夹江县"; + case 511129: + return "沐川县"; + case 511132: + return "峨边彝族自治县"; + case 511133: + return "马边彝族自治县"; + case 511181: + return "峨眉山市"; + case 5113: + return "南充市"; + case 511301: + return "市辖区"; + case 511302: + return "顺庆区"; + case 511303: + return "高坪区"; + case 511304: + return "嘉陵区"; + case 511321: + return "南部县"; + case 511322: + return "营山县"; + case 511323: + return "蓬安县"; + case 511324: + return "仪陇县"; + case 511325: + return "西充县"; + case 511381: + return "阆中市"; + case 5114: + return "眉山市"; + case 511401: + return "市辖区"; + case 511402: + return "东坡区"; + case 511421: + return "仁寿县"; + case 511422: + return "彭山县"; + case 511423: + return "洪雅县"; + case 511424: + return "丹棱县"; + case 511425: + return "青神县"; + case 5115: + return "宜宾市"; + case 511501: + return "市辖区"; + case 511502: + return "翠屏区"; + case 511503: + return "南溪区"; + case 511521: + return "宜宾县"; + case 511523: + return "江安县"; + case 511524: + return "长宁县"; + case 511525: + return "高县"; + case 511526: + return "珙县"; + case 511527: + return "筠连县"; + case 511528: + return "兴文县"; + case 511529: + return "屏山县"; + case 5116: + return "广安市"; + case 511601: + return "市辖区"; + case 511602: + return "广安区"; + case 511603: + return "前锋区"; + case 511621: + return "岳池县"; + case 511622: + return "武胜县"; + case 511623: + return "邻水县"; + case 511681: + return "华蓥市"; + case 5117: + return "达州市"; + case 511701: + return "市辖区"; + case 511702: + return "通川区"; + case 511703: + return "达川区"; + case 511722: + return "宣汉县"; + case 511723: + return "开江县"; + case 511724: + return "大竹县"; + case 511725: + return "渠县"; + case 511781: + return "万源市"; + case 5118: + return "雅安市"; + case 511801: + return "市辖区"; + case 511802: + return "雨城区"; + case 511803: + return "名山区"; + case 511822: + return "荥经县"; + case 511823: + return "汉源县"; + case 511824: + return "石棉县"; + case 511825: + return "天全县"; + case 511826: + return "芦山县"; + case 511827: + return "宝兴县"; + case 5119: + return "巴中市"; + case 511901: + return "市辖区"; + case 511902: + return "巴州区"; + case 511903: + return "恩阳区"; + case 511921: + return "通江县"; + case 511922: + return "南江县"; + case 511923: + return "平昌县"; + case 5120: + return "资阳市"; + case 512001: + return "市辖区"; + case 512002: + return "雁江区"; + case 512021: + return "安岳县"; + case 512022: + return "乐至县"; + case 512081: + return "简阳市"; + case 5132: + return "阿坝藏族羌族自治州"; + case 513221: + return "汶川县"; + case 513222: + return "理县"; + case 513223: + return "茂县"; + case 513224: + return "松潘县"; + case 513225: + return "九寨沟县"; + case 513226: + return "金川县"; + case 513227: + return "小金县"; + case 513228: + return "黑水县"; + case 513229: + return "马尔康县"; + case 513230: + return "壤塘县"; + case 513231: + return "阿坝县"; + case 513232: + return "若尔盖县"; + case 513233: + return "红原县"; + case 5133: + return "甘孜藏族自治州"; + case 513321: + return "康定县"; + case 513322: + return "泸定县"; + case 513323: + return "丹巴县"; + case 513324: + return "九龙县"; + case 513325: + return "雅江县"; + case 513326: + return "道孚县"; + case 513327: + return "炉霍县"; + case 513328: + return "甘孜县"; + case 513329: + return "新龙县"; + case 513330: + return "德格县"; + case 513331: + return "白玉县"; + case 513332: + return "石渠县"; + case 513333: + return "色达县"; + case 513334: + return "理塘县"; + case 513335: + return "巴塘县"; + case 513336: + return "乡城县"; + case 513337: + return "稻城县"; + case 513338: + return "得荣县"; + case 5134: + return "凉山彝族自治州"; + case 513401: + return "西昌市"; + case 513422: + return "木里藏族自治县"; + case 513423: + return "盐源县"; + case 513424: + return "德昌县"; + case 513425: + return "会理县"; + case 513426: + return "会东县"; + case 513427: + return "宁南县"; + case 513428: + return "普格县"; + case 513429: + return "布拖县"; + case 513430: + return "金阳县"; + case 513431: + return "昭觉县"; + case 513432: + return "喜德县"; + case 513433: + return "冕宁县"; + case 513434: + return "越西县"; + case 513435: + return "甘洛县"; + case 513436: + return "美姑县"; + case 513437: + return "雷波县"; + case 52: + return "贵州省"; + case 5201: + return "贵阳市"; + case 520101: + return "市辖区"; + case 520102: + return "南明区"; + case 520103: + return "云岩区"; + case 520111: + return "花溪区"; + case 520112: + return "乌当区"; + case 520113: + return "白云区"; + case 520115: + return "观山湖区"; + case 520121: + return "开阳县"; + case 520122: + return "息烽县"; + case 520123: + return "修文县"; + case 520181: + return "清镇市"; + case 5202: + return "六盘水市"; + case 520201: + return "钟山区"; + case 520203: + return "六枝特区"; + case 520221: + return "水城县"; + case 520222: + return "盘县"; + case 5203: + return "遵义市"; + case 520301: + return "市辖区"; + case 520302: + return "红花岗区"; + case 520303: + return "汇川区"; + case 520321: + return "遵义县"; + case 520322: + return "桐梓县"; + case 520323: + return "绥阳县"; + case 520324: + return "正安县"; + case 520325: + return "道真仡佬族苗族自治县"; + case 520326: + return "务川仡佬族苗族自治县"; + case 520327: + return "凤冈县"; + case 520328: + return "湄潭县"; + case 520329: + return "余庆县"; + case 520330: + return "习水县"; + case 520381: + return "赤水市"; + case 520382: + return "仁怀市"; + case 5204: + return "安顺市"; + case 520401: + return "市辖区"; + case 520402: + return "西秀区"; + case 520421: + return "平坝县"; + case 520422: + return "普定县"; + case 520423: + return "镇宁布依族苗族自治县"; + case 520424: + return "关岭布依族苗族自治县"; + case 520425: + return "紫云苗族布依族自治县"; + case 5205: + return "毕节市"; + case 520501: + return "市辖区"; + case 520502: + return "七星关区"; + case 520521: + return "大方县"; + case 520522: + return "黔西县"; + case 520523: + return "金沙县"; + case 520524: + return "织金县"; + case 520525: + return "纳雍县"; + case 520526: + return "威宁彝族回族苗族自治县"; + case 520527: + return "赫章县"; + case 5206: + return "铜仁市"; + case 520601: + return "市辖区"; + case 520602: + return "碧江区"; + case 520603: + return "万山区"; + case 520621: + return "江口县"; + case 520622: + return "玉屏侗族自治县"; + case 520623: + return "石阡县"; + case 520624: + return "思南县"; + case 520625: + return "印江土家族苗族自治县"; + case 520626: + return "德江县"; + case 520627: + return "沿河土家族自治县"; + case 520628: + return "松桃苗族自治县"; + case 5223: + return "黔西南布依族苗族自治州"; + case 522301: + return "兴义市"; + case 522322: + return "兴仁县"; + case 522323: + return "普安县"; + case 522324: + return "晴隆县"; + case 522325: + return "贞丰县"; + case 522326: + return "望谟县"; + case 522327: + return "册亨县"; + case 522328: + return "安龙县"; + case 5226: + return "黔东南苗族侗族自治州"; + case 522601: + return "凯里市"; + case 522622: + return "黄平县"; + case 522623: + return "施秉县"; + case 522624: + return "三穗县"; + case 522625: + return "镇远县"; + case 522626: + return "岑巩县"; + case 522627: + return "天柱县"; + case 522628: + return "锦屏县"; + case 522629: + return "剑河县"; + case 522630: + return "台江县"; + case 522631: + return "黎平县"; + case 522632: + return "榕江县"; + case 522633: + return "从江县"; + case 522634: + return "雷山县"; + case 522635: + return "麻江县"; + case 522636: + return "丹寨县"; + case 5227: + return "黔南布依族苗族自治州"; + case 522701: + return "都匀市"; + case 522702: + return "福泉市"; + case 522722: + return "荔波县"; + case 522723: + return "贵定县"; + case 522725: + return "瓮安县"; + case 522726: + return "独山县"; + case 522727: + return "平塘县"; + case 522728: + return "罗甸县"; + case 522729: + return "长顺县"; + case 522730: + return "龙里县"; + case 522731: + return "惠水县"; + case 522732: + return "三都水族自治县"; + case 53: + return "云南省"; + case 5301: + return "昆明市"; + case 530101: + return "市辖区"; + case 530102: + return "五华区"; + case 530103: + return "盘龙区"; + case 530111: + return "官渡区"; + case 530112: + return "西山区"; + case 530113: + return "东川区"; + case 530114: + return "呈贡区"; + case 530122: + return "晋宁县"; + case 530124: + return "富民县"; + case 530125: + return "宜良县"; + case 530126: + return "石林彝族自治县"; + case 530127: + return "嵩明县"; + case 530128: + return "禄劝彝族苗族自治县"; + case 530129: + return "寻甸回族彝族自治县"; + case 530181: + return "安宁市"; + case 5303: + return "曲靖市"; + case 530301: + return "市辖区"; + case 530302: + return "麒麟区"; + case 530321: + return "马龙县"; + case 530322: + return "陆良县"; + case 530323: + return "师宗县"; + case 530324: + return "罗平县"; + case 530325: + return "富源县"; + case 530326: + return "会泽县"; + case 530328: + return "沾益县"; + case 530381: + return "宣威市"; + case 5304: + return "玉溪市"; + case 530401: + return "市辖区"; + case 530402: + return "红塔区"; + case 530421: + return "江川县"; + case 530422: + return "澄江县"; + case 530423: + return "通海县"; + case 530424: + return "华宁县"; + case 530425: + return "易门县"; + case 530426: + return "峨山彝族自治县"; + case 530427: + return "新平彝族傣族自治县"; + case 530428: + return "元江哈尼族彝族傣族自治县"; + case 5305: + return "保山市"; + case 530501: + return "市辖区"; + case 530502: + return "隆阳区"; + case 530521: + return "施甸县"; + case 530522: + return "腾冲县"; + case 530523: + return "龙陵县"; + case 530524: + return "昌宁县"; + case 5306: + return "昭通市"; + case 530601: + return "市辖区"; + case 530602: + return "昭阳区"; + case 530621: + return "鲁甸县"; + case 530622: + return "巧家县"; + case 530623: + return "盐津县"; + case 530624: + return "大关县"; + case 530625: + return "永善县"; + case 530626: + return "绥江县"; + case 530627: + return "镇雄县"; + case 530628: + return "彝良县"; + case 530629: + return "威信县"; + case 530630: + return "水富县"; + case 5307: + return "丽江市"; + case 530701: + return "市辖区"; + case 530702: + return "古城区"; + case 530721: + return "玉龙纳西族自治县"; + case 530722: + return "永胜县"; + case 530723: + return "华坪县"; + case 530724: + return "宁蒗彝族自治县"; + case 5308: + return "普洱市"; + case 530801: + return "市辖区"; + case 530802: + return "思茅区"; + case 530821: + return "宁洱哈尼族彝族自治县"; + case 530822: + return "墨江哈尼族自治县"; + case 530823: + return "景东彝族自治县"; + case 530824: + return "景谷傣族彝族自治县"; + case 530825: + return "镇沅彝族哈尼族拉祜族自治县"; + case 530826: + return "江城哈尼族彝族自治县"; + case 530827: + return "孟连傣族拉祜族佤族自治县"; + case 530828: + return "澜沧拉祜族自治县"; + case 530829: + return "西盟佤族自治县"; + case 5309: + return "临沧市"; + case 530901: + return "市辖区"; + case 530902: + return "临翔区"; + case 530921: + return "凤庆县"; + case 530922: + return "云县"; + case 530923: + return "永德县"; + case 530924: + return "镇康县"; + case 530925: + return "双江拉祜族佤族布朗族傣族自治县"; + case 530926: + return "耿马傣族佤族自治县"; + case 530927: + return "沧源佤族自治县"; + case 5323: + return "楚雄彝族自治州"; + case 532301: + return "楚雄市"; + case 532322: + return "双柏县"; + case 532323: + return "牟定县"; + case 532324: + return "南华县"; + case 532325: + return "姚安县"; + case 532326: + return "大姚县"; + case 532327: + return "永仁县"; + case 532328: + return "元谋县"; + case 532329: + return "武定县"; + case 532331: + return "禄丰县"; + case 5325: + return "红河哈尼族彝族自治州"; + case 532501: + return "个旧市"; + case 532502: + return "开远市"; + case 532503: + return "蒙自市"; + case 532504: + return "弥勒市"; + case 532523: + return "屏边苗族自治县"; + case 532524: + return "建水县"; + case 532525: + return "石屏县"; + case 532527: + return "泸西县"; + case 532528: + return "元阳县"; + case 532529: + return "红河县"; + case 532530: + return "金平苗族瑶族傣族自治县"; + case 532531: + return "绿春县"; + case 532532: + return "河口瑶族自治县"; + case 5326: + return "文山壮族苗族自治州"; + case 532601: + return "文山市"; + case 532622: + return "砚山县"; + case 532623: + return "西畴县"; + case 532624: + return "麻栗坡县"; + case 532625: + return "马关县"; + case 532626: + return "丘北县"; + case 532627: + return "广南县"; + case 532628: + return "富宁县"; + case 5328: + return "西双版纳傣族自治州"; + case 532801: + return "景洪市"; + case 532822: + return "勐海县"; + case 532823: + return "勐腊县"; + case 5329: + return "大理白族自治州"; + case 532901: + return "大理市"; + case 532922: + return "漾濞彝族自治县"; + case 532923: + return "祥云县"; + case 532924: + return "宾川县"; + case 532925: + return "弥渡县"; + case 532926: + return "南涧彝族自治县"; + case 532927: + return "巍山彝族回族自治县"; + case 532928: + return "永平县"; + case 532929: + return "云龙县"; + case 532930: + return "洱源县"; + case 532931: + return "剑川县"; + case 532932: + return "鹤庆县"; + case 5331: + return "德宏傣族景颇族自治州"; + case 533102: + return "瑞丽市"; + case 533103: + return "芒市"; + case 533122: + return "梁河县"; + case 533123: + return "盈江县"; + case 533124: + return "陇川县"; + case 5333: + return "怒江傈僳族自治州"; + case 533321: + return "泸水县"; + case 533323: + return "福贡县"; + case 533324: + return "贡山独龙族怒族自治县"; + case 533325: + return "兰坪白族普米族自治县"; + case 5334: + return "迪庆藏族自治州"; + case 533421: + return "香格里拉县"; + case 533422: + return "德钦县"; + case 533423: + return "维西傈僳族自治县"; + case 54: + return "西藏自治区"; + case 5401: + return "拉萨市"; + case 540101: + return "市辖区"; + case 540102: + return "城关区"; + case 540121: + return "林周县"; + case 540122: + return "当雄县"; + case 540123: + return "尼木县"; + case 540124: + return "曲水县"; + case 540125: + return "堆龙德庆县"; + case 540126: + return "达孜县"; + case 540127: + return "墨竹工卡县"; + case 5402: + return "日喀则市"; + case 540202: + return "桑珠孜区"; + case 540221: + return "南木林县"; + case 540222: + return "江孜县"; + case 540223: + return "定日县"; + case 540224: + return "萨迦县"; + case 540225: + return "拉孜县"; + case 540226: + return "昂仁县"; + case 540227: + return "谢通门县"; + case 540228: + return "白朗县"; + case 540229: + return "仁布县"; + case 540230: + return "康马县"; + case 540231: + return "定结县"; + case 540232: + return "仲巴县"; + case 540233: + return "亚东县"; + case 540234: + return "吉隆县"; + case 540235: + return "聂拉木县"; + case 540236: + return "萨嘎县"; + case 540237: + return "岗巴县"; + case 5421: + return "昌都地区"; + case 542121: + return "昌都县"; + case 542122: + return "江达县"; + case 542123: + return "贡觉县"; + case 542124: + return "类乌齐县"; + case 542125: + return "丁青县"; + case 542126: + return "察雅县"; + case 542127: + return "八宿县"; + case 542128: + return "左贡县"; + case 542129: + return "芒康县"; + case 542132: + return "洛隆县"; + case 542133: + return "边坝县"; + case 5422: + return "山南地区"; + case 542221: + return "乃东县"; + case 542222: + return "扎囊县"; + case 542223: + return "贡嘎县"; + case 542224: + return "桑日县"; + case 542225: + return "琼结县"; + case 542226: + return "曲松县"; + case 542227: + return "措美县"; + case 542228: + return "洛扎县"; + case 542229: + return "加查县"; + case 542231: + return "隆子县"; + case 542232: + return "错那县"; + case 542233: + return "浪卡子县"; + case 5424: + return "那曲地区"; + case 542421: + return "那曲县"; + case 542422: + return "嘉黎县"; + case 542423: + return "比如县"; + case 542424: + return "聂荣县"; + case 542425: + return "安多县"; + case 542426: + return "申扎县"; + case 542427: + return "索县"; + case 542428: + return "班戈县"; + case 542429: + return "巴青县"; + case 542430: + return "尼玛县"; + case 542431: + return "双湖县"; + case 5425: + return "阿里地区"; + case 542521: + return "普兰县"; + case 542522: + return "札达县"; + case 542523: + return "噶尔县"; + case 542524: + return "日土县"; + case 542525: + return "革吉县"; + case 542526: + return "改则县"; + case 542527: + return "措勤县"; + case 5426: + return "林芝地区"; + case 542621: + return "林芝县"; + case 542622: + return "工布江达县"; + case 542623: + return "米林县"; + case 542624: + return "墨脱县"; + case 542625: + return "波密县"; + case 542626: + return "察隅县"; + case 542627: + return "朗县"; + case 61: + return "陕西省"; + case 6101: + return "西安市"; + case 610101: + return "市辖区"; + case 610102: + return "新城区"; + case 610103: + return "碑林区"; + case 610104: + return "莲湖区"; + case 610111: + return "灞桥区"; + case 610112: + return "未央区"; + case 610113: + return "雁塔区"; + case 610114: + return "阎良区"; + case 610115: + return "临潼区"; + case 610116: + return "长安区"; + case 610122: + return "蓝田县"; + case 610124: + return "周至县"; + case 610125: + return "户县"; + case 610126: + return "高陵县"; + case 6102: + return "铜川市"; + case 610201: + return "市辖区"; + case 610202: + return "王益区"; + case 610203: + return "印台区"; + case 610204: + return "耀州区"; + case 610222: + return "宜君县"; + case 6103: + return "宝鸡市"; + case 610301: + return "市辖区"; + case 610302: + return "渭滨区"; + case 610303: + return "金台区"; + case 610304: + return "陈仓区"; + case 610322: + return "凤翔县"; + case 610323: + return "岐山县"; + case 610324: + return "扶风县"; + case 610326: + return "眉县"; + case 610327: + return "陇县"; + case 610328: + return "千阳县"; + case 610329: + return "麟游县"; + case 610330: + return "凤县"; + case 610331: + return "太白县"; + case 6104: + return "咸阳市"; + case 610401: + return "市辖区"; + case 610402: + return "秦都区"; + case 610403: + return "杨陵区"; + case 610404: + return "渭城区"; + case 610422: + return "三原县"; + case 610423: + return "泾阳县"; + case 610424: + return "乾县"; + case 610425: + return "礼泉县"; + case 610426: + return "永寿县"; + case 610427: + return "彬县"; + case 610428: + return "长武县"; + case 610429: + return "旬邑县"; + case 610430: + return "淳化县"; + case 610431: + return "武功县"; + case 610481: + return "兴平市"; + case 6105: + return "渭南市"; + case 610501: + return "市辖区"; + case 610502: + return "临渭区"; + case 610521: + return "华县"; + case 610522: + return "潼关县"; + case 610523: + return "大荔县"; + case 610524: + return "合阳县"; + case 610525: + return "澄城县"; + case 610526: + return "蒲城县"; + case 610527: + return "白水县"; + case 610528: + return "富平县"; + case 610581: + return "韩城市"; + case 610582: + return "华阴市"; + case 6106: + return "延安市"; + case 610601: + return "市辖区"; + case 610602: + return "宝塔区"; + case 610621: + return "延长县"; + case 610622: + return "延川县"; + case 610623: + return "子长县"; + case 610624: + return "安塞县"; + case 610625: + return "志丹县"; + case 610626: + return "吴起县"; + case 610627: + return "甘泉县"; + case 610628: + return "富县"; + case 610629: + return "洛川县"; + case 610630: + return "宜川县"; + case 610631: + return "黄龙县"; + case 610632: + return "黄陵县"; + case 6107: + return "汉中市"; + case 610701: + return "市辖区"; + case 610702: + return "汉台区"; + case 610721: + return "南郑县"; + case 610722: + return "城固县"; + case 610723: + return "洋县"; + case 610724: + return "西乡县"; + case 610725: + return "勉县"; + case 610726: + return "宁强县"; + case 610727: + return "略阳县"; + case 610728: + return "镇巴县"; + case 610729: + return "留坝县"; + case 610730: + return "佛坪县"; + case 6108: + return "榆林市"; + case 610801: + return "市辖区"; + case 610802: + return "榆阳区"; + case 610821: + return "神木县"; + case 610822: + return "府谷县"; + case 610823: + return "横山县"; + case 610824: + return "靖边县"; + case 610825: + return "定边县"; + case 610826: + return "绥德县"; + case 610827: + return "米脂县"; + case 610828: + return "佳县"; + case 610829: + return "吴堡县"; + case 610830: + return "清涧县"; + case 610831: + return "子洲县"; + case 6109: + return "安康市"; + case 610901: + return "市辖区"; + case 610902: + return "汉滨区"; + case 610921: + return "汉阴县"; + case 610922: + return "石泉县"; + case 610923: + return "宁陕县"; + case 610924: + return "紫阳县"; + case 610925: + return "岚皋县"; + case 610926: + return "平利县"; + case 610927: + return "镇坪县"; + case 610928: + return "旬阳县"; + case 610929: + return "白河县"; + case 6110: + return "商洛市"; + case 611001: + return "市辖区"; + case 611002: + return "商州区"; + case 611021: + return "洛南县"; + case 611022: + return "丹凤县"; + case 611023: + return "商南县"; + case 611024: + return "山阳县"; + case 611025: + return "镇安县"; + case 611026: + return "柞水县"; + case 62: + return "甘肃省"; + case 6201: + return "兰州市"; + case 620101: + return "市辖区"; + case 620102: + return "城关区"; + case 620103: + return "七里河区"; + case 620104: + return "西固区"; + case 620105: + return "安宁区"; + case 620111: + return "红古区"; + case 620121: + return "永登县"; + case 620122: + return "皋兰县"; + case 620123: + return "榆中县"; + case 6202: + return "嘉峪关市"; + case 620201: + return "市辖区"; + case 6203: + return "金昌市"; + case 620301: + return "市辖区"; + case 620302: + return "金川区"; + case 620321: + return "永昌县"; + case 6204: + return "白银市"; + case 620401: + return "市辖区"; + case 620402: + return "白银区"; + case 620403: + return "平川区"; + case 620421: + return "靖远县"; + case 620422: + return "会宁县"; + case 620423: + return "景泰县"; + case 6205: + return "天水市"; + case 620501: + return "市辖区"; + case 620502: + return "秦州区"; + case 620503: + return "麦积区"; + case 620521: + return "清水县"; + case 620522: + return "秦安县"; + case 620523: + return "甘谷县"; + case 620524: + return "武山县"; + case 620525: + return "张家川回族自治县"; + case 6206: + return "武威市"; + case 620601: + return "市辖区"; + case 620602: + return "凉州区"; + case 620621: + return "民勤县"; + case 620622: + return "古浪县"; + case 620623: + return "天祝藏族自治县"; + case 6207: + return "张掖市"; + case 620701: + return "市辖区"; + case 620702: + return "甘州区"; + case 620721: + return "肃南裕固族自治县"; + case 620722: + return "民乐县"; + case 620723: + return "临泽县"; + case 620724: + return "高台县"; + case 620725: + return "山丹县"; + case 6208: + return "平凉市"; + case 620801: + return "市辖区"; + case 620802: + return "崆峒区"; + case 620821: + return "泾川县"; + case 620822: + return "灵台县"; + case 620823: + return "崇信县"; + case 620824: + return "华亭县"; + case 620825: + return "庄浪县"; + case 620826: + return "静宁县"; + case 6209: + return "酒泉市"; + case 620901: + return "市辖区"; + case 620902: + return "肃州区"; + case 620921: + return "金塔县"; + case 620922: + return "瓜州县"; + case 620923: + return "肃北蒙古族自治县"; + case 620924: + return "阿克塞哈萨克族自治县"; + case 620981: + return "玉门市"; + case 620982: + return "敦煌市"; + case 6210: + return "庆阳市"; + case 621001: + return "市辖区"; + case 621002: + return "西峰区"; + case 621021: + return "庆城县"; + case 621022: + return "环县"; + case 621023: + return "华池县"; + case 621024: + return "合水县"; + case 621025: + return "正宁县"; + case 621026: + return "宁县"; + case 621027: + return "镇原县"; + case 6211: + return "定西市"; + case 621101: + return "市辖区"; + case 621102: + return "安定区"; + case 621121: + return "通渭县"; + case 621122: + return "陇西县"; + case 621123: + return "渭源县"; + case 621124: + return "临洮县"; + case 621125: + return "漳县"; + case 621126: + return "岷县"; + case 6212: + return "陇南市"; + case 621201: + return "市辖区"; + case 621202: + return "武都区"; + case 621221: + return "成县"; + case 621222: + return "文县"; + case 621223: + return "宕昌县"; + case 621224: + return "康县"; + case 621225: + return "西和县"; + case 621226: + return "礼县"; + case 621227: + return "徽县"; + case 621228: + return "两当县"; + case 6229: + return "临夏回族自治州"; + case 622901: + return "临夏市"; + case 622921: + return "临夏县"; + case 622922: + return "康乐县"; + case 622923: + return "永靖县"; + case 622924: + return "广河县"; + case 622925: + return "和政县"; + case 622926: + return "东乡族自治县"; + case 622927: + return "积石山保安族东乡族撒拉族自治县"; + case 6230: + return "甘南藏族自治州"; + case 623001: + return "合作市"; + case 623021: + return "临潭县"; + case 623022: + return "卓尼县"; + case 623023: + return "舟曲县"; + case 623024: + return "迭部县"; + case 623025: + return "玛曲县"; + case 623026: + return "碌曲县"; + case 623027: + return "夏河县"; + case 63: + return "青海省"; + case 6301: + return "西宁市"; + case 630101: + return "市辖区"; + case 630102: + return "城东区"; + case 630103: + return "城中区"; + case 630104: + return "城西区"; + case 630105: + return "城北区"; + case 630121: + return "大通回族土族自治县"; + case 630122: + return "湟中县"; + case 630123: + return "湟源县"; + case 6302: + return "海东市"; + case 630202: + return "乐都区"; + case 630221: + return "平安县"; + case 630222: + return "民和回族土族自治县"; + case 630223: + return "互助土族自治县"; + case 630224: + return "化隆回族自治县"; + case 630225: + return "循化撒拉族自治县"; + case 6322: + return "海北藏族自治州"; + case 632221: + return "门源回族自治县"; + case 632222: + return "祁连县"; + case 632223: + return "海晏县"; + case 632224: + return "刚察县"; + case 6323: + return "黄南藏族自治州"; + case 632321: + return "同仁县"; + case 632322: + return "尖扎县"; + case 632323: + return "泽库县"; + case 632324: + return "河南蒙古族自治县"; + case 6325: + return "海南藏族自治州"; + case 632521: + return "共和县"; + case 632522: + return "同德县"; + case 632523: + return "贵德县"; + case 632524: + return "兴海县"; + case 632525: + return "贵南县"; + case 6326: + return "果洛藏族自治州"; + case 632621: + return "玛沁县"; + case 632622: + return "班玛县"; + case 632623: + return "甘德县"; + case 632624: + return "达日县"; + case 632625: + return "久治县"; + case 632626: + return "玛多县"; + case 6327: + return "玉树藏族自治州"; + case 632701: + return "玉树市"; + case 632722: + return "杂多县"; + case 632723: + return "称多县"; + case 632724: + return "治多县"; + case 632725: + return "囊谦县"; + case 632726: + return "曲麻莱县"; + case 6328: + return "海西蒙古族藏族自治州"; + case 632801: + return "格尔木市"; + case 632802: + return "德令哈市"; + case 632821: + return "乌兰县"; + case 632822: + return "都兰县"; + case 632823: + return "天峻县"; + case 64: + return "宁夏回族自治区"; + case 6401: + return "银川市"; + case 640101: + return "市辖区"; + case 640104: + return "兴庆区"; + case 640105: + return "西夏区"; + case 640106: + return "金凤区"; + case 640121: + return "永宁县"; + case 640122: + return "贺兰县"; + case 640181: + return "灵武市"; + case 6402: + return "石嘴山市"; + case 640201: + return "市辖区"; + case 640202: + return "大武口区"; + case 640205: + return "惠农区"; + case 640221: + return "平罗县"; + case 6403: + return "吴忠市"; + case 640301: + return "市辖区"; + case 640302: + return "利通区"; + case 640303: + return "红寺堡区"; + case 640323: + return "盐池县"; + case 640324: + return "同心县"; + case 640381: + return "青铜峡市"; + case 6404: + return "固原市"; + case 640401: + return "市辖区"; + case 640402: + return "原州区"; + case 640422: + return "西吉县"; + case 640423: + return "隆德县"; + case 640424: + return "泾源县"; + case 640425: + return "彭阳县"; + case 6405: + return "中卫市"; + case 640501: + return "市辖区"; + case 640502: + return "沙坡头区"; + case 640521: + return "中宁县"; + case 640522: + return "海原县"; + case 65: + return "新疆维吾尔自治区"; + case 6501: + return "乌鲁木齐市"; + case 650101: + return "市辖区"; + case 650102: + return "天山区"; + case 650103: + return "沙依巴克区"; + case 650104: + return "新市区"; + case 650105: + return "水磨沟区"; + case 650106: + return "头屯河区"; + case 650107: + return "达坂城区"; + case 650109: + return "米东区"; + case 650121: + return "乌鲁木齐县"; + case 6502: + return "克拉玛依市"; + case 650201: + return "市辖区"; + case 650202: + return "独山子区"; + case 650203: + return "克拉玛依区"; + case 650204: + return "白碱滩区"; + case 650205: + return "乌尔禾区"; + case 6521: + return "吐鲁番地区"; + case 652101: + return "吐鲁番市"; + case 652122: + return "鄯善县"; + case 652123: + return "托克逊县"; + case 6522: + return "哈密地区"; + case 652201: + return "哈密市"; + case 652222: + return "巴里坤哈萨克自治县"; + case 652223: + return "伊吾县"; + case 6523: + return "昌吉回族自治州"; + case 652301: + return "昌吉市"; + case 652302: + return "阜康市"; + case 652323: + return "呼图壁县"; + case 652324: + return "玛纳斯县"; + case 652325: + return "奇台县"; + case 652327: + return "吉木萨尔县"; + case 652328: + return "木垒哈萨克自治县"; + case 6527: + return "博尔塔拉蒙古自治州"; + case 652701: + return "博乐市"; + case 652702: + return "阿拉山口市"; + case 652722: + return "精河县"; + case 652723: + return "温泉县"; + case 6528: + return "巴音郭楞蒙古自治州"; + case 652801: + return "库尔勒市"; + case 652822: + return "轮台县"; + case 652823: + return "尉犁县"; + case 652824: + return "若羌县"; + case 652825: + return "且末县"; + case 652826: + return "焉耆回族自治县"; + case 652827: + return "和静县"; + case 652828: + return "和硕县"; + case 652829: + return "博湖县"; + case 6529: + return "阿克苏地区"; + case 652901: + return "阿克苏市"; + case 652922: + return "温宿县"; + case 652923: + return "库车县"; + case 652924: + return "沙雅县"; + case 652925: + return "新和县"; + case 652926: + return "拜城县"; + case 652927: + return "乌什县"; + case 652928: + return "阿瓦提县"; + case 652929: + return "柯坪县"; + case 6530: + return "克孜勒苏柯尔克孜自治州"; + case 653001: + return "阿图什市"; + case 653022: + return "阿克陶县"; + case 653023: + return "阿合奇县"; + case 653024: + return "乌恰县"; + case 6531: + return "喀什地区"; + case 653101: + return "喀什市"; + case 653121: + return "疏附县"; + case 653122: + return "疏勒县"; + case 653123: + return "英吉沙县"; + case 653124: + return "泽普县"; + case 653125: + return "莎车县"; + case 653126: + return "叶城县"; + case 653127: + return "麦盖提县"; + case 653128: + return "岳普湖县"; + case 653129: + return "伽师县"; + case 653130: + return "巴楚县"; + case 653131: + return "塔什库尔干塔吉克自治县"; + case 6532: + return "和田地区"; + case 653201: + return "和田市"; + case 653221: + return "和田县"; + case 653222: + return "墨玉县"; + case 653223: + return "皮山县"; + case 653224: + return "洛浦县"; + case 653225: + return "策勒县"; + case 653226: + return "于田县"; + case 653227: + return "民丰县"; + case 6540: + return "伊犁哈萨克自治州"; + case 654002: + return "伊宁市"; + case 654003: + return "奎屯市"; + case 654021: + return "伊宁县"; + case 654022: + return "察布查尔锡伯自治县"; + case 654023: + return "霍城县"; + case 654024: + return "巩留县"; + case 654025: + return "新源县"; + case 654026: + return "昭苏县"; + case 654027: + return "特克斯县"; + case 654028: + return "尼勒克县"; + case 6542: + return "塔城地区"; + case 654201: + return "塔城市"; + case 654202: + return "乌苏市"; + case 654221: + return "额敏县"; + case 654223: + return "沙湾县"; + case 654224: + return "托里县"; + case 654225: + return "裕民县"; + case 654226: + return "和布克赛尔蒙古自治县"; + case 6543: + return "阿勒泰地区"; + case 654301: + return "阿勒泰市"; + case 654321: + return "布尔津县"; + case 654322: + return "富蕴县"; + case 654323: + return "福海县"; + case 654324: + return "哈巴河县"; + case 654325: + return "青河县"; + case 654326: + return "吉木乃县"; + case 6590: + return "自治区直辖县级行政区划"; + case 659001: + return "石河子市"; + case 659002: + return "阿拉尔市"; + case 659003: + return "图木舒克市"; + case 659004: + return "五家渠市"; + case 71: + return "台湾省"; + case 81: + return "香港特别行政区"; + case 82: + return "澳门特别行政区"; + default: + return null; + } + } + +} diff --git a/src/com/engine/salary/formlua/util/RegularUtil.java b/src/com/engine/salary/formlua/util/RegularUtil.java new file mode 100644 index 000000000..9ea89a9dc --- /dev/null +++ b/src/com/engine/salary/formlua/util/RegularUtil.java @@ -0,0 +1,241 @@ +package com.engine.salary.formlua.util; + + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @className: + * @Description:正则表达式工具 + * @Author: + * @date: + */ +public class RegularUtil { + public static void validateIDCard(String idCard){ + Pattern pattern = Pattern.compile("^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"); + Matcher matcher = pattern.matcher(idCard); + if (!matcher.matches()) { + throw new RuntimeException("身份证号码不合法"); + } + } + public static void checkAggCnd(String formula){ + String startPartternStr="^(OR\\(|AND\\()"; + Pattern startPattern = Pattern.compile(startPartternStr); + Matcher startMatcher = startPattern.matcher(formula); + if(!startMatcher.find()){ + throw new RuntimeException("条件筛选函数只允许AND函数与OR函数"); + } +// else { +// String partternStr="(AND|OR)+\\(+(.)+\\)+"; +// Pattern pattern = Pattern.compile(partternStr); +// Matcher matcher = pattern.matcher(formula); +// while (matcher.find()){ +// String fr=matcher.group(); +// logger.info(fr); +// fr=fr.replaceAll("(AND|OR)",""); +// String partternStr2="(.)+\\(+(.)+\\)+"; +// Pattern pattern2 = Pattern.compile(partternStr2); +// Matcher matcher2 = pattern2.matcher(fr); +// if(matcher2.find()){ +// throw new RuntimeException("条件筛选参数不正确"); +// } +// } +// } + } + public static boolean isNumber(Object obj) { + if(obj==null){ + return false; + } + String nstr=obj.toString(); + String reg = "\\d+(\\.\\d+)?"; + if(nstr.startsWith("-")){ + nstr=nstr.substring(1); + } + Boolean strResult = nstr.matches(reg); + return strResult; + } + + /** + * 判断是否是0或正整数 + * @param obj + * @return + */ + public static boolean isNonNegativeInteger(Object obj) { + if(obj == null) return false; + String nstr = obj.toString(); + + String reg = "^[1-9]\\d*|0$"; + return nstr.matches(reg); + } + + /** + * 是否是整数,正整数、0、负整数 + * @param obj + * @return + */ + public static boolean isInteger(Object obj){ + if(obj == null) return false; + String nstr = obj.toString(); + + String reg = "^-?[1-9]\\d*$"; + return nstr.matches(reg); + } + + /** + * IF函数的规则判断 + * @param str + * @return + */ + public static Map checkIfFunc(String str){ + Map rmap=new HashMap(); + str=str.trim().replaceAll(" ",""); + boolean r=true; + String patt="if{1}\\({1}\\w+[<|>|!=|==]+\\w+\\){1}[\\w\\{\\}]*"; + String charCheckIf="if{1}"; + String charCheckLf="if{1}\\({1}"; + String charCheckRf="\\){1}"; + String paramLeft="\\({1}\\w+[<|>|!=]+"; + String paramRight="[<|>|!=]+\\w+\\){1}"; + String paramOperSym="[<|>|!=]+"; + Pattern rPattern = Pattern.compile(patt); + Pattern ifPattern=Pattern.compile(charCheckIf); + Pattern leftPattern=Pattern.compile(charCheckLf); + Pattern rightPattern=Pattern.compile(charCheckRf); + Pattern leftParamPatt=Pattern.compile(paramLeft); + Pattern rightParamPatt = Pattern.compile(paramRight); + Pattern operSybmPattern=Pattern.compile(paramOperSym); + + //先测试整条语句是否符合规则 + boolean pOneResult=rPattern.matcher(str).find(); + + + if(!pOneResult){ + //以下为逐一排查问题的位置 + boolean pIfResult =ifPattern.matcher(str).find(); + boolean leftResult=leftPattern.matcher(str).find(); + boolean rightResult=rightPattern.matcher(str).find(); + boolean lpResult=leftParamPatt.matcher(str).find(); + boolean rpResult=rightParamPatt.matcher(str).find(); + boolean operSybmResult=operSybmPattern.matcher(str).find(); + r=false; + rmap.put("result",r); + if(!pIfResult){ + rmap.put("info","格式不正确缺少if标识符"); + }else if(!leftResult){ + rmap.put("info","格式不正确缺少左括号(标识符"); + }else if(!rightResult){ + rmap.put("info","格式不正确缺少右括号)标识符"); + }else if(!lpResult){ + rmap.put("info","格式不正确缺少左侧参数"); + }else if(!rpResult){ + rmap.put("info","格式不正确缺少右侧参数"); + }else if(!operSybmResult){ + rmap.put("info","格式不正确缺少操作符"); + }else{ + rmap.put("info","格式未通过格式验证"); + } + + } + return rmap; + } + /** + * 判断是否含有字母 + * @param str + * @return + */ + public static boolean containsLetter(String str) { + String patt="[a-z|A-Z]"; + Pattern r = Pattern.compile(patt); + Matcher matcher = r.matcher(str); + return matcher.find(); + } + + /** + * 判断是否含有数字 + * @param str + * @return + */ + public static boolean containsNum(String str) { + String patt="[0-9]"; + Pattern r = Pattern.compile(patt); + Matcher matcher = r.matcher(str); + return matcher.find(); + } + + /** + * 判断是否含有非字母 + * @param str + * @return + */ + public static boolean containsNotLetter(String str) { + String patt="[^a-z|^A-Z]"; + Pattern r = Pattern.compile(patt); + Matcher matcher = r.matcher(str); + return matcher.find(); + } + + /** + * 判断是否包含非数字 + * @param str + * @return + */ + public static boolean containsNotNum(String str){ + String patt="[^0-9]"; + Pattern r = Pattern.compile(patt); + Matcher matcher = r.matcher(str); + return matcher.find(); + } + /** + * 替换非字母 + * @param str + * @return + */ + public static String containsNotLetterR(String str,String replaceStr) { + String patt="[^a-z|^A-Z]"; + Pattern r = Pattern.compile(patt); + Matcher matcher = r.matcher(str); + return matcher.replaceAll(replaceStr); + } + /** + * 替换非数字 + * @param str + * @param replaceStr + * @return + */ + public static String containsNotNumR(String str,String replaceStr){ + String patt="[^0-9]"; + Pattern r = Pattern.compile(patt); + Matcher matcher = r.matcher(str); + return matcher.replaceAll(replaceStr); + } + + /** + * 判断是否含有字母并替换 + * @param str + * @param replaceStr + * @return + */ + public static String containsLetterR(String str,String replaceStr) { + String patt="[a-z|A-Z]"; + Pattern r = Pattern.compile(patt); + Matcher matcher = r.matcher(str); + str=matcher.replaceAll(replaceStr); + return str; + } + + /** + * 判断是否含有数字并替换 + * @param str + * @param replaceStr + * @return + */ + public static String containsNumR(String str,String replaceStr) { + String patt="[0-9]"; + Pattern r = Pattern.compile(patt); + Matcher matcher = r.matcher(str); + return matcher.replaceAll(replaceStr); + } + +} diff --git a/src/com/engine/salary/formlua/util/SortUtil.java b/src/com/engine/salary/formlua/util/SortUtil.java new file mode 100644 index 000000000..f3081283e --- /dev/null +++ b/src/com/engine/salary/formlua/util/SortUtil.java @@ -0,0 +1,49 @@ +package com.engine.salary.formlua.util; + + +public class SortUtil { + /** + * 数组快速排序 + * @param array + * @param left + * @param right + */ + public static void sort(int[] array, int left, int right){ + if(left > right) { + return; + } + // base中存放基准数 + int base = array[left]; + int i = left, j = right; + while(i != j) { + // 顺序很重要,先从右边开始往左找,直到找到比base值小的数 + while(array[j] >= base && i < j) { + j--; + } + + // 再从左往右边找,直到找到比base值大的数 + while(array[i] <= base && i < j) { + i++; + } + + // 上面的循环结束表示找到了位置或者(i>=j)了,交换两个数在数组中的位置 + if(i < j) { + int tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } + } + + // 将基准数放到中间的位置(基准数归位) + array[left] = array[i]; + array[i] = base; + + // 递归,继续向基准的左右两边执行和上面同样的操作 + // i的索引处为上面已确定好的基准值的位置,无需再处理 + sort(array, left, i - 1); + sort(array, i + 1, right); + } + + + +} diff --git a/src/com/engine/salary/formlua/util/TestUtil.java b/src/com/engine/salary/formlua/util/TestUtil.java new file mode 100644 index 000000000..1fcab01eb --- /dev/null +++ b/src/com/engine/salary/formlua/util/TestUtil.java @@ -0,0 +1,403 @@ +package com.engine.salary.formlua.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.ql.util.express.DynamicParamsUtil; +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.IExpressContext; +import com.weaver.common.form.component.base.ComponentType; +import com.weaver.common.form.stat.FilterFormData; +import com.weaver.excel.formula.api.entity.CustomFunc; +import com.weaver.excel.formula.core.QLExpressContext; +import com.weaver.excel.formula.entity.parameter.DataType; +import com.weaver.excel.formula.entity.parameter.FuncNames; +import com.weaver.excel.formula.entity.parameter.standard.FormulaFilterData; +import com.weaver.excel.formula.func.compare.EqOperator; +import com.weaver.excel.formula.func.compare.test.GreaterOperator; +import com.weaver.excel.formula.func.compare.test.LessOperator; +import com.weaver.excel.formula.func.custom.CustomService; +import com.weaver.excel.formula.func.custom.CustomServiceTestImpl; +import com.weaver.excel.formula.func.date.DateTimeService; +import com.weaver.excel.formula.func.date.DateTimeServiceImpl; +import com.weaver.excel.formula.func.extend.ExcelExtendFuncService; +import com.weaver.excel.formula.func.extend.ExcelExtendFuncServiceImpl; +import com.weaver.excel.formula.func.finance.FinanceService; +import com.weaver.excel.formula.func.finance.FinanceServiceImpl; +import com.weaver.excel.formula.func.logic.LogicUtils; +import com.weaver.excel.formula.func.math.MathFuncsService; +import com.weaver.excel.formula.func.math.MathFuncsServiceImpl; +import com.weaver.excel.formula.func.string.StringFormulaService; +import com.weaver.excel.formula.func.string.StringFormulaServiceImpl; +import com.weaver.excel.formula.util.standard.ExcelDataType; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; + +import java.util.*; + +public class TestUtil { + protected static final Logger logger = LoggerFactory.getLogger(TestUtil.class); + @Autowired + ApplicationContext applicationContext; + public void test() throws Exception { + DynamicParamsUtil.supportDynamicParams = true; + ExpressRunner runner = new ExpressRunner(true,false); + initRunner(runner); + Map context=new HashMap<>(); + DataType dataType1=new DataType(); + dataType1.setContent(1); + dataType1.setFieldId("a"); + dataType1.setComponentKey(ComponentType.NumberComponent.toString()); + dataType1.setDataType(DataType.NUMBER); + + DataType dataType2=new DataType(); + dataType2.setFieldId("b"); + dataType2.setComponentKey(ComponentType.NumberComponent.toString()); + dataType2.setContent(2); + dataType2.setDataType(DataType.NUMBER); + + context.put("key111","2345.66"); + context.put("a",dataType1); + context.put("b",dataType2); + context.put("dateA",dataType1); + context.put("dateB",dataType2); + IExpressContext expressContext = new QLExpressContext(context,applicationContext); +// String expressSql="c=10;function add(int a,int b){return a+b+c;};add(a,b);"; +// String expressSql="import com.weaver.excel.formula.util.DateUtil;isdate=DateUtil.isDateComponent('a');System.out.println('是日期吗?'+(isdate?'是':'不是'));"; +// String expressSql="TEST(key111)=TEST(key111)"; + + String expressSql="CUSTOM1(dateA,function1());"; + + String [] varList=runner.getOutVarNames(expressSql); + String [] funcList=runner.getOutFunctionNames(expressSql); +// OperatorBase operatorBase=runner.getFunciton("TEST"); + Object result=runner.execute(expressSql, expressContext, null, false, false); + logger.info("执行结果:"+JSON.toJSONString(result)); + } + + private void initRunner(ExpressRunner runner) throws Exception { + ExcelExtendFuncService excelExtendFuncService=new ExcelExtendFuncServiceImpl("biaoge","TEST"); + ExcelExtendFuncService excelExtendFuncService2=new ExcelExtendFuncServiceImpl("workflow","TEST2"); + //加载自定义脚本函数 + CustomFunc customFunc=new CustomFunc(); + customFunc.setFuncContent("function add(int a,int b){return a+b;};add(a1,b1);"); + customFunc.setFuncName("CUSTOM1"); + customFunc.setFuncTitle("自定义函数1"); + customFunc.setExcelDataType(ExcelDataType.number.toString()); + CustomService customService=new CustomServiceTestImpl(customFunc); + + DateTimeService dateTimeService=new DateTimeServiceImpl(); +// DateTimeService dateTimeService=new DateTimeTestServiceImpl(); + MathFuncsService mathFuncsService=new MathFuncsServiceImpl(); + StringFormulaService stringFormulaService=new StringFormulaServiceImpl(); + FinanceService financeService=new FinanceServiceImpl(); + runner.replaceOperator("=",new EqOperator("=")); + runner.replaceOperator(">",new GreaterOperator(">")); + runner.replaceOperator("<",new LessOperator("<")); + runner.addFunctionOfServiceMethod( "TEST",excelExtendFuncService,"execute",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "TEST2",excelExtendFuncService2,"execute",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "ISINT",mathFuncsService,"isInt",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "ISNUMBER",mathFuncsService,"isNumber",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "ISJSON",stringFormulaService,"isJson",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "GETJSONVALUE",stringFormulaService,"getJSONValue",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "COMPAREDATE",dateTimeService,"compareDate",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "CURRYEAR",dateTimeService,"currYear",new Class[]{},""); + runner.addFunctionOfServiceMethod( "CURRMONTH",dateTimeService,"currMonth",new Class[]{},""); + runner.addFunctionOfServiceMethod( "CURRDAY",dateTimeService,"currDay",new Class[]{},""); + runner.addFunctionOfServiceMethod( "CURRWEEK",dateTimeService,"currWeek",new Class[]{},""); + runner.addFunctionOfServiceMethod( "CURRHOUR",dateTimeService,"currHour",new Class[]{},""); + runner.addFunctionOfServiceMethod( "CURRMINUTE",dateTimeService,"currMinute",new Class[]{},""); + runner.addFunctionOfServiceMethod( "CURRSECOND",dateTimeService,"currSecond",new Class[]{},""); + runner.addFunctionOfServiceMethod( "GETMONEY", financeService,"getMoney",new Class[]{Object[].class},""); + runner.addFunctionOfServiceMethod( "CUSTOM1", customService,"execute",new Class[]{Object[].class},""); + } + + + public static void parseJ(){ + JSONObject queryObj=JSON.parseObject("{\"expressSql\":\"VLOOKUPS({工资薪金税(居民)},AND({薪资项目.当前累计应纳税所得额}>{个税税表.应纳税所得额下限},{薪资项目.当前累计应纳税额}<={个税税表.应纳税所得额上限}),[{个税税表.税率}])\",\"parameters\":[{\"dataId\":\"60000000000000001\",\"title\":\"工资薪金税(居民)\",\"module\":\"hrmsalary\",\"name\":\"工资薪金税(居民)\",\"id\":\"60000000000000001\",\"action\":\"DataSource\"},{\"name\":\"当前累计应纳税所得额\",\"module\":\"hrmsalary\",\"fieldId\":\"1_addUpTaxableIncome\",\"formId\":\"1\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"当前累计应纳税所得额\"},{\"name\":\"应纳税所得额下限\",\"module\":\"hrmsalary\",\"fieldId\":\"10_taxableIncomeLLimit\",\"formId\":\"10\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"应纳税所得额下限\"},{\"name\":\"当前累计应纳税额\",\"module\":\"hrmsalary\",\"fieldId\":\"1_addUpTaxPayable\",\"formId\":\"1\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"当前累计应纳税额\"},{\"name\":\"应纳税所得额上限\",\"module\":\"hrmsalary\",\"fieldId\":\"10_taxableIncomeULimit\",\"formId\":\"10\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"应纳税所得额上限\"},{\"name\":\"税率\",\"module\":\"hrmsalary\",\"fieldId\":\"10_taxRate\",\"formId\":\"10\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"税率\"}],\"returnType\":\"number\",\"validateType\":\"normal\"}"); + JSONArray jsonArray = queryObj.getJSONArray("parameters"); + List dataTypeList=new ArrayList<>(); + + for (Object obj : jsonArray) { + JSONObject jsonObj = (JSONObject) obj; + DataType paramData=new DataType(); + paramData.setComponentKey(DataType.STRING); + paramData.setFieldId(jsonObj.getString("fieldId")); + paramData.setContent("123"); + dataTypeList.add(paramData); + } + + DataType dataType1=dataTypeList.get(1); + DataType dataType2=dataTypeList.get(3); + FormulaFilterData formulaFilterData1=new FormulaFilterData(); + formulaFilterData1.setContent(dataType1.getContent()+""); + formulaFilterData1.setCondition(FilterFormData.TERM_GT); + formulaFilterData1.setFieldId(dataType1.getFieldId()); + formulaFilterData1.setCondition(FormulaFilterData.CONDITION_AND); + + FormulaFilterData formulaFilterData2=new FormulaFilterData(); + formulaFilterData2.setContent(dataType2.getContent()+""); + formulaFilterData2.setCondition(FilterFormData.TERM_GT); + formulaFilterData2.setFieldId(dataType2.getFieldId()); + formulaFilterData2.setCondition(FormulaFilterData.CONDITION_AND); + + + List filterDatas=new ArrayList<>(); + filterDatas.add(formulaFilterData1); + filterDatas.add(formulaFilterData2); + String dataId="60000000000000001"; + String[] cols=new String[]{"10_taxRate"}; + SimpleEmployee employee=new SimpleEmployee(); + employee.setTenantKey("tm7tozevws"); + employee.setUserId(5113514575963198048L); + employee.setId(3573514574891514361L); + employee.setUsername("顿顿"); + System.out.println(dataId); + System.out.println(JSON.toJSONString(filterDatas)); + System.out.println(JSON.toJSONString(cols)); + System.out.println(JSON.toJSONString(employee)); + } + public static Object executeInner(Object[] list) throws Exception { + DataType result=new DataType(); + result.setDataType(DataType.BOOL); + if(list.length<1||list[1]==null){ + Integer number= IgnoreParamFilter.getSetFuncNumber("IN"); + JSONObject errorJson= ErrorUtil.buildError("IN",number,number,"IN函数至少需要两个参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + List paramList=new ArrayList<>(); + paramList.add(list[0]); + + Object[] objectArray=null; + if(list[1].getClass().isArray()){ + objectArray=(Object[])list[1]; + for (int i=0;i(); + paramList.add(null); + List dataArray=new ArrayList<>(); + if(list[0] instanceof DataType){ + DataType dataType=(DataType)list[0]; + if(dataType.getDataType().equals(DataType.OPTION)){ + if(dataType.getContent()!=null){ + String[] arrys=dataType.getContent().toString().split(","); + for (int i=0;i0 && 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")); + } + + 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]); + } + + } + } + } + } + //如果没有条件符合,返回默认值,最后一个参数为默认值 + 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); + } + + } + private static 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; + } + public static Object chooseOne(Object... objects) { + if(objects==null || objects.length<2){ + throw new RuntimeException("CHOOSE函数的参数不能少于两个"); + } + DataType dataType=new DataType(); + boolean checkResult=IgnoreParamFilter.checkType(objects); + if(checkResult){ + int indexData=0; + Object firstObj=objects[0]; + try { + if(firstObj !=null){ + Double doubleValue=null; + if(firstObj instanceof DataType){ + DataType indexDataType=(DataType)firstObj; + if(ExcelParamUtil.findDataType(indexDataType.getDataType()).equalsIgnoreCase(DataType.NUMBER)){ + if(indexDataType.getContent()!=null){ + doubleValue=Double.parseDouble(indexDataType.getContent()+""); + } + } + }else{ + doubleValue=Double.parseDouble(firstObj+""); + } + indexData=doubleValue.intValue(); + }else{ + throw new RuntimeException("CHOOSE函数第一个参数不能为空"); + } + + } catch (NumberFormatException e) { + logger.error("err",e); + } + List dataList=ExcelParamUtil.getParamContent(objects); + if(indexData>=dataList.size()){ + indexData=dataList.size()-1; + } + Object resultObj=dataList.get(indexData); + if(resultObj!=null){ + if(resultObj instanceof DataType){ + dataType=(DataType)resultObj; + }else { + String type=ExcelParamUtil.getParamType(resultObj.getClass().getName()); + dataType.setDataType(type); + dataType.setContent(resultObj); + } + } + }else { + throw new RuntimeException("CHOOSE函数的参数类型不一致"); + } + logger.info("CHOOSE校验执行结果:"+ JSON.toJSONString(dataType)); + return dataType; + } + private static void testOption(DataType dataType,DataType dataType2){ + //对option的特殊处理,获取option的字符串后根据逗号分割,然后排序数组,数组长度不一致返回false,一致则循环对比直到同样下标的数据不一致返回false,否则为true + String[] firstOptions=new String[]{}; + String[] secondOptions=new String[]{}; + firstOptions= CompareUtil.genArray(dataType,"option"); + secondOptions=CompareUtil.genArray(dataType2,"option"); + Arrays.sort(firstOptions); + Arrays.sort(secondOptions); + + logger.info("比较选项:"+JSON.toJSONString(firstOptions)+"-->"+JSON.toJSONString(secondOptions)); + if(firstOptions.length!=secondOptions.length){ + }else{ + int i=0; + for (;i dataOptions, FixFieldType fixFieldType){ + FormulaVar formulaVar=new FormulaVar(); + formulaVar.setFormId(sourceId+""); + formulaVar.setDataType(ExcelParamUtil.findType(fixFieldType.toString())); + formulaVar.setContent(content); + formulaVar.setFixName(name); + formulaVar.setFixFieldKey(fixFieldKey); + formulaVar.setId(fixFieldKey); + formulaVar.setKey(fixFieldKey); + formulaVar.setFieldId(fixFieldKey); + if(fixFieldType==FixFieldType.Select || fixFieldType==FixFieldType.Department || fixFieldType == FixFieldType.Employee || fixFieldType == FixFieldType.Relate){ + formulaVar.setDataOptionList(dataOptions); + String options=""; + for(DataOption dataOption:dataOptions){ + options+=dataOption.getOptionId(); + } + formulaVar.setContent(options); + formulaVar.setComponentKey(ComponentType.Employee.toString()); + } + return formulaVar; + } + + /** + * 构建字段数据,文本、数字、日期使用此方法 + * @param sourceId + * @param fieldId + * @param excelDataType + * @param module + * @param value + * @return + */ + public static FormulaVar buildTxtNumDateField(Long sourceId,Long fieldId,ExcelDataType excelDataType,String module,Object value){ + return commonBuildField(sourceId,fieldId,excelDataType,module,null,value); + } + + /** + * 构建选项型或数据源型使用此方法 + * @param sourceId + * @param fieldId + * @param excelDataType + * @param module + * @param dataOptions + * @return + */ + public static FormulaVar buildOptionField(Long sourceId,Long fieldId,ExcelDataType excelDataType,String module,List dataOptions){ + return commonBuildField(sourceId,fieldId,excelDataType,module,dataOptions,null); + } + private static FormulaVar commonBuildField(Long sourceId,Long fieldId,ExcelDataType excelDataType,String module,List dataOptions,Object value){ + FormulaVar formulaVar =new FormulaVar(); + formulaVar.setContent(value+""); + formulaVar.setFieldId(fieldId+""); + formulaVar.setFormId(sourceId+""); + formulaVar.setDataType(excelDataType.toString()); + formulaVar.setModule(module); + if(dataOptions!=null && dataOptions.size()>0){ + formulaVar.setDataOptionList(dataOptions); + String optionStr=""; + for(DataOption dataOption:dataOptions){ + optionStr+=dataOption.getOptionId(); + } + formulaVar.setContent(optionStr); + } + return formulaVar; + } + + /** + * 转换表单字段数据为函数标准参数对象 + * @param formDataDetailList 表单字段数据列表 + * @param sourceId 表单ID或者数据源ID + * @param module 所属模块 + * @return + */ + public List transFieldForForm(List formDataDetailList,Long layoutId, Long sourceId, ModuleSource module,SimpleEmployee simpleEmployee){ + List formulaVarList=new ArrayList<>(); + if(formDataDetailList!=null && formDataDetailList.size()>0){ + + Map fieldMap = bulidFreeFormService(module).getFieldMapByFormId(sourceId, simpleEmployee); + FormulaVar formulaVar =null; + Map replaceMap=new HashMap<>(); + for (FormDataDetail formDataDetail:formDataDetailList){ + if(formDataDetail.getFormField()==null){ + throw new RuntimeException("函数数据转换失败,找不到表单字段数据"); + } + FormField newFormField=fieldMap.get(formDataDetail.getFormField().getId()); + if(newFormField!=null){ + formDataDetail.setFormField(newFormField); + } + Double score=getDetailScoreForForm(formDataDetail,module,layoutId,simpleEmployee); +// Double score=getDetailScore(formDataDetail,module,layoutId,simpleEmployee); + formulaVar=new FormulaVar(); + if(score!=null){ + formulaVar.setScore(score); + } + FormField formField=formDataDetail.getFormField(); + formulaVar.setContent(formDataDetail.getContent()); + if(formDataDetail.getDataText()!=null && StringUtils.isNotEmpty(formDataDetail.getDataText().getContent())){ + if(StringUtils.isNotEmpty(formDataDetail.getDataText().getContent())){ + formulaVar.setContent(formDataDetail.getDataText().getContent()); + } + } + formulaVar.setFieldId(formField.getId()!=null?formField.getId()+"":null); + formulaVar.setFormId(formField.getFormId()!=null?formField.getFormId()+"":null); + formulaVar.setComponentKey(formField.getComponentKey()); + if(formField.getSubForm()!=null){ + formulaVar.setsFormId(formField.getSubForm().getId()+""); + } + formulaVar.setDataType(ExcelParamUtil.findType(formField.getComponentKey())); + formulaVar.setModule(module.toString()); + if(formulaVar.getFormId()==null){ + formulaVar.setFormId(sourceId+""); + } + if(formDataDetail.getDataOptions()!=null && formDataDetail.getDataOptions().size()>0){ + List formDataOptions=formDataDetail.getDataOptions(); + List excelOptionList=new ArrayList<>(); + String optionstr=""; + String optionContent=""; + for(FormDataOption formDataOption:formDataOptions){ + DataOption dataOption=new DataOption(); + dataOption.setOptionId(formDataOption.getOptionId()+""); + dataOption.setOptionContent(formDataOption.getContent()); + excelOptionList.add(dataOption); + optionstr+=formDataOption.getOptionId(); + optionContent+=formDataOption.getContent(); + } + if(StringUtils.isNotEmpty(optionstr)){ + formulaVar.setContent(optionstr); + } + formulaVar.setOptionContent(optionContent); + formulaVar.setDataOptionList(excelOptionList); + } + //明细替换处理 + try { + if(!replaceMap.containsKey(formDataDetail.getFormField().getId())){ + replaceMap.put(formDataDetail.getFormField().getId(),formDataDetail); + }else{ + FormDataDetail lastFormDataDetail=replaceMap.get(formDataDetail.getFormField().getId()); + if(formDataDetail.getDataIndex()!=null && lastFormDataDetail.getDataIndex()!=null){ + if(formDataDetail.getDataIndex().longValue() loopData.getFieldId().equalsIgnoreCase(formDataDetail.getFormField().getId().toString())); + logger.info("替换了:"+JSON.toJSONString(formDataDetail)); + }else{ + continue; + } + } + } + } catch (Exception e) { + logger.error("err",e); + } + + formulaVarList.add(formulaVar); + } + } + return formulaVarList; + } + + /** + * 转换表单字段数据为函数标准参数对象 + * @param formDataDetailList 表单字段数据列表 + * @param sourceId 表单ID或者数据源ID + * @param module 所属模块 + * @return + */ + public List transField(List formDataDetailList,Long layoutId, Long sourceId, ModuleSource module,SimpleEmployee simpleEmployee){ + List formulaVarList=new ArrayList<>(); + if(formDataDetailList!=null && formDataDetailList.size()>0){ + + Map fieldMap = bulidFreeFormService(module).getFieldMapByFormId(sourceId, simpleEmployee); + + FormulaVar formulaVar =null; + for (FormDataDetail formDataDetail:formDataDetailList){ + if(formDataDetail.getFormField()==null){ + throw new RuntimeException("函数数据转换失败,找不到表单字段数据"); + } + FormField newFormField=fieldMap.get(formDataDetail.getFormField().getId()); + if(newFormField!=null){ + formDataDetail.setFormField(newFormField); + } + Double score=getDetailScore(formDataDetail,module,layoutId,simpleEmployee); + + formulaVar=new FormulaVar(); + if(score!=null){ + formulaVar.setScore(score); + } + FormField formField=formDataDetail.getFormField(); + formulaVar.setContent(formDataDetail.getContent()); + if(formDataDetail.getDataText()!=null && StringUtils.isNotEmpty(formDataDetail.getDataText().getContent())){ + if(StringUtils.isNotEmpty(formDataDetail.getDataText().getContent())){ + formulaVar.setContent(formDataDetail.getDataText().getContent()); + } + } + formulaVar.setFieldId(formField.getId()!=null?formField.getId()+"":null); + formulaVar.setFormId(formField.getFormId()!=null?formField.getFormId()+"":null); + formulaVar.setComponentKey(formField.getComponentKey()); + if(formField.getSubForm()!=null){ + formulaVar.setsFormId(formField.getSubForm().getId()+""); + } + formulaVar.setDataType(ExcelParamUtil.findType(formField.getComponentKey())); + formulaVar.setModule(module.toString()); + if(formulaVar.getFormId()==null){ + formulaVar.setFormId(sourceId+""); + } + if(formDataDetail.getDataOptions()!=null && formDataDetail.getDataOptions().size()>0){ + List formDataOptions=formDataDetail.getDataOptions(); + List excelOptionList=new ArrayList<>(); + String optionstr=""; + String optionContent=""; + for(FormDataOption formDataOption:formDataOptions){ + DataOption dataOption=new DataOption(); + dataOption.setOptionId(formDataOption.getOptionId()+""); + dataOption.setOptionContent(formDataOption.getContent()); + excelOptionList.add(dataOption); + optionstr+=formDataOption.getOptionId(); + optionContent+=formDataOption.getContent(); + } + if(StringUtils.isNotEmpty(optionstr)){ + formulaVar.setContent(optionstr); + } + formulaVar.setOptionContent(optionContent); + formulaVar.setDataOptionList(excelOptionList); + } + + formulaVarList.add(formulaVar); + } + } + return formulaVarList; + } + + public Double getDetailScore(FormDataDetail dataDetail, ModuleSource module, Long layoutId, SimpleEmployee employee) { + Double score = null; + FormField formField=dataDetail.getFormField(); +// logger.info("获取分数的参数:"+(JSON.toJSONString(dataDetail))); +// logger.info("获取分数的布局ID:"+(layoutId)); + if( ComponentType.RadioBox.toString().equals(formField.getComponentKey()) + || ComponentType.CheckBox.toString().equals(formField.getComponentKey()) + || ComponentType.Select.toString().equals(formField.getComponentKey())) { +// score=getDetailScoreForForm(dataDetail,module,layoutId,employee); + score = bulidFreeFormService(module).getOptionScore(dataDetail.getFormField().getId()+"", layoutId, dataDetail, employee).doubleValue(); + } + return score; + } + public Double getDetailScoreForForm(FormDataDetail dataDetail, ModuleSource module, Long layoutId, SimpleEmployee employee) { + Double score = null; + FormField formField=dataDetail.getFormField(); + if( ComponentType.RadioBox.toString().equals(formField.getComponentKey()) + || ComponentType.CheckBox.toString().equals(formField.getComponentKey()) + || ComponentType.Select.toString().equals(formField.getComponentKey())) { + if(dataDetail.getDataOptions()!=null && dataDetail.getDataOptions().size()>0){ + Double scoreSum=0D; + for(FormDataOption formDataOption:dataDetail.getDataOptions()){ + try { + if(StringUtils.isNotEmpty(formDataOption.getScore())){ + scoreSum+=Double.parseDouble(formDataOption.getScore()); + } + } catch (NumberFormatException e) { + logger.error("err",e); + } +// scoreString=scoreSum.toString(); + } + if(scoreSum!=null){ + try { + score=scoreSum; + } catch (NumberFormatException e) { + logger.error("err",e); + } + } + logger.info("获取分数:"+score); + } + } + return score; + } + public FreeFormService bulidFreeFormService(ModuleSource module) { + return freeFormAssistService.buildFreeFormService(module.toString()); + } + +} From 87701c7229bbaa6d4b79f957c5de6d5c62feb8dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 13 Apr 2023 15:13:05 +0800 Subject: [PATCH 013/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 1230 +++++++++-------- 1 file changed, 620 insertions(+), 610 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 4fce6de56..0c6b761c7 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -1,7 +1,9 @@ package com.engine.salary.report.service.impl; +import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; @@ -23,7 +25,9 @@ import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.report.util.ReportTimeUtil; import com.engine.salary.service.SalaryAcctEmployeeService; import com.engine.salary.service.SalaryAcctResultService; +import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -35,6 +39,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; +import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; @@ -64,6 +69,10 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary private TaxAgentService taxAgentService; + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + // private ExtEmployeeService extEmployeeService; // @Autowired // private HrmCommonEmployeeService hrmCommonEmployeeService; @@ -435,53 +444,54 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary private PageInfo> buildSubComRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, data.getTenantKey()); -// Map lastComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(lastEmployeeIds, data.getTenantKey()); -// Map sameComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(sameEmployeeIds, data.getTenantKey()); -// -// Set subComIds = new HashSet<>(); -// Map empIdSubComMap = new HashMap<>(); -// Map subComIdNameMap = new HashMap<>(); -// Map lastEmpIdSubComMap = new HashMap<>(); -// Map sameEmpIdSubComMap = new HashMap<>(); -// comInfoMap.forEach((k, v) -> { -// subComIdNameMap.put(v.getId(), v.getName()); -// empIdSubComMap.put(k, v.getId()); -// subComIds.add(v.getId()); -// }); -// lastComInfoMap.forEach((k, v) -> { -// lastEmpIdSubComMap.put(k, v.getId()); -// }); -// sameComInfoMap.forEach((k, v) -> { -// sameEmpIdSubComMap.put(k, v.getId()); -// }); -// -// subComIds.forEach(subComId -> { -// List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); -// List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); -// List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, subComIdNameMap.get(subComId)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); + List> records = new ArrayList<>(); + + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + + Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, data.getTenantKey()); + Map lastComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(lastEmployeeIds, data.getTenantKey()); + Map sameComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(sameEmployeeIds, data.getTenantKey()); + + Set subComIds = new HashSet<>(); + Map empIdSubComMap = new HashMap<>(); + Map subComIdNameMap = new HashMap<>(); + Map lastEmpIdSubComMap = new HashMap<>(); + Map sameEmpIdSubComMap = new HashMap<>(); + comInfoMap.forEach((k, v) -> { + subComIdNameMap.put(v.getId(), v.getName()); + empIdSubComMap.put(k, v.getId()); + subComIds.add(v.getId()); + }); + lastComInfoMap.forEach((k, v) -> { + lastEmpIdSubComMap.put(k, v.getId()); + }); + sameComInfoMap.forEach((k, v) -> { + sameEmpIdSubComMap.put(k, v.getId()); + }); + + subComIds.forEach(subComId -> { + List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, subComIdNameMap.get(subComId)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); return result; } @@ -1065,569 +1075,569 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } -// private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// -// List simpleUserInfoList; -// List lastSimpleUserInfoList; -// List sameSimpleUserInfoList; -// Map> map = Maps.newHashMap(); -// try { -// simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); -// lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); -// sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); -// } catch (Exception e) { -// log.info("获取员工个人信息失败: {}", e.getMessage()); -// return map; -// } -// map.put(NOW_INFO, simpleUserInfoList); -// map.put(LAST_INFO, lastSimpleUserInfoList); -// map.put(SAME_INFO, sameSimpleUserInfoList); -// return map; -// } -// -// private PageInfo> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set educationIds = new HashSet<>(); -// Map educationMap = Maps.newHashMap(); -// -// Map empIdEducationMap = new HashMap<>(); -// Map lastEmpIdEducationMap = new HashMap<>(); -// Map sameEmpIdEducationMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getEducation() != null && employee.getEducation().getId() != null) { -// educationIds.add(employee.getEducation().getId()); -// empIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); -// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getEducation() != null && employee.getEducation().getId() != null) { -// lastEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); -// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getEducation() != null && employee.getEducation().getId() != null) { -// sameEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); -// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); -// } -// }); -// -// educationIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, educationMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// -// private PageInfo> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set degreeIds = new HashSet<>(); -// Map degreeMap = Maps.newHashMap(); -// -// Map empIdDegreeMap = new HashMap<>(); -// Map lastEmpIdDegreeMap = new HashMap<>(); -// Map sameEmpIdDegreeMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getDegree() != null && employee.getDegree().getId() != null) { -// degreeIds.add(employee.getDegree().getId()); -// empIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); -// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getDegree() != null && employee.getDegree().getId() != null) { -// lastEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); -// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getDegree() != null && employee.getDegree().getId() != null) { -// sameEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); -// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); -// } -// }); -// -// degreeIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, degreeMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// -// private PageInfo> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set nationIds = new HashSet<>(); -// Map nationMap = Maps.newHashMap(); -// -// Map empIdNationMap = new HashMap<>(); -// Map lastEmpIdNationMap = new HashMap<>(); -// Map sameEmpIdNationMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getNation() != null && employee.getNation().getId() != null) { -// nationIds.add(employee.getNation().getId()); -// empIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); -// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getNation() != null && employee.getNation().getId() != null) { -// lastEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); -// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getNation() != null && employee.getNation().getId() != null) { -// sameEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); -// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); -// } -// }); -// -// nationIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, nationMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// -// private PageInfo> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set householdTypeIds = new HashSet<>(); -// Map householdTypeMap = Maps.newHashMap(); -// -// Map empIdHouseholdTypeMap = new HashMap<>(); -// Map lastEmpIdHouseholdTypeMap = new HashMap<>(); -// Map sameEmpIdHouseholdTypeMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { -// householdTypeIds.add(employee.getHouseholdType().getId()); -// empIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); -// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { -// lastEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); -// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { -// sameEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); -// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); -// } -// }); -// -// householdTypeIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, householdTypeMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// -// private PageInfo> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set politicsStatusIds = new HashSet<>(); -// Map politicsStatusMap = Maps.newHashMap(); -// -// Map empIdPoliticsStatusMap = new HashMap<>(); -// Map lastEmpIdPoliticsStatusMap = new HashMap<>(); -// Map sameEmpIdPoliticsStatusMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { -// politicsStatusIds.add(employee.getPoliticsStatus().getId()); -// empIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); -// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { -// lastEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); -// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { -// sameEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); -// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); -// } -// }); -// -// politicsStatusIds.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, politicsStatusMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// -// private PageInfo> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set ageSet = new HashSet<>(); -// -// Map empIdAgeMap = new HashMap<>(); -// Map lastEmpIdAgeMap = new HashMap<>(); -// Map sameEmpIdAgeMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getAge() != null) { -// ageSet.add(employee.getAge()); -// empIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getAge() != null) { -// lastEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getAge() != null) { -// sameEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); -// } -// }); -// -// List ages = Lists.newArrayList(ageSet); -// ages = ages.stream().sorted().collect(Collectors.toList()); -// -// ages.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// -// private PageInfo> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set workYearSet = new HashSet<>(); -// -// Map empIdWorkYearMap = new HashMap<>(); -// Map lastEmpIdWorkYearMap = new HashMap<>(); -// Map sameEmpIdWorkYearMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getWorkYear() != null) { -// workYearSet.add(employee.getWorkYear()); -// empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getWorkYear() != null) { -// lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getWorkYear() != null) { -// sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); -// } -// }); -// List workYears = Lists.newArrayList(workYearSet); -// workYears = workYears.stream().sorted().collect(Collectors.toList()); -// -// workYears.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// -// private PageInfo> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set companyYearSet = new HashSet<>(); -// -// Map empIdCompanyYearMap = new HashMap<>(); -// Map lastEmpIdCompanyYearMap = new HashMap<>(); -// Map sameEmpIdCompanyYearMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { -// companyYearSet.add(employee.getCompanyYear()); -// empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { -// lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { -// sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// -// List companyYears = Lists.newArrayList(companyYearSet); -// companyYears = companyYears.stream().sorted().collect(Collectors.toList()); -// -// companyYears.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组"); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// -// private PageInfo> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// // 分组设置 -// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); -// -// -// result.setList(records); -// return result; -// } -// -// private PageInfo> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// // 分组设置 -// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); -// -// Map empIdYearMap = new HashMap<>(); -// Map lastEmpIdYearMap = new HashMap<>(); -// Map sameEmpIdYearMap = new HashMap<>(); -// -// String groupBelong; -// if (StringUtils.isEmpty(dimension.getDimCode())) { -// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { -// groupBelong = SalaryStatisticsReportBO.G_YEAR; -// // 年份数据 -// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); -// } else { -// groupBelong = SalaryStatisticsReportBO.G_ITEM; -// } -// groups.forEach(k -> { -// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setList(records); -// return result; -// } -// -// private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return; -// } -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { -// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { -// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { -// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { -// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { -// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { -// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { -// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { -// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { -// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// } + private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + + List simpleUserInfoList; + List lastSimpleUserInfoList; + List sameSimpleUserInfoList; + Map> map = Maps.newHashMap(); + try { + simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); + lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); + sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); + } catch (Exception e) { + log.info("获取员工个人信息失败: {}", e.getMessage()); + return map; + } + map.put(NOW_INFO, simpleUserInfoList); + map.put(LAST_INFO, lastSimpleUserInfoList); + map.put(SAME_INFO, sameSimpleUserInfoList); + return map; + } + + private PageInfo> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set educationIds = new HashSet<>(); + Map educationMap = Maps.newHashMap(); + + Map empIdEducationMap = new HashMap<>(); + Map lastEmpIdEducationMap = new HashMap<>(); + Map sameEmpIdEducationMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getEducation() != null && employee.getEducation().getId() != null) { + educationIds.add(employee.getEducation().getId()); + empIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); + educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getEducation() != null && employee.getEducation().getId() != null) { + lastEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); + educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getEducation() != null && employee.getEducation().getId() != null) { + sameEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); + educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); + } + }); + + educationIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, educationMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + + private PageInfo> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set degreeIds = new HashSet<>(); + Map degreeMap = Maps.newHashMap(); + + Map empIdDegreeMap = new HashMap<>(); + Map lastEmpIdDegreeMap = new HashMap<>(); + Map sameEmpIdDegreeMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getDegree() != null && employee.getDegree().getId() != null) { + degreeIds.add(employee.getDegree().getId()); + empIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); + degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getDegree() != null && employee.getDegree().getId() != null) { + lastEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); + degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getDegree() != null && employee.getDegree().getId() != null) { + sameEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); + degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); + } + }); + + degreeIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, degreeMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + + private PageInfo> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set nationIds = new HashSet<>(); + Map nationMap = Maps.newHashMap(); + + Map empIdNationMap = new HashMap<>(); + Map lastEmpIdNationMap = new HashMap<>(); + Map sameEmpIdNationMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getNation() != null && employee.getNation().getId() != null) { + nationIds.add(employee.getNation().getId()); + empIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); + nationMap.put(employee.getNation().getId(), employee.getNation().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getNation() != null && employee.getNation().getId() != null) { + lastEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); + nationMap.put(employee.getNation().getId(), employee.getNation().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getNation() != null && employee.getNation().getId() != null) { + sameEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); + nationMap.put(employee.getNation().getId(), employee.getNation().getName()); + } + }); + + nationIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, nationMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + + private PageInfo> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set householdTypeIds = new HashSet<>(); + Map householdTypeMap = Maps.newHashMap(); + + Map empIdHouseholdTypeMap = new HashMap<>(); + Map lastEmpIdHouseholdTypeMap = new HashMap<>(); + Map sameEmpIdHouseholdTypeMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { + householdTypeIds.add(employee.getHouseholdType().getId()); + empIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); + householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { + lastEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); + householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { + sameEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); + householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); + } + }); + + householdTypeIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, householdTypeMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + + private PageInfo> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set politicsStatusIds = new HashSet<>(); + Map politicsStatusMap = Maps.newHashMap(); + + Map empIdPoliticsStatusMap = new HashMap<>(); + Map lastEmpIdPoliticsStatusMap = new HashMap<>(); + Map sameEmpIdPoliticsStatusMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { + politicsStatusIds.add(employee.getPoliticsStatus().getId()); + empIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); + politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { + lastEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); + politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { + sameEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); + politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); + } + }); + + politicsStatusIds.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, politicsStatusMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + + private PageInfo> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set ageSet = new HashSet<>(); + + Map empIdAgeMap = new HashMap<>(); + Map lastEmpIdAgeMap = new HashMap<>(); + Map sameEmpIdAgeMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getAge() != null) { + ageSet.add(employee.getAge()); + empIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getAge() != null) { + lastEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getAge() != null) { + sameEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); + } + }); + + List ages = Lists.newArrayList(ageSet); + ages = ages.stream().sorted().collect(Collectors.toList()); + + ages.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + + private PageInfo> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set workYearSet = new HashSet<>(); + + Map empIdWorkYearMap = new HashMap<>(); + Map lastEmpIdWorkYearMap = new HashMap<>(); + Map sameEmpIdWorkYearMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getWorkYear() != null) { + workYearSet.add(employee.getWorkYear()); + empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getWorkYear() != null) { + lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getWorkYear() != null) { + sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); + } + }); + List workYears = Lists.newArrayList(workYearSet); + workYears = workYears.stream().sorted().collect(Collectors.toList()); + + workYears.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + + private PageInfo> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set companyYearSet = new HashSet<>(); + + Map empIdCompanyYearMap = new HashMap<>(); + Map lastEmpIdCompanyYearMap = new HashMap<>(); + Map sameEmpIdCompanyYearMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (StringUtils.isNotEmpty(employee.getCompanyYear())) { + companyYearSet.add(employee.getCompanyYear()); + empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (StringUtils.isNotEmpty(employee.getCompanyYear())) { + lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (StringUtils.isNotEmpty(employee.getCompanyYear())) { + sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + + List companyYears = Lists.newArrayList(companyYearSet); + companyYears = companyYears.stream().sorted().collect(Collectors.toList()); + + companyYears.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组"); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + + private PageInfo> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + + // 分组设置 + List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); + + + result.setList(records); + return result; + } + + private PageInfo> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + + // 分组设置 + List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); + + Map empIdYearMap = new HashMap<>(); + Map lastEmpIdYearMap = new HashMap<>(); + Map sameEmpIdYearMap = new HashMap<>(); + + String groupBelong; + if (StringUtils.isEmpty(dimension.getDimCode())) { + groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { + groupBelong = SalaryStatisticsReportBO.G_YEAR; + // 年份数据 + handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); + } else { + groupBelong = SalaryStatisticsReportBO.G_ITEM; + } + groups.forEach(k -> { + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + Map temp = new HashMap<>(); + temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setList(records); + return result; + } + + private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return; + } + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { + empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { + empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { + empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { + lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { + lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { + lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { + sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { + sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { + sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); + } + }); + } private PageInfo> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); From abf255d03cbe1427634760569288b4b689c59def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 14 Apr 2023 10:31:20 +0800 Subject: [PATCH 014/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 0c6b761c7..b887abaef 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -3,10 +3,10 @@ package com.engine.salary.report.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.report.SalaryStatisticsReportMapper; import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; @@ -421,24 +421,24 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary private PageInfo> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); -// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); -// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); -// -// List incomeCategoryList = listMap.keySet().stream().sorted().collect(Collectors.toList()); -// incomeCategoryList.forEach(k -> { -// IncomeCategoryEnum incomeCategory = IncomeCategoryEnum.parseByValue(Integer.parseInt(k)); -// if (Objects.nonNull(incomeCategory)) { -// Map temp = new HashMap<>(); -// temp.put(DM, SalaryI18nUtil.getI18nLabel(incomeCategory.getLabelId(), incomeCategory.getDefaultLabel())); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// } -// }); -// -// result.setList(records); + List> records = new ArrayList<>(); + + Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); + Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); + Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); + + List incomeCategoryList = listMap.keySet().stream().sorted().collect(Collectors.toList()); + incomeCategoryList.forEach(k -> { + IncomeCategoryEnum incomeCategory = IncomeCategoryEnum.parseByValue(Integer.parseInt(k)); + if (Objects.nonNull(incomeCategory)) { + Map temp = new HashMap<>(); + temp.put(DM, SalaryI18nUtil.getI18nLabel(incomeCategory.getLabelId(), incomeCategory.getDefaultLabel())); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + } + }); + + result.setList(records); return result; } @@ -450,6 +450,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, data.getTenantKey()); Map lastComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(lastEmployeeIds, data.getTenantKey()); Map sameComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(sameEmployeeIds, data.getTenantKey()); @@ -1549,7 +1550,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(noGroupingList)) { Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组"); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(noGrouping); } From bc590b9ee8e257c877c233fff44e2e4bb98674fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 14 Apr 2023 15:18:18 +0800 Subject: [PATCH 015/245] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryStatisticsItemServiceImpl.java | 17 +- .../SalaryStatisticsReportServiceImpl.java | 1468 +++++++++-------- .../impl/SubTableExportServiceImpl.java | 3 +- .../SalaryStatisticsReportWrapper.java | 59 +- .../salary/service/SalaryEmployeeService.java | 2 + .../impl/SalaryEmployeeServiceImpl.java | 5 + 6 files changed, 797 insertions(+), 757 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java index 7aeb178b6..cabb494f0 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java @@ -12,6 +12,7 @@ import com.engine.salary.report.enums.UnitTypeEnum; import com.engine.salary.report.service.SalaryStatisticsItemService; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; @@ -27,14 +28,16 @@ import java.util.stream.Collectors; public class SalaryStatisticsItemServiceImpl extends Service implements SalaryStatisticsItemService { - private SalaryStatisticsItemMapper salaryStatisticsItemMapper; + private SalaryStatisticsItemMapper getSalaryStatisticsItemMapper() { + return MapperProxyFactory.getProxy(SalaryStatisticsItemMapper.class); + } @Override public SalaryStatisticsItemPO getById(Long id) { if (id == null) { return null; } - return salaryStatisticsItemMapper.getById(id); + return getSalaryStatisticsItemMapper().getById(id); } @Override @@ -42,7 +45,7 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt if (statisticsReportId == null) { return null; } - return salaryStatisticsItemMapper.listSome(SalaryStatisticsItemPO.builder().statReportId(statisticsReportId).build()); + return getSalaryStatisticsItemMapper().listSome(SalaryStatisticsItemPO.builder().statReportId(statisticsReportId).build()); } public List listByIds(Collection ids) { @@ -51,7 +54,7 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt return new ArrayList<>(); } - return salaryStatisticsItemMapper.listSome(SalaryStatisticsItemPO.builder().ids(ids).build()); + return getSalaryStatisticsItemMapper().listSome(SalaryStatisticsItemPO.builder().ids(ids).build()); } @Override @@ -59,7 +62,7 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt SalaryAssert.notEmpty(ids, SalaryI18nUtil.getI18nLabel(152638, "id不可为空")); List list = this.listByIds(ids); if (CollectionUtils.isNotEmpty(list)) { - salaryStatisticsItemMapper.deleteByIds(ids); + getSalaryStatisticsItemMapper().deleteByIds(ids); // list.forEach(po -> { // LoggerContext loggerContext = new LoggerContext<>(); // loggerContext.setTargetId(String.valueOf(po.getId())); @@ -117,7 +120,7 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt .updateTime(now) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); - salaryStatisticsItemMapper.insertIgnoreNull(subTableItemPO); + getSalaryStatisticsItemMapper().insertIgnoreNull(subTableItemPO); // 记录操作日志 // LoggerContext loggerContext = new LoggerContext<>(); @@ -145,7 +148,7 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt itemPO.setMedianRule(Objects.nonNull(saveParam.getMedianRule()) ? JSON.toJSONString(saveParam.getMedianRule()) : ""); } - salaryStatisticsItemMapper.updateIgnoreNull(itemPO); + getSalaryStatisticsItemMapper().updateIgnoreNull(itemPO); // 记录操作日志 // LoggerContext loggerContext = new LoggerContext<>(); diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index b887abaef..49ebd855b 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -3,16 +3,15 @@ package com.engine.salary.report.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; -import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.report.SalaryStatisticsReportMapper; import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.dto.SalaryStatisticsReportDataDTO; -import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; @@ -27,10 +26,13 @@ import com.engine.salary.service.SalaryAcctEmployeeService; import com.engine.salary.service.SalaryAcctResultService; import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.impl.SalaryAcctEmployeeServiceImpl; +import com.engine.salary.service.impl.SalaryAcctResultServiceImpl; import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; -import com.engine.salary.util.JsonUtil; +import com.engine.salary.service.impl.TaxAgentServiceImpl; 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.google.common.collect.Lists; import dm.jdbc.util.IdGenerator; @@ -59,15 +61,25 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary public static final String SAME_INFO = "sameInfoList"; - private SalaryStatisticsReportMapper salaryStatisticsReportMapper; + private SalaryStatisticsReportMapper getSalaryStatisticsReportMapper() { + return MapperProxyFactory.getProxy(SalaryStatisticsReportMapper.class); + } - private SalaryStatisticsItemService salaryStatisticsItemService; + private SalaryStatisticsItemService getSalaryStatisticsItemService(User user) { + return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); + } - private SalaryAcctEmployeeService salaryAcctEmployeeService; + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } - private SalaryAcctResultService salaryAcctResultValueService; + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } - private TaxAgentService taxAgentService; + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); @@ -87,17 +99,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary @Override public List listAll() { - return salaryStatisticsReportMapper.listAll(); + return getSalaryStatisticsReportMapper().listAll(); } @Override public List list() { - return salaryStatisticsReportMapper.listSome(SalaryStatisticsReportPO.builder().creator((long) user.getUID()).build()); + return getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().creator((long) user.getUID()).build()); } @Override public SalaryStatisticsReportPO getById(Long id) { - return salaryStatisticsReportMapper.getById(id); + return getSalaryStatisticsReportMapper().getById(id); } /** @@ -107,7 +119,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary * @return */ private List listByName(String fieldName) { - return salaryStatisticsReportMapper.listSome(SalaryStatisticsReportPO.builder().reportName(fieldName).build()); + return getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().reportName(fieldName).build()); } @Override @@ -129,7 +141,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary BeanUtils.copyProperties(po, poNew); poNew.setReportName(saveParam.getReportName()); poNew.setDimension(StringUtils.join(saveParam.getDimensionIds(), ",")); - this.salaryStatisticsReportMapper.updateIgnoreNull(poNew); + this.getSalaryStatisticsReportMapper().updateIgnoreNull(poNew); // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); @@ -155,7 +167,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary .deleteType(0) .tenantKey("") .build(); - salaryStatisticsReportMapper.insertIgnoreNull(poNew); + getSalaryStatisticsReportMapper().insertIgnoreNull(poNew); // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); @@ -201,16 +213,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); // po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); // po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); -// salaryStatisticsReportMapper.updateIgnoreNull(po); +// getSalaryStatisticsReportMapper().updateIgnoreNull(po); // // // 获取自定义统计项目 -// List salaryStatisticsItemList = salaryStatisticsItemService.listByStatisticsReportId(po.getId()); +// List salaryStatisticsItemList = getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); // // salaryStatisticsItemList.forEach(e -> param.getItems().stream().filter(i -> i.getId().equals(e.getId())).findFirst().ifPresent(salaryStatisticsItem -> { // e.setUnitType(salaryStatisticsItem.getUnitType()); // e.setIndexValue(salaryStatisticsItem.getIndexValue()); // })); -// this.salaryStatisticsItemService.saveOrUpdateBatch(salaryStatisticsItemList); +// this.getSalaryStatisticsItemService(user).saveOrUpdateBatch(salaryStatisticsItemList); // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); @@ -229,12 +241,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } int total = ids.size(); - List list = salaryStatisticsReportMapper.listSome(SalaryStatisticsReportPO.builder().ids(ids).build()); + List list = getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().ids(ids).build()); int success = list.size(); if (success > 0) { List deleteIds = list.stream().map(SalaryStatisticsReportPO::getId).collect(Collectors.toList()); - salaryStatisticsReportMapper.deleteByIds(deleteIds); + getSalaryStatisticsReportMapper().deleteByIds(deleteIds); // list.forEach(e -> { @@ -278,13 +290,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary SalaryStatisticsReportBO.poToQueryParam(param, po); // 获取本期报表分权后的核算人员 - List list = salaryAcctEmployeeService.listBySalaryStatisticsReportParam(param); + List list = getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(param); SalaryStatisticsReportDataQueryParam lastParam = SalaryStatisticsReportBO.lastParamConvert(param, dimension); // 获取上期报表分权后的核算人员 - List lastList = checkMap.get("isLast") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(lastParam) : Lists.newArrayList(); + List lastList = checkMap.get("isLast") ? getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(lastParam) : Lists.newArrayList(); SalaryStatisticsReportDataQueryParam sameParam = SalaryStatisticsReportBO.sameParamConvert(param); // 获取去年同期报表分权后的核算人员 - List sameList = checkMap.get("isSame") ? salaryAcctEmployeeService.listBySalaryStatisticsReportParam(sameParam) : Lists.newArrayList(); + List sameList = checkMap.get("isSame") ? getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(sameParam) : Lists.newArrayList(); SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder() .list(list) @@ -300,13 +312,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary allList.addAll(lastList); allList.addAll(sameList); Set salaryAcctEmployeeIds = allList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toSet()); - List salaryAcctResultValues = salaryAcctResultValueService.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // Map> salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(); Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); - Map> map = new HashMap<>(); + Map> map = new HashMap<>(); salaryAcctEmpResultMap.forEach((k, v) -> { - Map collect = v.stream().collect(Collectors.toMap(p->p.getSalaryItemId().toString(), SalaryAcctResultPO::getResultValue, (key1, key2) -> key2)); - map.put(k,collect); + Map collect = v.stream().collect(Collectors.toMap(p -> p.getSalaryItemId().toString(), SalaryAcctResultPO::getResultValue, (key1, key2) -> key2)); + map.put(k, collect); }); // 根据统计维度进行计算 @@ -351,32 +363,33 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return buildSuperiorRecords(data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: return buildMaritalStatusRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_EDUCATION: - return buildEducationRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_DEGREE: - return buildDegreeRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_NATION: - return buildNationRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE: - return buildHouseholdTypeRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS: - return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_AGE: - return buildAgeRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: - return buildWorkYearRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: - return buildCompanyYearRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_EDUCATION: +// return buildEducationRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_DEGREE: +// return buildDegreeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_NATION: +// return buildNationRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE: +// return buildHouseholdTypeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS: +// return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_AGE: +// return buildAgeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: +// return buildWorkYearRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: +// return buildCompanyYearRecords(data, salaryAcctResultValueMap); default: return new PageInfo<>(); } // 定量-组距式分组 - } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { - return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); - // 定量-单项式分组 - } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { - return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); } +// else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { +// return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); +// // 定量-单项式分组 +// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { +// return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); +// } return new PageInfo<>(); } @@ -405,7 +418,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getTaxAgentId)); - List taxAgentList = taxAgentService.listAll(); + List taxAgentList = getTaxAgentService(user).listAll(); Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); listMap.forEach((k, v) -> { @@ -421,24 +434,24 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary private PageInfo> buildIncomeCategoryRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - - Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); - Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); - Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); - - List incomeCategoryList = listMap.keySet().stream().sorted().collect(Collectors.toList()); - incomeCategoryList.forEach(k -> { - IncomeCategoryEnum incomeCategory = IncomeCategoryEnum.parseByValue(Integer.parseInt(k)); - if (Objects.nonNull(incomeCategory)) { - Map temp = new HashMap<>(); - temp.put(DM, SalaryI18nUtil.getI18nLabel(incomeCategory.getLabelId(), incomeCategory.getDefaultLabel())); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - } - }); - - result.setList(records); +// List> records = new ArrayList<>(); +// +// Map> listMap = data.getList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); +// Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); +// Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getIncomeCategory)); +// +// List incomeCategoryList = listMap.keySet().stream().sorted().collect(Collectors.toList()); +// incomeCategoryList.forEach(k -> { +// IncomeCategoryEnum incomeCategory = IncomeCategoryEnum.parseByValue(Integer.parseInt(k)); +// if (Objects.nonNull(incomeCategory)) { +// Map temp = new HashMap<>(); +// temp.put(DM, SalaryI18nUtil.getI18nLabel(incomeCategory.getLabelId(), incomeCategory.getDefaultLabel())); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// } +// }); +// +// result.setList(records); return result; } @@ -451,9 +464,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - Map comInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(employeeIds, data.getTenantKey()); - Map lastComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(lastEmployeeIds, data.getTenantKey()); - Map sameComInfoMap = hrmCommonEmployeeService.querySubcompanyInfoByEmployeeIds(sameEmployeeIds, data.getTenantKey()); + List comInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); + Map comInfoMap = SalaryEntityUtil.convert2Map(comInfos, DataCollectionEmployee::getEmployeeId); + List lastComInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(lastEmployeeIds); + Map lastComInfoMap = SalaryEntityUtil.convert2Map(lastComInfos, DataCollectionEmployee::getEmployeeId); + List sameComInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(lastEmployeeIds); + Map sameComInfoMap = SalaryEntityUtil.convert2Map(sameComInfos, DataCollectionEmployee::getEmployeeId); Set subComIds = new HashSet<>(); Map empIdSubComMap = new HashMap<>(); @@ -461,15 +477,15 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map lastEmpIdSubComMap = new HashMap<>(); Map sameEmpIdSubComMap = new HashMap<>(); comInfoMap.forEach((k, v) -> { - subComIdNameMap.put(v.getId(), v.getName()); - empIdSubComMap.put(k, v.getId()); - subComIds.add(v.getId()); + subComIdNameMap.put(v.getSubcompanyid(), v.getSubcompanyName()); + empIdSubComMap.put(k, v.getSubcompanyid()); + subComIds.add(v.getSubcompanyid()); }); lastComInfoMap.forEach((k, v) -> { - lastEmpIdSubComMap.put(k, v.getId()); + lastEmpIdSubComMap.put(k, v.getSubcompanyid()); }); sameComInfoMap.forEach((k, v) -> { - sameEmpIdSubComMap.put(k, v.getId()); + sameEmpIdSubComMap.put(k, v.getSubcompanyid()); }); subComIds.forEach(subComId -> { @@ -487,7 +503,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(noGroupingList)) { Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(noGrouping); } @@ -498,59 +514,59 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary private PageInfo> buildDepartRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, data.getTenantKey()); -// List lastSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(lastEmployeeIds, data.getTenantKey()); -// List sameSimpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(sameEmployeeIds, data.getTenantKey()); -// -// Set departIds = new HashSet<>(); -// Map empIdDepartIdMap = new HashMap<>(); -// Map lastEmpIdDepartIdMap = new HashMap<>(); -// Map sameEmpIdDepartIdMap = new HashMap<>(); -// Map departIdNameMap = new HashMap<>(); -// simpleEmployeeList.forEach(employee -> { -// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { -// departIdNameMap.put(employee.getDepartment().getId(), employee.getDepartment().getName()); -// departIds.add(employee.getDepartment().getId()); -// empIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); -// } -// }); -// lastSimpleEmployeeList.forEach(employee -> { -// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { -// lastEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); -// } -// }); -// sameSimpleEmployeeList.forEach(employee -> { -// if (employee.getDepartment() != null && employee.getDepartment().getId() != null) { -// sameEmpIdDepartIdMap.put(employee.getId(), employee.getDepartment().getId()); -// } -// }); -// -// departIds.forEach(departId -> { -// List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); -// List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); -// List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, departIdNameMap.get(departId)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); + List> records = new ArrayList<>(); + + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List simpleEmployeeList = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); + List lastSimpleEmployeeList = getSalaryEmployeeService(user).getEmployeeByIdsAll(lastEmployeeIds); + List sameSimpleEmployeeList = getSalaryEmployeeService(user).getEmployeeByIdsAll(sameEmployeeIds); + + Set departIds = new HashSet<>(); + Map empIdDepartIdMap = new HashMap<>(); + Map lastEmpIdDepartIdMap = new HashMap<>(); + Map sameEmpIdDepartIdMap = new HashMap<>(); + Map departIdNameMap = new HashMap<>(); + simpleEmployeeList.forEach(employee -> { + if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { + departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName()); + departIds.add(employee.getDepartmentId()); + empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); + } + }); + lastSimpleEmployeeList.forEach(employee -> { + if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { + lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); + } + }); + sameSimpleEmployeeList.forEach(employee -> { + if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { + sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); + } + }); + + departIds.forEach(departId -> { + List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, departIdNameMap.get(departId)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); return result; } @@ -1076,603 +1092,603 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } - private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - - List simpleUserInfoList; - List lastSimpleUserInfoList; - List sameSimpleUserInfoList; - Map> map = Maps.newHashMap(); - try { - simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); - lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); - sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); - } catch (Exception e) { - log.info("获取员工个人信息失败: {}", e.getMessage()); - return map; - } - map.put(NOW_INFO, simpleUserInfoList); - map.put(LAST_INFO, lastSimpleUserInfoList); - map.put(SAME_INFO, sameSimpleUserInfoList); - return map; - } - - private PageInfo> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set educationIds = new HashSet<>(); - Map educationMap = Maps.newHashMap(); - - Map empIdEducationMap = new HashMap<>(); - Map lastEmpIdEducationMap = new HashMap<>(); - Map sameEmpIdEducationMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getEducation() != null && employee.getEducation().getId() != null) { - educationIds.add(employee.getEducation().getId()); - empIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); - educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getEducation() != null && employee.getEducation().getId() != null) { - lastEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); - educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getEducation() != null && employee.getEducation().getId() != null) { - sameEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); - educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); - } - }); - - educationIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, educationMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setList(records); - return result; - } - - private PageInfo> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set degreeIds = new HashSet<>(); - Map degreeMap = Maps.newHashMap(); - - Map empIdDegreeMap = new HashMap<>(); - Map lastEmpIdDegreeMap = new HashMap<>(); - Map sameEmpIdDegreeMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getDegree() != null && employee.getDegree().getId() != null) { - degreeIds.add(employee.getDegree().getId()); - empIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); - degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getDegree() != null && employee.getDegree().getId() != null) { - lastEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); - degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getDegree() != null && employee.getDegree().getId() != null) { - sameEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); - degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); - } - }); - - degreeIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, degreeMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setList(records); - return result; - } - - private PageInfo> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set nationIds = new HashSet<>(); - Map nationMap = Maps.newHashMap(); - - Map empIdNationMap = new HashMap<>(); - Map lastEmpIdNationMap = new HashMap<>(); - Map sameEmpIdNationMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getNation() != null && employee.getNation().getId() != null) { - nationIds.add(employee.getNation().getId()); - empIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); - nationMap.put(employee.getNation().getId(), employee.getNation().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getNation() != null && employee.getNation().getId() != null) { - lastEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); - nationMap.put(employee.getNation().getId(), employee.getNation().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getNation() != null && employee.getNation().getId() != null) { - sameEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); - nationMap.put(employee.getNation().getId(), employee.getNation().getName()); - } - }); - - nationIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, nationMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setList(records); - return result; - } - - private PageInfo> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set householdTypeIds = new HashSet<>(); - Map householdTypeMap = Maps.newHashMap(); - - Map empIdHouseholdTypeMap = new HashMap<>(); - Map lastEmpIdHouseholdTypeMap = new HashMap<>(); - Map sameEmpIdHouseholdTypeMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { - householdTypeIds.add(employee.getHouseholdType().getId()); - empIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); - householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { - lastEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); - householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { - sameEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); - householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); - } - }); - - householdTypeIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, householdTypeMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setList(records); - return result; - } - - private PageInfo> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set politicsStatusIds = new HashSet<>(); - Map politicsStatusMap = Maps.newHashMap(); - - Map empIdPoliticsStatusMap = new HashMap<>(); - Map lastEmpIdPoliticsStatusMap = new HashMap<>(); - Map sameEmpIdPoliticsStatusMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { - politicsStatusIds.add(employee.getPoliticsStatus().getId()); - empIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); - politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { - lastEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); - politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { - sameEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); - politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); - } - }); - - politicsStatusIds.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, politicsStatusMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setList(records); - return result; - } - - private PageInfo> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set ageSet = new HashSet<>(); - - Map empIdAgeMap = new HashMap<>(); - Map lastEmpIdAgeMap = new HashMap<>(); - Map sameEmpIdAgeMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getAge() != null) { - ageSet.add(employee.getAge()); - empIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getAge() != null) { - lastEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getAge() != null) { - sameEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); - } - }); - - List ages = Lists.newArrayList(ageSet); - ages = ages.stream().sorted().collect(Collectors.toList()); - - ages.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setList(records); - return result; - } - - private PageInfo> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set workYearSet = new HashSet<>(); - - Map empIdWorkYearMap = new HashMap<>(); - Map lastEmpIdWorkYearMap = new HashMap<>(); - Map sameEmpIdWorkYearMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (employee.getWorkYear() != null) { - workYearSet.add(employee.getWorkYear()); - empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (employee.getWorkYear() != null) { - lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (employee.getWorkYear() != null) { - sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); - } - }); - List workYears = Lists.newArrayList(workYearSet); - workYears = workYears.stream().sorted().collect(Collectors.toList()); - - workYears.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setList(records); - return result; - } - - private PageInfo> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return result; - } - - Set companyYearSet = new HashSet<>(); - - Map empIdCompanyYearMap = new HashMap<>(); - Map lastEmpIdCompanyYearMap = new HashMap<>(); - Map sameEmpIdCompanyYearMap = new HashMap<>(); - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (StringUtils.isNotEmpty(employee.getCompanyYear())) { - companyYearSet.add(employee.getCompanyYear()); - empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (StringUtils.isNotEmpty(employee.getCompanyYear())) { - lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (StringUtils.isNotEmpty(employee.getCompanyYear())) { - sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - - List companyYears = Lists.newArrayList(companyYearSet); - companyYears = companyYears.stream().sorted().collect(Collectors.toList()); - - companyYears.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel( 153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); - } - - result.setList(records); - return result; - } - - private PageInfo> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - - // 分组设置 - List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); - - - result.setList(records); - return result; - } - - private PageInfo> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - - // 分组设置 - List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); - - Map empIdYearMap = new HashMap<>(); - Map lastEmpIdYearMap = new HashMap<>(); - Map sameEmpIdYearMap = new HashMap<>(); - - String groupBelong; - if (StringUtils.isEmpty(dimension.getDimCode())) { - groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { - groupBelong = SalaryStatisticsReportBO.G_YEAR; - // 年份数据 - handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); - } else { - groupBelong = SalaryStatisticsReportBO.G_ITEM; - } - groups.forEach(k -> { - List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - Map temp = new HashMap<>(); - temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - result.setList(records); - return result; - } - - private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { - Map> simpleUserInfoMap = getSimpleUserInfoList(data); - if (simpleUserInfoMap.isEmpty()) { - return; - } - simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { - if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { - empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { - empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { - empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { - if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { - lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { - lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { - lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { - if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { - sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { - sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { - sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); - } - }); - } - - private PageInfo> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - PageInfo> result = new PageInfo<>(); - List> records = new ArrayList<>(); - - // 分组设置 - List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupIndividual.class); - Map empIdYearMap = new HashMap<>(); - Map lastEmpIdYearMap = new HashMap<>(); - Map sameEmpIdYearMap = new HashMap<>(); - - String groupBelong; - if (StringUtils.isEmpty(dimension.getDimCode())) { - groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; - } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { - groupBelong = SalaryStatisticsReportBO.G_YEAR; - - // 年份数据 +// private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// +// List simpleUserInfoList; +// List lastSimpleUserInfoList; +// List sameSimpleUserInfoList; +// Map> map = Maps.newHashMap(); +// try { +// simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); +// lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); +// sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); +// } catch (Exception e) { +// log.info("获取员工个人信息失败: {}", e.getMessage()); +// return map; +// } +// map.put(NOW_INFO, simpleUserInfoList); +// map.put(LAST_INFO, lastSimpleUserInfoList); +// map.put(SAME_INFO, sameSimpleUserInfoList); +// return map; +// } +// +// private PageInfo> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set educationIds = new HashSet<>(); +// Map educationMap = Maps.newHashMap(); +// +// Map empIdEducationMap = new HashMap<>(); +// Map lastEmpIdEducationMap = new HashMap<>(); +// Map sameEmpIdEducationMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getEducation() != null && employee.getEducation().getId() != null) { +// educationIds.add(employee.getEducation().getId()); +// empIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); +// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getEducation() != null && employee.getEducation().getId() != null) { +// lastEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); +// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getEducation() != null && employee.getEducation().getId() != null) { +// sameEmpIdEducationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getEducation().getId()); +// educationMap.put(employee.getEducation().getId(), employee.getEducation().getName()); +// } +// }); +// +// educationIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdEducationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, educationMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdEducationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set degreeIds = new HashSet<>(); +// Map degreeMap = Maps.newHashMap(); +// +// Map empIdDegreeMap = new HashMap<>(); +// Map lastEmpIdDegreeMap = new HashMap<>(); +// Map sameEmpIdDegreeMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getDegree() != null && employee.getDegree().getId() != null) { +// degreeIds.add(employee.getDegree().getId()); +// empIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); +// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getDegree() != null && employee.getDegree().getId() != null) { +// lastEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); +// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getDegree() != null && employee.getDegree().getId() != null) { +// sameEmpIdDegreeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getDegree().getId()); +// degreeMap.put(employee.getDegree().getId(), employee.getDegree().getName()); +// } +// }); +// +// degreeIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDegreeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, degreeMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdDegreeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set nationIds = new HashSet<>(); +// Map nationMap = Maps.newHashMap(); +// +// Map empIdNationMap = new HashMap<>(); +// Map lastEmpIdNationMap = new HashMap<>(); +// Map sameEmpIdNationMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getNation() != null && employee.getNation().getId() != null) { +// nationIds.add(employee.getNation().getId()); +// empIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); +// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getNation() != null && employee.getNation().getId() != null) { +// lastEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); +// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getNation() != null && employee.getNation().getId() != null) { +// sameEmpIdNationMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getNation().getId()); +// nationMap.put(employee.getNation().getId(), employee.getNation().getName()); +// } +// }); +// +// nationIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdNationMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, nationMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdNationMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set householdTypeIds = new HashSet<>(); +// Map householdTypeMap = Maps.newHashMap(); +// +// Map empIdHouseholdTypeMap = new HashMap<>(); +// Map lastEmpIdHouseholdTypeMap = new HashMap<>(); +// Map sameEmpIdHouseholdTypeMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { +// householdTypeIds.add(employee.getHouseholdType().getId()); +// empIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); +// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { +// lastEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); +// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getHouseholdType() != null && employee.getHouseholdType().getId() != null) { +// sameEmpIdHouseholdTypeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getHouseholdType().getId()); +// householdTypeMap.put(employee.getHouseholdType().getId(), employee.getHouseholdType().getName()); +// } +// }); +// +// householdTypeIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, householdTypeMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdHouseholdTypeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set politicsStatusIds = new HashSet<>(); +// Map politicsStatusMap = Maps.newHashMap(); +// +// Map empIdPoliticsStatusMap = new HashMap<>(); +// Map lastEmpIdPoliticsStatusMap = new HashMap<>(); +// Map sameEmpIdPoliticsStatusMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { +// politicsStatusIds.add(employee.getPoliticsStatus().getId()); +// empIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); +// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { +// lastEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); +// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getPoliticsStatus() != null && employee.getPoliticsStatus().getId() != null) { +// sameEmpIdPoliticsStatusMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getPoliticsStatus().getId()); +// politicsStatusMap.put(employee.getPoliticsStatus().getId(), employee.getPoliticsStatus().getName()); +// } +// }); +// +// politicsStatusIds.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, politicsStatusMap.get(k)); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdPoliticsStatusMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set ageSet = new HashSet<>(); +// +// Map empIdAgeMap = new HashMap<>(); +// Map lastEmpIdAgeMap = new HashMap<>(); +// Map sameEmpIdAgeMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getAge() != null) { +// ageSet.add(employee.getAge()); +// empIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getAge() != null) { +// lastEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getAge() != null) { +// sameEmpIdAgeMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge()); +// } +// }); +// +// List ages = Lists.newArrayList(ageSet); +// ages = ages.stream().sorted().collect(Collectors.toList()); +// +// ages.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdAgeMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdAgeMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set workYearSet = new HashSet<>(); +// +// Map empIdWorkYearMap = new HashMap<>(); +// Map lastEmpIdWorkYearMap = new HashMap<>(); +// Map sameEmpIdWorkYearMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (employee.getWorkYear() != null) { +// workYearSet.add(employee.getWorkYear()); +// empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (employee.getWorkYear() != null) { +// lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (employee.getWorkYear() != null) { +// sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); +// } +// }); +// List workYears = Lists.newArrayList(workYearSet); +// workYears = workYears.stream().sorted().collect(Collectors.toList()); +// +// workYears.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return result; +// } +// +// Set companyYearSet = new HashSet<>(); +// +// Map empIdCompanyYearMap = new HashMap<>(); +// Map lastEmpIdCompanyYearMap = new HashMap<>(); +// Map sameEmpIdCompanyYearMap = new HashMap<>(); +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { +// companyYearSet.add(employee.getCompanyYear()); +// empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { +// lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { +// sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// +// List companyYears = Lists.newArrayList(companyYearSet); +// companyYears = companyYears.stream().sorted().collect(Collectors.toList()); +// +// companyYears.forEach(k -> { +// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(noGroupingList)) { +// Map noGrouping = new HashMap<>(); +// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); +// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(noGrouping); +// } +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// // 分组设置 +// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); +// +// +// result.setList(records); +// return result; +// } +// +// private PageInfo> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// // 分组设置 +// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); +// +// Map empIdYearMap = new HashMap<>(); +// Map lastEmpIdYearMap = new HashMap<>(); +// Map sameEmpIdYearMap = new HashMap<>(); +// +// String groupBelong; +// if (StringUtils.isEmpty(dimension.getDimCode())) { +// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { +// groupBelong = SalaryStatisticsReportBO.G_YEAR; +// // 年份数据 // handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); - } else { - groupBelong = SalaryStatisticsReportBO.G_ITEM; - } - - groups.forEach(k -> { - List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - Map temp = new HashMap<>(); - temp.put(DM, k.getValue()); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); - }); - - result.setList(records); - return result; - } +// } else { +// groupBelong = SalaryStatisticsReportBO.G_ITEM; +// } +// groups.forEach(k -> { +// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setList(records); +// return result; +// } +// +// private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// if (simpleUserInfoMap.isEmpty()) { +// return; +// } +// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { +// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { +// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { +// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { +// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { +// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { +// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { +// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { +// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { +// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { +// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); +// } +// }); +// } +// +// private PageInfo> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { +// PageInfo> result = new PageInfo<>(); +// List> records = new ArrayList<>(); +// +// // 分组设置 +// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupIndividual.class); +// Map empIdYearMap = new HashMap<>(); +// Map lastEmpIdYearMap = new HashMap<>(); +// Map sameEmpIdYearMap = new HashMap<>(); +// +// String groupBelong; +// if (StringUtils.isEmpty(dimension.getDimCode())) { +// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; +// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { +// groupBelong = SalaryStatisticsReportBO.G_YEAR; +// +// // 年份数据 +//// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); +// } else { +// groupBelong = SalaryStatisticsReportBO.G_ITEM; +// } +// +// groups.forEach(k -> { +// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); +// Map temp = new HashMap<>(); +// temp.put(DM, k.getValue()); +// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); +// records.add(temp); +// }); +// +// result.setList(records); +// return result; +// } } diff --git a/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java b/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java index 1399f8eaa..446881b88 100644 --- a/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.report.service.impl; +import com.engine.core.impl.Service; import com.engine.salary.report.service.SubTableExportService; /** @@ -8,7 +9,7 @@ import com.engine.salary.report.service.SubTableExportService; * @CreateDate: 2022/11/9 * @Version: v1.0 */ -public class SubTableExportServiceImpl implements SubTableExportService { +public class SubTableExportServiceImpl extends Service implements SubTableExportService { // private Logger logger = LoggerFactory.getLogger(this.getClass()); // diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index f26271fdb..44d33738c 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -1,6 +1,7 @@ package com.engine.salary.report.wrapper; import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; @@ -15,6 +16,10 @@ 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.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -22,6 +27,7 @@ import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; +import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; @@ -36,14 +42,21 @@ public class SalaryStatisticsReportWrapper extends Service { private static final String conditionId = "salaryStatisticsReportSearchCondition"; + private SalaryStatisticsReportService getSalaryStatisticsReportService(User user) { + return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); + } - private SalaryStatisticsReportService salaryStatisticsReportService; + private SalaryStatisticsItemService getSalaryStatisticsItemService(User user) { + return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); + } - private SalaryStatisticsItemService salaryStatisticsItemService; - - private SalaryStatisticsDimensionService salaryStatisticsDimensionService; - - private SubTableExportService subTableExportService; + private SalaryStatisticsDimensionService getSalaryStatisticsDimensionService(User user) { + return ServiceUtil.getService(SalaryStatisticsDimensionServiceImpl.class, user); + } + + private SubTableExportService getSubTableExportService(User user) { + return ServiceUtil.getService(SubTableExportServiceImpl.class, user); + } /** * 报表列表 @@ -53,13 +66,13 @@ public class SalaryStatisticsReportWrapper extends Service { */ public List> list(SalaryStatisticsReportQueryParam queryParam) { // 初始化 - salaryStatisticsDimensionService.init((long)user.getUID()); + getSalaryStatisticsDimensionService(user).init((long)user.getUID()); - List reportList = salaryStatisticsReportService.list(); + List reportList = getSalaryStatisticsReportService(user).list(); if (StringUtils.isNotEmpty(queryParam.getReportName())) { reportList = reportList.stream().filter(rp -> rp.getReportName().contains(queryParam.getReportName())).collect(Collectors.toList()); } - List salaryStatisticsDimensionList = this.salaryStatisticsDimensionService.listAll(); + List salaryStatisticsDimensionList = this.getSalaryStatisticsDimensionService(user).listAll(); Map salaryStatisticsDimensionMap = SalaryEntityUtil.convert2Map(salaryStatisticsDimensionList, k -> k.getId().toString(), SalaryStatisticsDimensionPO::getDimName); List> result = new ArrayList<>(); reportList.forEach(po -> { @@ -84,11 +97,11 @@ public class SalaryStatisticsReportWrapper extends Service { */ public SalaryStatisticsReportPO getFrom(Long id) { - List salaryStatisticsDimensions = salaryStatisticsDimensionService.listAll(); + List salaryStatisticsDimensions = getSalaryStatisticsDimensionService(user).listAll(); String placeholder = SalaryI18nUtil.getI18nLabel(85987, "请输入"); - SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(id); + SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(id); if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } @@ -103,7 +116,7 @@ public class SalaryStatisticsReportWrapper extends Service { * @return */ public String save(SalaryStatisticsReportSaveParam saveParam) { - return salaryStatisticsReportService.save(saveParam); + return getSalaryStatisticsReportService(user).save(saveParam); } /** @@ -114,12 +127,12 @@ public class SalaryStatisticsReportWrapper extends Service { * @return */ public Map delete(Collection ids) { - return salaryStatisticsReportService.delete(ids); + return getSalaryStatisticsReportService(user).delete(ids); } public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param) { - return this.salaryStatisticsReportService.saveSearchCondition(param); + return this.getSalaryStatisticsReportService(user).saveSearchCondition(param); } /** @@ -133,21 +146,21 @@ public class SalaryStatisticsReportWrapper extends Service { if (param.getId() == null || param.getDimensionId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } - SalaryStatisticsDimensionPO dimension = salaryStatisticsDimensionService.getById(param.getDimensionId()); + SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId()); if (dimension == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } // weaTable对象 Map weaTable= new HashMap<>(); // 查询报表配置 - SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(param.getId()); + SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } // 查询自定义统计项目 - List salaryStatisticsItemList = this.salaryStatisticsItemService.listByStatisticsReportId(po.getId()); + List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); // 列表data - PageInfo> page = this.salaryStatisticsReportService.buildReportRecords(dimension, param, po, salaryStatisticsItemList); + PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList); // 组装合计 Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList,(long)user.getUID()); @@ -176,18 +189,18 @@ public class SalaryStatisticsReportWrapper extends Service { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); // } // -// SalaryStatisticsReportPO po = this.salaryStatisticsReportService.getById(param.getId()); +// SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); // if (po == null) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); // } -// SalaryStatisticsDimensionPO dimension = salaryStatisticsDimensionService.getById(param.getDimensionId()); +// SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId()); // if (dimension == null) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); // } // // 查询自定义统计项目 -// List salaryStatisticsItemList = this.salaryStatisticsItemService.listByStatisticsReportId(po.getId()); +// List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); // // 列表data -// Page> page = this.salaryStatisticsReportService.buildReportRecords(dimension, param, po, salaryStatisticsItemList); +// Page> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList); // // 组装合计 // Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList); // if (CollectionUtils.isNotEmpty(page.getRecords()) && MapUtils.isNotEmpty(countResultMap)) { @@ -202,7 +215,7 @@ public class SalaryStatisticsReportWrapper extends Service { // // 组装导出参数 // ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records); // exportParam.setSheetName(SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + exportParam.getDimensionName()); -// return subTableExportService.exportCommon(exportParam, UserContext.getCurrentUser(), TenantContext.get()); +// return getSubTableExportService(user).exportCommon(exportParam, UserContext.getCurrentUser(), TenantContext.get()); return null; } } diff --git a/src/com/engine/salary/service/SalaryEmployeeService.java b/src/com/engine/salary/service/SalaryEmployeeService.java index eb7d56277..7e4f1915c 100644 --- a/src/com/engine/salary/service/SalaryEmployeeService.java +++ b/src/com/engine/salary/service/SalaryEmployeeService.java @@ -46,6 +46,8 @@ public interface SalaryEmployeeService { */ List getEmployeeByIdsAll(List ids); + List listByIds(List ids); + /** * 获取人员信息 * @param employeeId diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index aa3db586b..3c9988c52 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -100,6 +100,11 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee return employBiz.getEmployeeByIdsAll(ids); } + @Override + public List listByIds(List ids) { + return employBiz.getEmployeeByIdsAll(ids); + } + @Override public DataCollectionEmployee getEmployeeById(Long employeeId) { return employBiz.getEmployeeById(employeeId); From 6933d63cb19af475cabe152be76cb6a5395fc314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 17 Apr 2023 09:46:01 +0800 Subject: [PATCH 016/245] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/SalaryStatisticsItemController.java | 9 + .../web/SalaryStatisticsItemController.java | 89 ++++++++ .../wrapper/SalaryStatisticsItemWrapper.java | 215 ++++++++++++++++++ 3 files changed, 313 insertions(+) create mode 100644 src/com/api/salary/web/SalaryStatisticsItemController.java create mode 100644 src/com/engine/salary/report/web/SalaryStatisticsItemController.java create mode 100644 src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java diff --git a/src/com/api/salary/web/SalaryStatisticsItemController.java b/src/com/api/salary/web/SalaryStatisticsItemController.java new file mode 100644 index 000000000..5b72826aa --- /dev/null +++ b/src/com/api/salary/web/SalaryStatisticsItemController.java @@ -0,0 +1,9 @@ +package com.api.salary.web; + + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/report/statistics/item") +public class SalaryStatisticsItemController extends com.engine.salary.report.web.SalaryStatisticsItemController{ + +} diff --git a/src/com/engine/salary/report/web/SalaryStatisticsItemController.java b/src/com/engine/salary/report/web/SalaryStatisticsItemController.java new file mode 100644 index 000000000..86258d8f5 --- /dev/null +++ b/src/com/engine/salary/report/web/SalaryStatisticsItemController.java @@ -0,0 +1,89 @@ +package com.engine.salary.report.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.report.entity.dto.SalaryStatisticsItemFormDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsItemSaveParam; +import com.engine.salary.report.wrapper.SalaryStatisticsItemWrapper; +import com.engine.salary.util.ResponseResult; +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.Collection; +import java.util.List; +import java.util.Map; + +/** + * @Description: 薪酬报表统计项目 + * @Author: wangxiangzhong + * @Date: 2022/12/15 11:40 + */ +public class SalaryStatisticsItemController { + + private SalaryStatisticsItemWrapper getSalaryStatisticsItemWrapper(User user) { + return ServiceUtil.getService(SalaryStatisticsItemWrapper.class, user); + } + /** + * 获取自定义统计项目表单 + * + * @param id + * @return + */ + + @GET + @Path("/getForm") + @Produces(MediaType.APPLICATION_JSON) + public String getForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id")Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsItemWrapper(user)::getForm, id); + } + + + /** + * 自定义统计项目列表 + * + * @param statisticsReportId + * @return + */ + @GET + @Path("/list") + @Produces(MediaType.APPLICATION_JSON) + public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "statisticsReportId")Long statisticsReportId) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>>(user).run(getSalaryStatisticsItemWrapper(user)::list, statisticsReportId); + } + + /** + * 删除自定义统计项目 + * + * @param ids + * @return + */ + @POST + @Path("/delete") + @Produces(MediaType.APPLICATION_JSON) + public String delete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody Collection ids) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>(user).run(getSalaryStatisticsItemWrapper(user)::delete, ids); + } + + + /** + * 保存自定义统计项目 + * + * @param param + * @return + */ + @POST + @Path("/save") + @Produces(MediaType.APPLICATION_JSON) + public String save(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsItemSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsItemWrapper(user)::save, param); + } +} diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java new file mode 100644 index 000000000..044883e2d --- /dev/null +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java @@ -0,0 +1,215 @@ +package com.engine.salary.report.wrapper; + +import com.alibaba.fastjson.JSON; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.report.entity.dto.SalaryStatisticsItemFormDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsItemSaveParam; +import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; +import com.engine.salary.report.enums.UnitTypeEnum; +import com.engine.salary.report.service.SalaryStatisticsItemService; +import com.engine.salary.report.service.impl.SalaryStatisticsItemServiceImpl; +import com.engine.salary.service.SalaryItemService; +import com.engine.salary.service.impl.SalaryItemServiceImpl; +import com.engine.salary.util.SalaryAssert; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import weaver.hrm.User; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 薪酬报表统计项目 + * @Author: wangxiangzhong + * @Date: 2022/12/19 10:49 + */ +@Component +public class SalaryStatisticsItemWrapper extends Service { + + private SalaryStatisticsItemService getSalaryStatisticsItemService(User user) { + return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); + } + + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + /** + * 获取自定义统计项目表单 + * + * @param id + * @return + */ + public SalaryStatisticsItemFormDTO getForm(Long id) { + Map weaForm = new HashMap(); + Map ruleData = new HashMap<>(); + if (Objects.nonNull(id)) { + SalaryStatisticsItemPO salaryStatisticsItem = getSalaryStatisticsItemService(user).getById(id); + SalaryAssert.notNull(salaryStatisticsItem, SalaryI18nUtil.getI18nLabel(152591, "统计项目不存在")); + String itemValue = salaryStatisticsItem.getItemValue(); + if (StringUtils.isNotBlank(itemValue)) { + List salaryItems = getSalaryItemService(user).listAll(); + Map itemsMap = SalaryEntityUtil.convert2Map(salaryItems, k -> k.getId().toString(), SalaryItemPO::getName); + List> welfareItems = new ArrayList<>(); + Arrays.stream(itemValue.split(",")).forEach(value -> { + Map welfareItem = new HashMap<>(); + welfareItem.put("id", value); + welfareItem.put("name", itemsMap.get(value)); + welfareItems.add(welfareItem); + }); + Map map = new HashMap(); + map.put("itemValue", welfareItems); + map.put("itemName", salaryStatisticsItem.getItemName()); + weaForm.put("data", map); + ruleData = buildRule(salaryStatisticsItem); + } + } else { + ruleData = buildRule(null); + } + + return SalaryStatisticsItemFormDTO.builder() + .id(id) + .baseForm(weaForm) + .ruleData(ruleData) + .build(); + } + + public Map buildRule(SalaryStatisticsItemPO salaryStatisticsItem) { + Map weaTable = new HashMap<>(); + List list = new ArrayList<>(); + WeaTableColumn ruleName = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(157532, "统计规则"), "ruleName", "20%"); + WeaTableColumn ratio = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(162990, "占比"), "ratio", "10%"); + WeaTableColumn m2m = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(157533, "环比"), "m2m", "10%"); + WeaTableColumn m2mLimit = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(157536, "环比增幅正常区间设置"), "m2mLimit", "25%"); + WeaTableColumn y2y = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(162991, "同比"), "y2y", "10%"); + WeaTableColumn y2yLimit = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(162992, "同比增幅正常区间设置"), "y2yLimit", "25%"); + list.add(ruleName); + list.add(ratio); + list.add(m2m); + list.add(m2mLimit); + list.add(y2y); + list.add(y2yLimit); + weaTable.put("columns", list); + + List> result = new ArrayList<>(); + List ruleList = Arrays.asList("count", "sum", "avg", "max", "min", "median"); + List ruleNameList = Arrays.asList( + SalaryI18nUtil.getI18nLabel(157268, "计数"), + SalaryI18nUtil.getI18nLabel(157266, "求和"), + SalaryI18nUtil.getI18nLabel(100132, "平均值"), + SalaryI18nUtil.getI18nLabel(163001, "最大值"), + SalaryI18nUtil.getI18nLabel(163002, "最小值"), + SalaryI18nUtil.getI18nLabel(163003, "中位数")); + if (salaryStatisticsItem == null) { + for (int i = 0; i < ruleList.size(); i++) { + Map rule = new HashMap<>(); + rule.put("id", ruleList.get(i)); + rule.put("ruleName", ruleNameList.get(i)); + rule.put("totalValue", 0); + rule.put("ratioValue", 0); + rule.put("m2mValue", 0); + rule.put("m2mUpperLimit", ""); + rule.put("m2mLowerLimit", ""); + rule.put("y2yValue", 0); + rule.put("y2yUpperLimit", ""); + rule.put("y2yLowerLimit", ""); + result.add(rule); + } + } else { + for (int i = 0; i < ruleList.size(); i++) { + Map rule = new HashMap<>(); + switch (ruleList.get(i)) { + case "count": + rule = JSON.parseObject(salaryStatisticsItem.getCountRule(), new HashMap().getClass()); + break; + case "sum": + rule = JSON.parseObject(salaryStatisticsItem.getSumRule(), new HashMap().getClass()); + break; + case "avg": + rule = JSON.parseObject(salaryStatisticsItem.getAvgRule(), new HashMap().getClass()); + break; + case "max": + rule = JSON.parseObject(salaryStatisticsItem.getMaxRule(), new HashMap().getClass()); + break; + case "min": + rule = JSON.parseObject(salaryStatisticsItem.getMinRule(), new HashMap().getClass()); + break; + case "median": + rule = JSON.parseObject(salaryStatisticsItem.getMedianRule(), new HashMap().getClass()); + break; + default: + break; + } + if (rule == null) { + rule = new HashMap<>(); + } + rule.put("id", ruleList.get(i)); + rule.put("ruleName", ruleNameList.get(i)); + rule.put("totalValue", Optional.ofNullable(rule.get("totalValue")).orElse(0)); + rule.put("ratioValue", Optional.ofNullable(rule.get("ratioValue")).orElse(0)); + rule.put("m2mValue", Optional.ofNullable(rule.get("m2mValue")).orElse(0)); + rule.put("m2mUpperLimit", Optional.ofNullable(rule.get("m2mUpperLimit")).orElse("")); + rule.put("m2mLowerLimit", Optional.ofNullable(rule.get("m2mLowerLimit")).orElse("")); + rule.put("y2yValue", Optional.ofNullable(rule.get("y2yValue")).orElse(0)); + rule.put("y2yUpperLimit", Optional.ofNullable(rule.get("y2yUpperLimit")).orElse("")); + rule.put("y2yLowerLimit", Optional.ofNullable(rule.get("y2yLowerLimit")).orElse("")); + result.add(rule); + } + } + weaTable.put("data", result); + return weaTable; + } + + /** + * 获取自定义统计项目列表 + * + * @param statisticsReportId + * @return + */ + public List> list(Long statisticsReportId) { + List salaryStatisticsItemList = getSalaryStatisticsItemService(user).listByStatisticsReportId(statisticsReportId); + salaryStatisticsItemList = salaryStatisticsItemList.stream().sorted(Comparator.comparing(SalaryStatisticsItemPO::getIndexValue)).collect(Collectors.toList()); + List> result = new ArrayList<>(); + salaryStatisticsItemList.forEach(po -> { + Map rule = new HashMap<>(); + rule.put("id", po.getId().toString()); + rule.put("itemName", po.getItemName()); + rule.put("unitType", po.getUnitType() == null ? UnitTypeEnum.YUAN.getItem() : po.getUnitType()); + rule.put("itemValue", po.getItemValue()); + rule.put("countRule", po.getCountRule()); + rule.put("sumRule", po.getSumRule()); + rule.put("avgRule", po.getAvgRule()); + rule.put("maxRule", po.getMaxRule()); + rule.put("minRule", po.getMinRule()); + rule.put("medianRule", po.getMedianRule()); + rule.put("indexValue", po.getIndexValue()); + result.add(rule); + }); + return result; + } + + /** + * 删除自定义统计项目 + * + * @param ids + * @return + */ + public String delete(Collection ids) { + return getSalaryStatisticsItemService(user).delete(ids); + } + + /** + * 保存自定义统计项目 + * + * @param saveParam + * @return + */ + public String save(SalaryStatisticsItemSaveParam saveParam) { + return getSalaryStatisticsItemService(user).save(saveParam); + } +} From f68981baaca9908c6fa83a05d2d30ae5aec1ed2b Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 17 Apr 2023 10:27:31 +0800 Subject: [PATCH 017/245] =?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=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E3=80=81=E6=A0=B8=E7=AE=97=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96=EF=BC=88?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=AF=B9=E6=A1=A3=E6=A1=88=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=9A=84=E8=BF=87=E6=BB=A4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 20 ++++++------ .../service/impl/SIAccountServiceImpl.java | 32 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index e09ce9e7b..a7dd4ed4c 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -148,14 +148,14 @@ public class SIAccountBiz extends Service { public PageInfo listCommonPage(InsuranceAccountDetailParam queryParam) { queryParam.setPaymentStatus(PaymentStatusEnum.COMMON.getValue()); - //过滤出需要核算的人员,即福利档案基础信息表中runStatus为正在缴纳和待减员的人员 - List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); - List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().toString().equals(queryParam.getPaymentOrganization()) - && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) - .map(InsuranceArchivesBaseInfoPO::getEmployeeId) - .collect(Collectors.toList()); - queryParam.setEmployeeIds(canAccountIds); +// //过滤出需要核算的人员,即福利档案基础信息表中runStatus为正在缴纳和待减员的人员 +// List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); +// List canAccountIds = baseInfoPOList.stream() +// .filter(f->f.getPaymentOrganization().toString().equals(queryParam.getPaymentOrganization()) +// && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) +// .map(InsuranceArchivesBaseInfoPO::getEmployeeId) +// .collect(Collectors.toList()); +// queryParam.setEmployeeIds(canAccountIds); //排序配置 OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); queryParam.setOrderRule(orderRule); @@ -226,8 +226,8 @@ public class SIAccountBiz extends Service { List employeeIds = getInsuranceAccountDetailMapper().selectEmpByPaymentOrg(paymentOrganization); // employeeIds = employeeIds.stream().filter(employeeIdsInTaxAgent::contains).collect(Collectors.toList()); if (CollectionUtils.isEmpty(employeeIds)) { - List list = Lists.newArrayList(getInsuranceAccountBatchMapper().getByBillMonth(param.getBillMonth(), paymentOrganization)); - encryptUtil.decryptList(list, InsuranceAccountBatchPO.class); + List list = Lists.newArrayList(getInsuranceAccountDetailMapper().queryNormalListByBillMonth(param.getBillMonth(), paymentOrganization)); + encryptUtil.decryptList(list, InsuranceAccountDetailPO.class); if (CollectionUtils.isNotEmpty(list)) { list.stream().forEach(f -> { getInsuranceAccountDetailMapper().deleteById(f.getId()); diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index e5e6f8672..f7aeec426 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -316,14 +316,14 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Long employeeId = (long) user.getUID(); Map datas = new HashMap<>(); - //过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员 - List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); - List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().toString().equals(queryParam.getPaymentOrganization()) - && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) - .map(InsuranceArchivesBaseInfoPO::getEmployeeId) - .collect(Collectors.toList()); - queryParam.setEmployeeIds(canAccountIds); +// //过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员 +// List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); +// List canAccountIds = baseInfoPOList.stream() +// .filter(f->f.getPaymentOrganization().toString().equals(queryParam.getPaymentOrganization()) +// && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) +// .map(InsuranceArchivesBaseInfoPO::getEmployeeId) +// .collect(Collectors.toList()); +// queryParam.setEmployeeIds(canAccountIds); //补缴缴纳列表 queryParam.setPaymentStatus(PaymentStatusEnum.REPAIR.getValue()); @@ -2859,14 +2859,14 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map datas = new HashMap<>(); queryParam.setPageSize(10000000); - //过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员 - List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); - List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().toString().equals(queryParam.getPaymentOrganization()) - && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) - .map(InsuranceArchivesBaseInfoPO::getEmployeeId) - .collect(Collectors.toList()); - queryParam.setEmployeeIds(canAccountIds); +// //过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员 +// List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); +// List canAccountIds = baseInfoPOList.stream() +// .filter(f->f.getPaymentOrganization().toString().equals(queryParam.getPaymentOrganization()) +// && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) +// .map(InsuranceArchivesBaseInfoPO::getEmployeeId) +// .collect(Collectors.toList()); +// queryParam.setEmployeeIds(canAccountIds); //补缴缴纳列表 queryParam.setPaymentStatus(PaymentStatusEnum.REPAIR.getValue()); From c5d9ea542143d87714d5f9fe1d0549b7cc719d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 18 Apr 2023 11:03:09 +0800 Subject: [PATCH 018/245] =?UTF-8?q?=E7=B4=AF=E8=AE=A1=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E5=85=BB=E8=80=81=E9=87=91bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/AddUpSituationServiceImpl.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index c57f146fd..86ebda64b 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -275,7 +275,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // excel标题 final List title = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "入职日期", "累计收入额", "累计减除费用", "累计社保个人合计", "累计公积金个人合计", "累计子女教育", "累计继续教育", "累计住房贷款利息", "累计住房租金", "累计赡养老人", - "累计大病医疗", "累计企业(职业)年金及其他福利", "累计其他扣除", "累计免税收入", "累计准予扣除的捐赠额", "累计减免税额", "累计已预扣预缴税额", "累计婴幼儿照护"); + "累计大病医疗", "累计企业(职业)年金及其他福利", "累计其他扣除", "累计免税收入", "累计准予扣除的捐赠额", "累计减免税额", "累计已预扣预缴税额", "累计婴幼儿照护","累计个人养老金"); //排序配置 OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); @@ -318,6 +318,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation cellList.add(String.valueOf(dto.getAddUpTaxSavings())); cellList.add(String.valueOf(dto.getAddUpAdvanceTax())); cellList.add(String.valueOf(dto.getAddUpInfantCare())); + cellList.add(String.valueOf(dto.getAddUpPrivatePension())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); @@ -340,7 +341,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation //excel标题 List title = Arrays.asList("姓名", "税款所属期", "个税扣缴义务人", "部门", "手机号", "工号", "累计收入额", "累计减除费用", "累计社保个人合计", "累计公积金个人合计", "累计子女教育", "累计继续教育", "累计住房贷款利息", "累计住房租金", "累计赡养老人", "累计大病医疗", "累计企业(职业)年金及其他福利", - "累计其他扣除", "累计免税收入", "累计准予扣除的捐赠额", "累计减免税额", "累计已预扣预缴税额", "累计婴幼儿照护"); + "累计其他扣除", "累计免税收入", "累计准予扣除的捐赠额", "累计减免税额", "累计已预扣预缴税额", "累计婴幼儿照护","累计个人养老金"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); //查询详细信息 @@ -381,6 +382,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation cellList.add(Util.null2String(dto.getAddUpTaxSavings())); cellList.add(Util.null2String(dto.getAddUpAdvanceTax())); cellList.add(Util.null2String(dto.getAddUpInfantCare())); + cellList.add(Util.null2String(dto.getAddUpPrivatePension())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); @@ -457,7 +459,8 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation SalaryI18nUtil.getI18nLabel(86703, "累计准予扣除的捐赠额"), SalaryI18nUtil.getI18nLabel(105478, "累计减免税额"), SalaryI18nUtil.getI18nLabel(86702, "累计已预扣预缴税额"), - SalaryI18nUtil.getI18nLabel(86702, "累计婴幼儿照护") + SalaryI18nUtil.getI18nLabel(86702, "累计婴幼儿照护"), + SalaryI18nUtil.getI18nLabel(86702, "累计个人养老金") }; // 2.表头 List headerList = Arrays.asList(header); @@ -535,6 +538,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation excelComments.add(new ExcelComment(21, 0, 26, 2, SalaryI18nUtil.getI18nLabel(100344, "输入数字"))); excelComments.add(new ExcelComment(22, 0, 27, 2, SalaryI18nUtil.getI18nLabel(100344, "输入数字"))); excelComments.add(new ExcelComment(23, 0, 28, 2, SalaryI18nUtil.getI18nLabel(100344, "输入数字"))); + excelComments.add(new ExcelComment(24, 0, 29, 2, SalaryI18nUtil.getI18nLabel(100344, "输入数字"))); return ExcelUtil.genWorkbookV2(rows, sheetName, excelComments); } From aeab5c75f53c91d3ee76c25596487ef7e1d8c0d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 18 Apr 2023 11:45:30 +0800 Subject: [PATCH 019/245] =?UTF-8?q?=E5=BE=80=E6=9C=9F=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/AddUpSituationServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index 86ebda64b..805219141 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -573,7 +573,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation InputStream fileInputStream = null; try { fileInputStream = ImageFileManager.getInputStreamById(Integer.valueOf(imageId)); - List excelDates = ExcelParseHelper.parse2Map(fileInputStream, AddUpSituationDTO.class, 0, 1, 24, "template.xlsx"); + List excelDates = ExcelParseHelper.parse2Map(fileInputStream, AddUpSituationDTO.class, 0, 1, 25, "template.xlsx"); apidatas.put("preview", excelDates); } finally { IOUtils.closeQuietly(fileInputStream); @@ -628,7 +628,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation try { fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); - List excelDates = ExcelParseHelper.parse2Map(fileInputStream, AddUpSituationDTO.class, 0, 1, 24, "template.xlsx"); + List excelDates = ExcelParseHelper.parse2Map(fileInputStream, AddUpSituationDTO.class, 0, 1, 25, "template.xlsx"); int total = excelDates.size(); int index = 0; From 62af02522c1d2560453156cc147d70aecc01630a Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 18 Apr 2023 14:21:05 +0800 Subject: [PATCH 020/245] =?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=E7=BA=BF=E4=B8=8B?= =?UTF-8?q?=E5=AF=B9=E6=AF=94=EF=BC=88=E5=88=97=E8=A1=A8=E3=80=81=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E3=80=81=E5=AF=BC=E5=87=BA=EF=BC=89=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E9=A1=B9=E5=AD=97=E6=AE=B5=E6=A0=B9=E6=8D=AE=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E7=BC=B4=E7=BA=B3=E4=B8=AD=E7=9A=84=E6=A0=B8=E7=AE=97=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E8=8E=B7=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bo/InsuranceComparisonResultBO.java | 39 ++++++---- .../salary/service/SIAccountService.java | 2 +- .../impl/SIAComparisonResultServiceImpl.java | 41 ++++++++++- .../service/impl/SIAccountServiceImpl.java | 72 ++++++++++++++++--- .../salary/web/SIAccountController.java | 19 +++-- 5 files changed, 140 insertions(+), 33 deletions(-) diff --git a/src/com/engine/salary/entity/siaccount/bo/InsuranceComparisonResultBO.java b/src/com/engine/salary/entity/siaccount/bo/InsuranceComparisonResultBO.java index d6f6ab501..c24a2f513 100644 --- a/src/com/engine/salary/entity/siaccount/bo/InsuranceComparisonResultBO.java +++ b/src/com/engine/salary/entity/siaccount/bo/InsuranceComparisonResultBO.java @@ -18,10 +18,7 @@ import com.engine.salary.util.page.Column; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -44,13 +41,20 @@ public class InsuranceComparisonResultBO { * 构建福利核算结果列表的表头(线下对比) * */ - public static List buildTableColumns4ComparisonResult() { + public static List buildTableColumns4ComparisonResult(Set insuranceBaseSet, Set insurancePerPaySet, Set insuranceComPaySet) { List listAll = MapperProxyFactory.getProxy(ICategoryMapper.class).listAll(); - List socialWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 1).collect(Collectors.toList()); - List fundWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 2).collect(Collectors.toList()); - List otherWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 3).collect(Collectors.toList()); + List socialWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 1 && e.getIsUse() == 1 && insuranceBaseSet.contains(e.getId())).collect(Collectors.toList()); + List fundWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 2 && e.getIsUse() == 1 && insuranceBaseSet.contains(e.getId())).collect(Collectors.toList()); + List otherWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 3 && e.getIsUse() == 1 && insuranceBaseSet.contains(e.getId())).collect(Collectors.toList()); + List socialWelPerList = listAll.stream().filter(e -> e.getWelfareType() == 1 && e.getIsUse() == 1 && insurancePerPaySet.contains(e.getId())).collect(Collectors.toList()); + List fundWelPerList = listAll.stream().filter(e -> e.getWelfareType() == 2 && e.getIsUse() == 1 && insurancePerPaySet.contains(e.getId())).collect(Collectors.toList()); + List otherWelPerList = listAll.stream().filter(e -> e.getWelfareType() == 3 && e.getIsUse() == 1 && insurancePerPaySet.contains(e.getId())).collect(Collectors.toList()); + + List socialWelComList = listAll.stream().filter(e -> e.getWelfareType() == 1 && e.getIsUse() == 1 && insuranceComPaySet.contains(e.getId())).collect(Collectors.toList()); + List fundWelComList = listAll.stream().filter(e -> e.getWelfareType() == 2 && e.getIsUse() == 1 && insuranceComPaySet.contains(e.getId())).collect(Collectors.toList()); + List otherWelComList = listAll.stream().filter(e -> e.getWelfareType() == 3 && e.getIsUse() == 1 && insuranceComPaySet.contains(e.getId())).collect(Collectors.toList()); List columns = Lists.newArrayList(); // 员工信息字段 columns.add(new Column("姓名", "userName", "userName")); @@ -80,33 +84,33 @@ public class InsuranceComparisonResultBO { } //社保个人(生育保险个人、工伤保险个人、失业保险个人、养老保险个人、医疗保险个人) - for (ICategoryPO po : socialWelfareList) { + for (ICategoryPO po : socialWelPerList) { columns.add(new Column(po.getInsuranceName() + "个人", po.getId() + "socialPer", po.getId() + "socialPer")); } columns.add(new Column("社保个人合计", "socialPerSum", "socialPerSum")); //住房公积金个人、补充住房公积金个人 - for (ICategoryPO po : fundWelfareList) { + for (ICategoryPO po : fundWelPerList) { columns.add(new Column(po.getInsuranceName() + "个人", po.getId() + "fundPer", po.getId() + "fundPer")); } columns.add(new Column("公积金个人合计", "fundPerSum", "fundPerSum")); //其他个人(比如企业年金个人) - for (ICategoryPO po : otherWelfareList) { + for (ICategoryPO po : otherWelPerList) { columns.add(new Column(po.getInsuranceName() + "个人", po.getId() + "otherPer", po.getId() + "otherPer")); } columns.add(new Column("其他福利个人合计", "otherPerSum", "otherPerSum")); columns.add(new Column("个人合计", "perSum", "perSum")); //社保单位(生育保险单位、工伤保险单位、失业保险单位、养老保险单位、医疗保险单位) - for (ICategoryPO po : socialWelfareList) { + for (ICategoryPO po : socialWelComList) { columns.add(new Column(po.getInsuranceName() + "单位", po.getId() + "socialCom", po.getId() + "socialCom")); } columns.add(new Column("社保单位合计", "socialComSum", "socialComSum")); //住房公积金单位、补充住房公积金单位 - for (ICategoryPO po : fundWelfareList) { + for (ICategoryPO po : fundWelComList) { columns.add(new Column(po.getInsuranceName() + "单位", po.getId() + "fundCom", po.getId() + "fundCom")); } columns.add(new Column("公积金单位合计", "fundComSum", "fundComSum")); //其他单位(比如企业年金单位) - for (ICategoryPO po : otherWelfareList) { + for (ICategoryPO po : otherWelComList) { columns.add(new Column(po.getInsuranceName() + "单位", po.getId() + "otherCom", po.getId() + "otherCom")); } columns.add(new Column("其他福利单位合计", "otherComSum", "otherComSum")); @@ -123,7 +127,7 @@ public class InsuranceComparisonResultBO { * 构建福利核算线下对比结果 * */ - public static List> buildComparisonTableData(List accountExportPOS, List excelAccountExportPOS) { + public static List> buildComparisonTableData(List accountExportPOS, List excelAccountExportPOS, Map schemeIdNameMap) { Map> excelResultMap = SalaryEntityUtil.group2Map(excelAccountExportPOS, ExcelAccountExportPO::getWorkcode); // Map> acctResultMap = SalaryEntityUtil.group2Map(accountExportPOS, AccountExportPO::getWorkcode); @@ -162,6 +166,11 @@ public class InsuranceComparisonResultBO { map.put("supplementFundAccount", accountExportPO.getSupplementFundAccount()); map.put("supplementFundAccount" + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue()); + //福利方案名称 + map.put("socialSchemeName", schemeIdNameMap.get(accountExportPO.getSocialSchemeId())); + map.put("fundSchemeName", schemeIdNameMap.get(accountExportPO.getFundSchemeId())); + map.put("otherSchemeName", schemeIdNameMap.get(accountExportPO.getOtherSchemeId())); + //线下值 List excelResultValueList = excelResultMap.get(accountExportPO.getWorkcode()); ExcelAccountExportPO excelAccountExportPO = new ExcelAccountExportPO(); diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index 8a9a97497..8bf792abb 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -244,7 +244,7 @@ public interface SIAccountService { /** * 导出“福利核算-线下对比导入模板” */ - XSSFWorkbook exportComparisonWelfareTemplate(InsuranceAcctDetailImportTemplateParam param); + XSSFWorkbook exportComparisonWelfareTemplate(InsuranceAccountDetailParam param); /** * 将通过“福利核算-线下对比导入”模板导入的数据更新到hrsa_excel_bill_detail表中 diff --git a/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java index c2e813437..2fe3ba1c6 100644 --- a/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java @@ -11,11 +11,14 @@ import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.siexport.param.InsuranceExportParam; import com.engine.salary.entity.siexport.po.AccountExportPO; import com.engine.salary.entity.siexport.po.ExcelAccountExportPO; +import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; import com.engine.salary.enums.siaccount.EmployeeStatusEnum; import com.engine.salary.mapper.InsuranceExportMapper; import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; +import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.service.SIAComparisonResultService; +import com.engine.salary.service.SISchemeService; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; @@ -26,6 +29,7 @@ import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; +import com.wbi.util.Util; import org.apache.commons.lang3.BooleanUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; @@ -57,6 +61,14 @@ public class SIAComparisonResultServiceImpl extends Service implements SIACompar return MapperProxyFactory.getProxy(ICategoryMapper.class); } + private InsuranceSchemeDetailMapper getInsuranceSchemeDetailMapper() { + return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class); + } + + private SISchemeService getSISchemeService(User user) { + return ServiceUtil.getService(SISchemeServiceImpl.class, user); + } + /** * 根据列表查询条件查询线下对比结果(分页) */ @@ -155,10 +167,35 @@ public class SIAComparisonResultServiceImpl extends Service implements SIACompar //2-查询线下对比数据 List excelAccountExportPOS = getInsuranceExportMapper().exportExcelAccount(queryParam); encryptUtil.decryptList(excelAccountExportPOS, ExcelAccountExportPO.class); + + //整理线上核算记录相关的福利方案,并以此整理需要对比的福利项类别数据 + Set welfareSchemeIds = new HashSet<>(); + accountExportPOS.forEach(f -> { + welfareSchemeIds.add(f.getSocialSchemeId()); + welfareSchemeIds.add(f.getFundSchemeId()); + welfareSchemeIds.add(f.getOtherSchemeId()); + }); + List insuranceSchemeDetailPos = getInsuranceSchemeDetailMapper().listAll(); + List insuranceBaseIds = insuranceSchemeDetailPos.stream() + .filter(f -> welfareSchemeIds.contains(f.getPrimaryId()) && f.getIsPayment() == 1) + .map(InsuranceSchemeDetailPO::getInsuranceId) + .collect(Collectors.toList()); + List insurancePerPayIds = insuranceSchemeDetailPos.stream() + .filter(f -> welfareSchemeIds.contains(f.getPrimaryId()) && f.getIsPayment() == 1 && f.getPaymentScope() == 2) + .map(InsuranceSchemeDetailPO::getInsuranceId) + .collect(Collectors.toList()); + List insuranceComPayIds = insuranceSchemeDetailPos.stream() + .filter(f -> welfareSchemeIds.contains(f.getPrimaryId()) && f.getIsPayment() == 1 && f.getPaymentScope() == 1) + .map(InsuranceSchemeDetailPO::getInsuranceId) + .collect(Collectors.toList()); + Set insuranceBaseSet = new HashSet<>(insuranceBaseIds); + Set insurancePerPaySet = new HashSet<>(insurancePerPayIds); + Set insuranceComPaySet = new HashSet<>(insuranceComPayIds); //3-构建福利核算对比结果列表表头 - List weaTableColumns = InsuranceComparisonResultBO.buildTableColumns4ComparisonResult(); + List weaTableColumns = InsuranceComparisonResultBO.buildTableColumns4ComparisonResult(insuranceBaseSet, insurancePerPaySet, insuranceComPaySet); //4-通过线上线下两份数据获得对比结果 - List> resultMapList = InsuranceComparisonResultBO.buildComparisonTableData(accountExportPOS, excelAccountExportPOS); + Map schemeIdNameMap = getSISchemeService(user).getSchemeIdNameMap(); + List> resultMapList = InsuranceComparisonResultBO.buildComparisonTableData(accountExportPOS, excelAccountExportPOS, schemeIdNameMap); // 系统值和线下值一致的人员 if (queryParam.isOnlyDiffEmployee()) { diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index f7aeec426..3ac3faca2 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -28,6 +28,9 @@ import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesFundSchemePO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesSocialSchemePO; import com.engine.salary.entity.sicategory.po.ICategoryPO; +import com.engine.salary.entity.siexport.param.InsuranceExportParam; +import com.engine.salary.entity.siexport.po.AccountExportPO; +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; @@ -35,6 +38,7 @@ import com.engine.salary.enums.siaccount.*; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.InsuranceExportMapper; import com.engine.salary.mapper.siaccount.ExcelInsuranceDetailMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountBatchMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; @@ -43,6 +47,7 @@ import com.engine.salary.mapper.siarchives.FundSchemeMapper; import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; import com.engine.salary.mapper.siarchives.SocialSchemeMapper; 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.mapper.sys.SalarySysConfMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; @@ -183,6 +188,14 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class); } + private InsuranceExportMapper getInsuranceExportMapper() { + return MapperProxyFactory.getProxy(InsuranceExportMapper.class); + } + + private InsuranceSchemeDetailMapper getInsuranceSchemeDetailMapper() { + return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class); + } + @Override public Map listPage(InsuranceAccountBatchParam queryParam) { Long employeeId = (long) user.getUID(); @@ -1824,12 +1837,51 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { * 导出“福利核算-线下对比导入模板” */ @Override - public XSSFWorkbook exportComparisonWelfareTemplate(InsuranceAcctDetailImportTemplateParam param) { + public XSSFWorkbook exportComparisonWelfareTemplate(InsuranceAccountDetailParam param) { + + //查询线上福利核算记录 + InsuranceExportParam insuranceExportParam = new InsuranceExportParam(); + insuranceExportParam.setBillMonth(param.getBillMonth()); + insuranceExportParam.setPaymentOrganization(param.getPaymentOrganization()); + List accountExportPOS = getInsuranceExportMapper().exportAccount(param.getPaymentStatus(), insuranceExportParam); + + //整理线上核算记录相关的福利方案,并以此整理需要对比的福利项类别数据 + Set welfareSchemeIds = new HashSet<>(); + accountExportPOS.forEach(f -> { + welfareSchemeIds.add(f.getSocialSchemeId()); + welfareSchemeIds.add(f.getFundSchemeId()); + welfareSchemeIds.add(f.getOtherSchemeId()); + }); + List insuranceSchemeDetailPos = getInsuranceSchemeDetailMapper().listAll(); + List insuranceBaseIds = insuranceSchemeDetailPos.stream() + .filter(f -> welfareSchemeIds.contains(f.getPrimaryId()) && f.getIsPayment() == 1) + .map(InsuranceSchemeDetailPO::getInsuranceId) + .collect(Collectors.toList()); + List insurancePerPayIds = insuranceSchemeDetailPos.stream() + .filter(f -> welfareSchemeIds.contains(f.getPrimaryId()) && f.getIsPayment() == 1 && f.getPaymentScope() == 2) + .map(InsuranceSchemeDetailPO::getInsuranceId) + .collect(Collectors.toList()); + List insuranceComPayIds = insuranceSchemeDetailPos.stream() + .filter(f -> welfareSchemeIds.contains(f.getPrimaryId()) && f.getIsPayment() == 1 && f.getPaymentScope() == 1) + .map(InsuranceSchemeDetailPO::getInsuranceId) + .collect(Collectors.toList()); + Set insuranceBaseSet = new HashSet<>(insuranceBaseIds); + Set insurancePerPaySet = new HashSet<>(insurancePerPayIds); + Set insuranceComPaySet = new HashSet<>(insuranceComPayIds); List listAll = getICategoryMapper().listAll(); - List socialWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 1).collect(Collectors.toList()); - List fundWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 2).collect(Collectors.toList()); - List otherWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 3).collect(Collectors.toList()); + List socialWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 1 && e.getIsUse() == 1 && insuranceBaseSet.contains(e.getId())).collect(Collectors.toList()); + List fundWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 2 && e.getIsUse() == 1 && insuranceBaseSet.contains(e.getId())).collect(Collectors.toList()); + List otherWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 3 && e.getIsUse() == 1 && insuranceBaseSet.contains(e.getId())).collect(Collectors.toList()); + + List socialWelPerList = listAll.stream().filter(e -> e.getWelfareType() == 1 && e.getIsUse() == 1 && insurancePerPaySet.contains(e.getId())).collect(Collectors.toList()); + List fundWelPerList = listAll.stream().filter(e -> e.getWelfareType() == 2 && e.getIsUse() == 1 && insurancePerPaySet.contains(e.getId())).collect(Collectors.toList()); + List otherWelPerList = listAll.stream().filter(e -> e.getWelfareType() == 3 && e.getIsUse() == 1 && insurancePerPaySet.contains(e.getId())).collect(Collectors.toList()); + + List socialWelComList = listAll.stream().filter(e -> e.getWelfareType() == 1 && e.getIsUse() == 1 && insuranceComPaySet.contains(e.getId())).collect(Collectors.toList()); + List fundWelComList = listAll.stream().filter(e -> e.getWelfareType() == 2 && e.getIsUse() == 1 && insuranceComPaySet.contains(e.getId())).collect(Collectors.toList()); + List otherWelComList = listAll.stream().filter(e -> e.getWelfareType() == 3 && e.getIsUse() == 1 && insuranceComPaySet.contains(e.getId())).collect(Collectors.toList()); + List headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"), SalaryI18nUtil.getI18nLabel(86185, "部门"), SalaryI18nUtil.getI18nLabel(86186, "手机号"), @@ -1860,33 +1912,33 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { headerList.add(po.getInsuranceName() + "申报基数"); } //社保个人(生育保险个人、工伤保险个人、失业保险个人、养老保险个人、医疗保险个人) - for (ICategoryPO po : socialWelfareList) { + for (ICategoryPO po : socialWelPerList) { headerList.add(po.getInsuranceName() + "个人"); } headerList.add(SalaryI18nUtil.getI18nLabel(100388, "社保个人合计")); //住房公积金个人、补充住房公积金个人 - for (ICategoryPO po : fundWelfareList) { + for (ICategoryPO po : fundWelPerList) { headerList.add(po.getInsuranceName() + "个人"); } headerList.add(SalaryI18nUtil.getI18nLabel(100390, "公积金个人合计")); //其他个人(比如企业年金个人) - for (ICategoryPO po : otherWelfareList) { + for (ICategoryPO po : otherWelPerList) { headerList.add(po.getInsuranceName() + "个人"); } headerList.add(SalaryI18nUtil.getI18nLabel(100392, "其他福利个人合计")); headerList.add(SalaryI18nUtil.getI18nLabel(100393, "个人合计")); //社保单位(生育保险单位、工伤保险单位、失业保险单位、养老保险单位、医疗保险单位) - for (ICategoryPO po : socialWelfareList) { + for (ICategoryPO po : socialWelComList) { headerList.add(po.getInsuranceName() + "单位"); } headerList.add(SalaryI18nUtil.getI18nLabel(100394, "社保单位合计")); //住房公积金单位、补充住房公积金单位 - for (ICategoryPO po : fundWelfareList) { + for (ICategoryPO po : fundWelComList) { headerList.add(po.getInsuranceName() + "单位"); } headerList.add(SalaryI18nUtil.getI18nLabel(100395, "公积金单位合计")); //其他单位(比如企业年金单位) - for (ICategoryPO po : otherWelfareList) { + for (ICategoryPO po : otherWelComList) { headerList.add(po.getInsuranceName() + "单位"); } headerList.add(SalaryI18nUtil.getI18nLabel(100396, "其他福利单位合计")); diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index b9978755f..448922c7d 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -559,12 +559,21 @@ public class SIAccountController { @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response exportComparisonWelfareTemplate(@Context HttpServletRequest request, @Context HttpServletResponse response) { try { - InsuranceAcctDetailImportTemplateParam param = new InsuranceAcctDetailImportTemplateParam(); + InsuranceAccountDetailParam param = new InsuranceAccountDetailParam(); -// String welfareNames = request.getParameter("welfareNames"); -// if (StringUtils.isNotBlank(welfareNames)) { -// param.setWelfareNames(Arrays.stream(welfareNames.split(",")).map(String::valueOf).collect(Collectors.toList())); -// } + String billMonth = request.getParameter("billMonth"); + if (StringUtils.isNotBlank(billMonth)) { + param.setBillMonth(billMonth); + } + String paymentOrganization = request.getParameter("paymentOrganization"); + if (StringUtils.isNotBlank(paymentOrganization)) { + param.setPaymentOrganization(paymentOrganization); + } + + String paymentStatus = request.getParameter("paymentStatus"); + if (StringUtils.isNotBlank(paymentStatus)) { + param.setPaymentStatus(Integer.valueOf(paymentStatus)); + } User user = HrmUserVarify.getUser(request, response); XSSFWorkbook workbook = getService(user).exportComparisonWelfareTemplate(param); From 95dd20dc7b5834f327acb06c6394ff9d33dcb3ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 18 Apr 2023 18:55:38 +0800 Subject: [PATCH 021/245] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/SalaryStatisticsReportController.java | 5 ++-- .../SalaryStatisticsReportWrapper.java | 23 ++++++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index 0d66ec25a..ed8a52760 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -4,7 +4,6 @@ import com.engine.common.util.ServiceUtil; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; -import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.report.wrapper.SalaryStatisticsReportWrapper; import com.engine.salary.util.ResponseResult; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -55,7 +54,7 @@ public class SalaryStatisticsReportController { @Produces(MediaType.APPLICATION_JSON) public String getForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryStatisticsReportWrapper(user)::getFrom, id); + return new ResponseResult>(user).run(getSalaryStatisticsReportWrapper(user)::getFrom, id); } /** @@ -116,7 +115,7 @@ public class SalaryStatisticsReportController { @POST @Path("/getData") @Produces(MediaType.APPLICATION_JSON) - public String delete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportDataQueryParam param) { + public String getData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportDataQueryParam param) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getSalaryStatisticsReportWrapper(user)::getData, param); } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 44d33738c..a0b4d18cc 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -3,6 +3,7 @@ package com.engine.salary.report.wrapper; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.component.WeaFormOption; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; @@ -95,17 +96,27 @@ public class SalaryStatisticsReportWrapper extends Service { * @param * @return */ - public SalaryStatisticsReportPO getFrom(Long id) { + public Map getFrom(Long id) { List salaryStatisticsDimensions = getSalaryStatisticsDimensionService(user).listAll(); - String placeholder = SalaryI18nUtil.getI18nLabel(85987, "请输入"); + List statsDimOptions = salaryStatisticsDimensions.stream().map(sd -> new WeaFormOption(sd.getId().toString(), sd.getDimName())).collect(Collectors.toList()); + // 1.构建基础信息表单 + Map weaForm = new HashMap<>(); + weaForm.put("statsDimOptions",statsDimOptions); - SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(id); - if (po == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); + + if (id != null) { + SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(id); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); + } + Map dataMap = JsonUtil.parseMap(po, Object.class); + dataMap.put("dimension", Arrays.asList(po.getDimension().split(","))); + weaForm.put("data",dataMap); } - return po; + + return weaForm; } /** From a19b19e23dff3ff0ed0f3ace840d47d33a3a3b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 19 Apr 2023 10:15:01 +0800 Subject: [PATCH 022/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/component/SalaryWeaTable.java | 4 +- .../datacollection/bo/AttendQuoteDataBO.java | 6 +- .../salaryacct/bo/SalaryCheckResultBO.java | 6 +- .../formlua/data/ExpressDataService.java | 85 - .../formlua/data/ExpressDataServiceImpl.java | 662 ------ .../salary/formlua/data/func/EqOperator.java | 117 - .../formlua/data/func/LessMoreOperator.java | 115 - .../salary/formlua/data/func/LogicFunc.java | 99 - .../formlua/data/func/NotEqOperator.java | 112 - .../formlua/data/func/QLExpressContext.java | 47 - .../formlua/data/func/QlExpressUtil.java | 148 -- .../formlua/entity/parameter/ExcelFuncs.java | 218 +- .../entity/parameter/FuncDescUtil.java | 222 +- .../entity/parameter/ThreadLocalData.java | 10 +- .../func/date/DateTimeServiceImpl.java | 2 +- .../func/date/DateTimeTestServiceImpl.java | 4 +- .../func/find/FindFuncsServiceImpl.java | 6 +- .../salary/formlua/util/ExcelParamUtil.java | 2042 +++++++++-------- .../formlua/util/ExcelStandardUtil.java | 10 +- .../engine/salary/formlua/util/TestUtil.java | 4 +- .../formlua/util/standard/ExcelTransUtil.java | 320 --- .../remote/attend/cmd/GetKQReportCmd.java | 20 +- .../salary/service/RemoteExcelService.java | 14 +- .../impl/AddUpDeductionServiceImpl.java | 2 +- .../impl/AddUpSituationServiceImpl.java | 2 +- .../service/impl/RemoteExcelServiceImpl.java | 16 +- .../impl/SalaryAcctExcelServiceImpl.java | 4 +- .../service/impl/SalarySendServiceImpl.java | 4 +- .../impl/TaxDeclarationDetailServiceImpl.java | 2 +- .../engine/salary/util/SalaryI18nUtil.java | 6 +- .../salary/web/SalaryAcctController.java | 4 +- .../salary/wrapper/OtherDeductionWrapper.java | 2 +- .../wrapper/SalaryAcctExcelWrapper.java | 4 +- .../wrapper/SalaryAcctResultWrapper.java | 2 +- 34 files changed, 1308 insertions(+), 3013 deletions(-) delete mode 100644 src/com/engine/salary/formlua/data/ExpressDataService.java delete mode 100644 src/com/engine/salary/formlua/data/ExpressDataServiceImpl.java delete mode 100644 src/com/engine/salary/formlua/data/func/EqOperator.java delete mode 100644 src/com/engine/salary/formlua/data/func/LessMoreOperator.java delete mode 100644 src/com/engine/salary/formlua/data/func/LogicFunc.java delete mode 100644 src/com/engine/salary/formlua/data/func/NotEqOperator.java delete mode 100644 src/com/engine/salary/formlua/data/func/QLExpressContext.java delete mode 100644 src/com/engine/salary/formlua/data/func/QlExpressUtil.java delete mode 100644 src/com/engine/salary/formlua/util/standard/ExcelTransUtil.java diff --git a/src/com/engine/salary/component/SalaryWeaTable.java b/src/com/engine/salary/component/SalaryWeaTable.java index b4e41a76c..98110f7ce 100644 --- a/src/com/engine/salary/component/SalaryWeaTable.java +++ b/src/com/engine/salary/component/SalaryWeaTable.java @@ -56,7 +56,7 @@ public class SalaryWeaTable extends WeaTable { Arrays.stream(operates).forEach(o -> { String text = o.text(); int labelId = o.labelId(); - String htmlLabelName = SystemEnv.getHtmlLabelName(labelId, user.getLanguage()); + String htmlLabelName = SalaryI18nUtil.getI18nLabel(labelId, user.getLanguage()); if (StringUtils.isNotBlank(htmlLabelName)) { text = htmlLabelName; } @@ -86,7 +86,7 @@ public class SalaryWeaTable extends WeaTable { SalaryTableColumn columnAnn = f.getAnnotation(SalaryTableColumn.class); String text = columnAnn.text(); int labelId = columnAnn.labelId(); - String htmlLabelName = SystemEnv.getHtmlLabelName(labelId, user.getLanguage()); + String htmlLabelName = SalaryI18nUtil.getI18nLabel(labelId, user.getLanguage()); if (StringUtils.isNotBlank(htmlLabelName)) { text = htmlLabelName; } diff --git a/src/com/engine/salary/entity/datacollection/bo/AttendQuoteDataBO.java b/src/com/engine/salary/entity/datacollection/bo/AttendQuoteDataBO.java index 66bc83223..144ed4c0e 100644 --- a/src/com/engine/salary/entity/datacollection/bo/AttendQuoteDataBO.java +++ b/src/com/engine/salary/entity/datacollection/bo/AttendQuoteDataBO.java @@ -47,10 +47,10 @@ public class AttendQuoteDataBO { }); } -// public static SimpleEmployee getCurrentUser4Remote() { -// SimpleEmployee se = UserContext.getCurrentUser(); +// public static DataCollectionEmployee getCurrentUser4Remote() { +// DataCollectionEmployee se = UserContext.getCurrentUser(); // if(se != null){ -// SimpleEmployee simple = new SimpleEmployee(); +// DataCollectionEmployee simple = new DataCollectionEmployee(); // simple.setId(se.getId()); // simple.setUserId(se.getUserId()); // simple.setUsername(se.getUsername()); diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryCheckResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryCheckResultBO.java index 34b4f3267..a9d26843c 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryCheckResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryCheckResultBO.java @@ -8,7 +8,7 @@ //import com.weaver.hrm.salary.entity.salaryacct.po.SalaryCheckResultRecordPO; //import com.weaver.hrm.salary.entity.salarysob.po.SalarySobCheckRulePO; //import com.weaver.hrm.salary.util.SalaryEntityUtil; -//import com.weaver.teams.domain.user.SimpleEmployee; +//import com.weaver.teams.domain.user.DataCollectionEmployee; //import org.apache.commons.collections4.CollectionUtils; //import org.apache.commons.lang3.StringUtils; //import org.apache.commons.lang3.math.NumberUtils; @@ -71,13 +71,13 @@ // public static List convert2RecordListDTO(List salaryCheckResultRecords, // List salarySobCheckRules, // List expressFormulas, -// List simpleEmployees) { +// List simpleEmployees) { // if (CollectionUtils.isEmpty(salaryCheckResultRecords)) { // return Collections.emptyList(); // } // Map formulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula); // Map checkRuleMap = SalaryEntityUtil.convert2Map(salarySobCheckRules, SalarySobCheckRulePO::getId, SalarySobCheckRulePO::getName); -// Map employeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, SimpleEmployee::getEmployeeId, SimpleEmployee::getName); +// Map employeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getName); // return salaryCheckResultRecords.stream() // .map(e -> SalaryCheckResultRecordListDTO.builder() // .id(e.getId()) diff --git a/src/com/engine/salary/formlua/data/ExpressDataService.java b/src/com/engine/salary/formlua/data/ExpressDataService.java deleted file mode 100644 index 239974af7..000000000 --- a/src/com/engine/salary/formlua/data/ExpressDataService.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.engine.salary.formlua.data; - -import com.weaver.common.form.data.FormData; -import com.weaver.excel.formula.api.entity.ExpressFormula; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.teams.domain.user.SimpleEmployee; - -import java.util.List; -import java.util.Map; - -/** - * 公式数据交互service - * @author Failymiss - * - */ -public interface ExpressDataService { - - public Map buildCndFilter(Long formId, Long fieldId, String express, Map params, String module, SimpleEmployee employee); - - /** - * 统计函数条件校验 - * @param formId - * @param fieldId - * @param funcName - * @param express - * @param params - * @param module - * @param employee - * @return - * @throws Exception - */ - public Double getAggregateDataTest(Long formId, Long fieldId, String funcName,String module,Map params,SimpleEmployee employee) throws Exception; - - /** - * @param formId - * @param fieldId - * @param funcName - * @param express - * @param params - * @param module - * @param employee - * @return - */ - public Double getAggregateData(Long formId, Long fieldId, String funcName, String express, Map params, String module, SimpleEmployee employee); - - public Double getCommonAggregateData(Long formId,Long fieldId,String funcName,List cndDataType,String moduleSource,SimpleEmployee employee); - - /** - * formdata封装成函数需要的数据结构 - * @param fieldIds 字段id - * @param dataId 当前数据id(上报id,审批id) - * @param module 当前数据module - * @param employee 操作人 - * @return - */ -// public Map bulidDataType(List fieldIds, Long dataId, ModuleSource module, SimpleEmployee employee); - - /** - * @param fieldIds - * @param formData - * @param module - * @param employee - * @return - */ - public Map bulidDataType(List fieldIds, FormData formData, String module,SimpleEmployee employee); - - /** - * 测试统计筛选条件 - */ - public void testFunc(SimpleEmployee employee); - - String getDataType(String componentKey); - - /** - * 给规则库更新时构建筛选条件的一个接口 - * @param formula - * @param targetFormId - * @param employee - * @param formData - * @param module - * @return - */ - Map buildFilterParam(ExpressFormula formula, Long targetFormId, SimpleEmployee employee, FormData formData, String module); - -} diff --git a/src/com/engine/salary/formlua/data/ExpressDataServiceImpl.java b/src/com/engine/salary/formlua/data/ExpressDataServiceImpl.java deleted file mode 100644 index 5d6991b5f..000000000 --- a/src/com/engine/salary/formlua/data/ExpressDataServiceImpl.java +++ /dev/null @@ -1,662 +0,0 @@ -package com.engine.salary.formlua.data; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.google.common.collect.Maps; -import com.weaver.common.base.entity.result.WeaResult; -import com.weaver.common.form.FreeFormAssistService; -import com.weaver.common.form.FreeFormService; -import com.weaver.common.form.FreeStatAssistService; -import com.weaver.common.form.component.base.ComponentConfig; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.common.form.constant.FormGroup; -import com.weaver.common.form.data.FormData; -import com.weaver.common.form.data.FormDataStatus; -import com.weaver.common.form.data.detail.FormDataDetail; -import com.weaver.common.form.data.option.FormDataOption; -import com.weaver.common.form.data.text.FormDataText; -import com.weaver.common.form.metadata.ModuleSource; -import com.weaver.common.form.metadata.field.FormField; -import com.weaver.common.form.remoteService.RemoteFreeStatService; -import com.weaver.common.form.stat.FilterFormData; -import com.weaver.common.form.stat.domain.search.FilterFormDataParam; -import com.weaver.common.form.stat.service.serarch.FilterFormDataSearchService; -import com.weaver.context.WeaverSentinelContext; -import com.weaver.excel.formula.api.entity.ExpressFormula; -import com.weaver.excel.formula.api.entity.FormulaVar; -import com.weaver.excel.formula.core.rpc.ExcelDubboInvoker; -import com.weaver.excel.formula.core.rpc.RemoteExcelService; -import com.weaver.excel.formula.data.func.QlExpressUtil; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.excel.formula.entity.parameter.FormulaContext; -import com.weaver.excel.formula.entity.parameter.standard.AggFunc; -import com.weaver.excel.formula.entity.parameter.standard.ExcelResult; -import com.weaver.excel.formula.entity.parameter.standard.FormulaFilterData; -import com.weaver.excel.formula.util.ExcelParamUtil; -import com.weaver.excel.formula.util.standard.ExcelTransUtil; -import com.weaver.framework.rpc.annotation.RpcReference; -import com.weaver.teams.core.orm.mybatis.Page; -import com.weaver.teams.domain.user.SimpleEmployee; -import com.weaver.teams.formreport.remote.RemoteFormReportService; -import com.weaver.utils.WeaverDubboSentinelUtil; -import com.weaver.workflow.common.entity.list.requestlist.RequestListDataVoEntity; -import com.weaver.workflow.common.entity.list.requestlist.RequestListSearchConditionEntity; -import com.weaver.workflow.list.api.rest.publicapi.WflRequestListFormRest; -import com.weaver.workflow.list.api.rest.publicapi.WflSearchConditionRest; -import com.weaver.workflow.report.api.rest.reportstat.WfcReportStatRest; -import org.apache.dubbo.rpc.RpcException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import java.math.BigDecimal; -import java.util.*; - -@Service -@SuppressWarnings("unused") -public class ExpressDataServiceImpl implements ExpressDataService { - - protected final Logger logger = LoggerFactory.getLogger(getClass()); - @Autowired - protected FreeFormAssistService freeFormAssistService; - @RpcReference(group = FormGroup.WORKFLOW) - protected RemoteFreeStatService remoteFlowFreeStatService; - @Autowired - private FreeStatAssistService freeStatAssistService; - @RpcReference(group = "biaoge") - protected RemoteExcelService remoteExcelService; - @RpcReference(group = FormGroup.FORMREPORT) - protected RemoteFreeStatService remoteReportFreeStatService; - @Autowired - private QlExpressUtil qlExpressUtil; - @RpcReference - RemoteFormReportService remoteFormReportService; -// @RpcReference -// private WfcSearchConditionRest wfcSearchConditionRest; - @RpcReference(group = "workflow") - private WflSearchConditionRest wflSearchConditionRest; -// @RpcReference(group = "workflow",timeout = 300000) -// private WfcRequestListFormRest wfcRequestListFormRpc; - @RpcReference(group = "workflow") - private WflRequestListFormRest wflRequestListFormRest; - @Autowired - private ExcelDubboInvoker excelDubboInvoker; - @Autowired - private ExcelTransUtil excelTransUtil; -// @RpcReference(group = "workflow") -// private WfcRequestListFormRest wfcRequestListFormRest; - @RpcReference(group = "hrmsalary") - private RemoteExcelService remoteExcelServiceHrmSalary; - @RpcReference(group = "workflow") - private WfcReportStatRest wfcReportStatRest; - @Autowired - private FilterFormDataSearchService filterFormDataSearchService; - @Override - public void testFunc(SimpleEmployee employee) { - - try { - Map params = new HashMap(); - List formFields = bulidFreeFormService(ModuleSource.biaoge).getFormFieldListByStatus(2598433966837708893L, null, employee); - if(formFields != null && formFields.size() > 0) { - for(FormField formField:formFields) { - params.put("fieldId_"+formField.getId(), formField); - } - } - - String str = "2=5"; - - //测试= ==方法 - logger.info("测试=,==方法"); - - String str2 = "fieldId_2598434392040299458=5"; - - String str3 = "fieldId_3419471597648354446=5"; - logger.info("数字控件:"+JSON.toJSONString(qlExpressUtil.execute(str3, params))); - - String str4 = "fieldId_2598434963895899468='2020-07-14'"; - logger.info("日期控件:"+JSON.toJSONString(qlExpressUtil.execute(str4, params))); - - String str5 = "fieldId_3419471597648354447=5"; - logger.info("选项控件:"+JSON.toJSONString(qlExpressUtil.execute(str5, params))); - - //测试= ==方法 - logger.info("测试 >= <= > < 方法"); - - String str7 = "fieldId_3419471597648354446=5"; - logger.info("数字控件:"+JSON.toJSONString(qlExpressUtil.execute(str3, params))); - - String str8 = "fieldId_2598434963895899468='2020-07-14'"; - logger.info("日期控件:"+JSON.toJSONString(qlExpressUtil.execute(str4, params))); - - logger.info("测试 >= =< !=方法"); - } catch (Exception e) { - logger.error("err",e); - } - } - - @Override - public Double getAggregateDataTest(Long formId, Long fieldId, String funcName,String module,Map params,SimpleEmployee employee) throws Exception { - Double value = 0d; - return 1d; - } - - @SuppressWarnings("unchecked") - @Override - public Map buildCndFilter(Long formId, Long fieldId, String express, Map params, String module, SimpleEmployee employee) { - Map paramMap=new HashMap<>(); - List filterFormDatas = new ArrayList(); - if(express != null) { - if(params == null) { - params = new HashMap(); - } - List formFields = bulidFreeFormService(ModuleSource.valueOf(module)).getFormFieldListByStatus(formId, null, employee); - if(formFields != null && formFields.size() > 0) { - for(FormField formField:formFields) { - params.put("field"+formField.getId(), formField); - } - } - try { - Object object = qlExpressUtil.execute(express, params); - if(object instanceof FilterFormData) { - filterFormDatas.add((FilterFormData) object); - }else if((object instanceof List) && (((List) object).get(0) instanceof FilterFormData)) { - filterFormDatas.addAll((List)object); - } - } catch (Exception e) { - logger.error("err",e); - } - } - Map param = assemblyParam(formId, employee); - if(filterFormDatas != null && filterFormDatas.size() > 0) { - param.put("condition", filterFormDatas.get(0).getCondition()); - } - paramMap.put("param",param); - paramMap.put("filterFormDatas",filterFormDatas); - return paramMap; - } - - @Override - @SuppressWarnings("unchecked") - public Double getAggregateData(Long formId, Long fieldId, String funcName,String express, Map params, String module, SimpleEmployee employee) { - Double value = 0d; - List filterFormDatas = new ArrayList(); - if(express != null) { - if(params == null) { - params = new HashMap(); - } - - List formFields = bulidFreeFormService(ModuleSource.valueOf(module)).getFormFieldListByStatus(formId, null, employee); - if(formFields != null && formFields.size() > 0) { - for(FormField formField:formFields) { - boolean isput=false; - Iterator keysets=params.keySet().iterator(); - while (keysets.hasNext()){ - String key=keysets.next(); - Object obj=params.get(key); - logger.info("聚合函数匹配表单控件:"+key+"-->"+formField.getId()); - if(obj instanceof DataType){ - DataType dataType=(DataType)obj; - if(null!=dataType.getFieldId()&&Long.parseLong(dataType.getFieldId())==formField.getId() && !dataType.getName().equals("当前数据")){ - params.put(key, formField); - }else if(key.indexOf(formField.getId()+"")>0){ - params.put(key, formField); - } - }else if(key.indexOf(formField.getId()+"")>0){ - params.put(key, formField); - } - } - if(!isput){ - params.put("field"+formField.getId(), formField); - } - } - } - logger.info(formId+"aggregate express:"+express); - try { - Object object = qlExpressUtil.execute(express, params); - if(object instanceof FilterFormData) { - filterFormDatas.add((FilterFormData) object); - }else if((object instanceof List) && (((List) object).get(0) instanceof FilterFormData)) { - filterFormDatas.addAll((List)object); - } - } catch (Exception e) { - logger.error("err",e); - } - } - Map param = assemblyParam(formId, employee); - if(filterFormDatas != null && filterFormDatas.size() > 0) { - logger.info(filterFormDatas.get(0).getCondition()); - param.put("condition", StringUtils.isEmpty(filterFormDatas.get(0).getCondition())?"AND":filterFormDatas.get(0).getCondition()); - } -// logger.info(formId+"param聚合参数:"+(param!=null?JSON.toJSONString(param):"NULL")); -// logger.info(formId+"filterFormDatas聚合参数:"+(filterFormDatas!=null?JSON.toJSONString(filterFormDatas):"NULL")); -// logger.info(formId+"fieldId聚合参数:"+fieldId); - if("count".equalsIgnoreCase(funcName)) { - if(module.equalsIgnoreCase(ModuleSource.biaoge.toString())){ - value=Double.valueOf(remoteFormReportService.countStatFormDatasForReportNum(param, filterFormDatas, null, employee)); - } else if(module.equalsIgnoreCase(ModuleSource.workflow.toString())){ -// value=Double.valueOf(remoteFlowDataStatQueryService.countStatFormDatasForFlowNum(param, filterFormDatas, employee)); - value = getFlowData(param, filterFormDatas, employee, formId); - } - }else { - if (module.equalsIgnoreCase(ModuleSource.workflow.toString())) { - value = remoteFlowFreeStatService.findFieldStatByField(param, filterFormDatas, - fieldId, funcName,employee); - } else if(module.equalsIgnoreCase(ModuleSource.biaoge.toString())){ - value = remoteReportFreeStatService.findFieldStatByField(param, filterFormDatas, - fieldId, funcName,employee); - } - } - logger.info(funcName+"聚合结果:"+value); - return value; - } - - @Override - public Double getCommonAggregateData(Long formId, Long fieldId, String funcName, List cndDataType, String moduleSource, SimpleEmployee employee) { - Double value=0d; - funcName=funcName.toLowerCase(); - List filterFormDatas=null; - List formulaFilterDataList=new ArrayList<>(); - for (int i=1;i paramFilterList=paramObj.getFormulaFilterDataList(); -// logger.info(JSON.toJSONString(paramFilterList)); - formulaFilterDataList.addAll(paramFilterList); - } - } - - //审批、上报使用老条件 - if(moduleSource.equalsIgnoreCase(ModuleSource.workflow.toString()) || moduleSource.equalsIgnoreCase(ModuleSource.biaoge.toString())){ - JSONArray jsonArray=JSON.parseArray(JSON.toJSONString(formulaFilterDataList)); - filterFormDatas=jsonArray.toJavaList(FilterFormData.class); -// logger.info("函数条件新转老结果:"+(JSON.toJSONString(filterFormDatas))); - } - logger.info("条件参数:"+JSON.toJSONString(filterFormDatas)); - Map param = assemblyParam(formId, employee); - if(filterFormDatas != null && filterFormDatas.size() > 0) { - param.put("condition", StringUtils.isEmpty(filterFormDatas.get(0).getCondition())?"AND":filterFormDatas.get(0).getCondition()); - } - if(formulaFilterDataList !=null && formulaFilterDataList.size()>0){ - param.put("condition", StringUtils.isEmpty(formulaFilterDataList.get(0).getCondition())?"AND":formulaFilterDataList.get(0).getCondition()); - } - - - if(moduleSource.equalsIgnoreCase(ModuleSource.workflow.toString())){ - if("count".equalsIgnoreCase(funcName)) { - value = getFlowData(param, filterFormDatas, employee, formId); - }else { -// value = freeStatAssistService.buildFreeStatService("workflow").findFieldStatByField(param, filterFormDatas, -// fieldId, funcName,employee); - List filterFormDataParamList=filterFormDataSearchService.conversionOldFilterFormDataToNew(filterFormDatas,employee); - logger.info("conversionOldFilterFormDataToNew函数统计转换条件:"+JSON.toJSONString(filterFormDataParamList)); - Map aggResultMap= null; - try { - WeaverSentinelContext.setDowngradeType(false); - aggResultMap = wfcReportStatRest.findFieldCalculateByCondition(formId,fieldId,filterFormDataParamList,funcName,employee); - } catch (RpcException e) { - logger.error("err",e); - if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { - //降级逻辑编写 - logger.error("审批服务不可用"); - } - } - logger.info("审批新统计结果:"+JSON.toJSONString(aggResultMap)); - Object aggResultObject=aggResultMap.get(funcName.toLowerCase()); - if(aggResultObject!=null){ - BigDecimal bigDecimal=new BigDecimal(aggResultObject+""); - value=bigDecimal.doubleValue(); - } - } - logger.info("审批聚合结果:"+value); - }else if(moduleSource.equalsIgnoreCase(ModuleSource.biaoge.toString())){ - ExcelResult excelResult= null; - try { - WeaverSentinelContext.setDowngradeType(false); - excelResult = remoteExcelService.aggregation(AggFunc.valueOf(funcName.toLowerCase()),formId+"",fieldId+"",formulaFilterDataList,null,employee); - } catch (IllegalArgumentException e) { - logger.error("err",e); - }catch (RpcException e){ - logger.error("err",e); - if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { - //降级逻辑编写 - logger.error("上报服务不可用"); - } - } - try { - value=Double.parseDouble(excelResult.getData()+""); - } catch (NumberFormatException e) { - logger.error("err",e); - } - logger.info("上报聚合结果:"+JSON.toJSONString(excelResult)); - }else if(moduleSource.equalsIgnoreCase("hrmsalary")){ - ExcelResult excelResult= null; - try { - excelResult = remoteExcelServiceHrmSalary.aggregation(AggFunc.valueOf(funcName.toLowerCase()),formId+"",fieldId+"",formulaFilterDataList,null,employee); - } catch (IllegalArgumentException e) { - logger.error("err",e); - }catch (RpcException e){ - logger.error("err",e); - if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { - //降级逻辑编写 - logger.error("薪酬服务不可用"); - } - } - try { - value=Double.parseDouble(excelResult.getData()+""); - } catch (NumberFormatException e) { - logger.error("err",e); - } - logger.info("薪酬聚合结果:"+JSON.toJSONString(excelResult)); - } - return value; - } - - /** - * 根据表单参数查询审批数据量 - * @param paramMap - * @param filterFormDatas - * @param employee - * @return - */ - private Double getFlowData(Map paramMap, List filterFormDatas, SimpleEmployee employee, Long formId) { - List datas =null; - FormDataOption formDataOption=new FormDataOption(); - Page pageDatas=new Page(); - - JSONObject filter=new JSONObject(); - JSONArray filterArray=JSON.parseArray(JSON.toJSONString(filterFormDatas)); - - for(int i=0;i weaResult= null; - try { - WeaverSentinelContext.setDowngradeType(false); - weaResult = wflSearchConditionRest.convertCondition(cndString); -// weaResult = wfcSearchConditionRest.convertCondition(cndString); - } catch (RpcException e) { - if (WeaverDubboSentinelUtil.isRpcNoProviderException(e)) { - //降级逻辑编写 - logger.error("审批服务不可用"); - logger.error("err",e); - } - } - JSONObject flowJson=JSON.parseObject(weaResult.getData()); - JSONObject formDatas=new JSONObject(); - formDatas.put("formDatas",flowJson); - cndString=formDatas.toJSONString(); - logger.error("转换审批条件后:"+cndString); - RequestListSearchConditionEntity listSearchCondition =new RequestListSearchConditionEntity(); - JSONObject newFlowCndJson=JSON.parseObject(cndString); - if(paramMap != null) listSearchCondition = newFlowCndJson.toJavaObject(RequestListSearchConditionEntity.class); - if(paramMap.get("condition")!=null){ - listSearchCondition.setType(paramMap.get("condition")+""); - } - logger.info("JSON转换成审批条件对象:"+(listSearchCondition!=null?JSON.toJSONString(listSearchCondition):"NULL")); - //listSearchCondition.setType(paramMap.get("condition")!=null?paramMap.get("condition")+"":"AND"); - com.weaver.common.component.table.page.Page page = new com.weaver.common.component.table.page.Page(1, 10); - page.setSize(Integer.MAX_VALUE); - paramMap.put("isAdmin",true); - paramMap.remove("filterFormDatas"); - logger.error("函数执行条件paramMap:"+JSON.toJSONString(paramMap)); - Long flowCount = wflRequestListFormRest.getFormFilterRequestCount(paramMap, formId, listSearchCondition, employee); - if(flowCount==null){ - flowCount=0L; - } - return flowCount.doubleValue(); -// List tempDatas=wfcRequestListFormRest.getFormFilterRequestDatasByWfId(paramMap,formId,listSearchCondition,page,employee); -// List tempDatas=wfcRequestListFormRpc.getFormFilterRequestDatas(paramMap,formId,listSearchCondition,page,employee); -// return new Double(tempDatas.size()); - } - - // 封装高级搜索参数 - private Map assemblyParam(Long formId, SimpleEmployee employee) { - Map param = new HashMap(); - - param.put("employeeId", employee.getUserId()); - param.put("formId", formId); // 表单id - param.put("isAdmin", true); // 统计默认有管理元权限 - param.put("status", FormDataStatus.submit.toString()); // 统计默认有管理元权限 - - return param; - } - - - public FreeFormService bulidFreeFormService(ModuleSource module) { - return freeFormAssistService.buildFreeFormService(module.toString()); - } - - @Override - public Map bulidDataType(List fieldIds, FormData formData, String module, - SimpleEmployee employee) { - Map dataMap = new HashMap(); - if(fieldIds != null && fieldIds.size() > 0 && formData != null) { - List dataDetails = formData.getDataDetails(); - Map> dataDetailMap = new HashMap>(); - if(dataDetails != null && dataDetails.size() > 0) { - for(FormDataDetail dataDetail : dataDetails) { - if(dataDetailMap.containsKey(dataDetail.getFormField().getId())) { - dataDetailMap.get(dataDetail.getFormField().getId()).add(dataDetail); - }else { - List values = new ArrayList(); - values.add(dataDetail); - dataDetailMap.put(dataDetail.getFormField().getId(), values); - } - - } - } - Map fieldMap = bulidFreeFormService(ModuleSource.valueOf(module)).getFieldMapByFormId(formData.getForm().getId(), employee); - for(String field : fieldIds) { - Long fieldId = Long.parseLong(field); - FormField formField = fieldMap.get(fieldId); - if(formField != null) { - DataType dataType = new DataType(); - dataType.setFieldId(field); - dataType.setDataType(getDataType(formField.getComponentKey())); - if(dataDetailMap.containsKey(fieldId)) { - dataType.setContent(getDetailValue(dataDetailMap.get(fieldId))); - dataType.setText(getDetailContent(dataDetailMap.get(fieldId))); - if( ComponentType.RadioBox.toString().equals(formField.getComponentKey()) - || ComponentType.CheckBox.toString().equals(formField.getComponentKey()) - || ComponentType.Select.toString().equals(formField.getComponentKey())) { - dataType.setScore(getDetailScore(dataDetailMap.get(fieldId),ModuleSource.valueOf(module),formData.getFormLayout().getId(),employee)); - } - }else { - dataType.setContent(""); - dataType.setText(""); - } - dataMap.put(field, dataType); - } - } - } - return dataMap; - } - - private Double getDetailScore(List dataDetails, ModuleSource module,Long layoutId,SimpleEmployee employee) { - Double score =0d; - for (FormDataDetail formDataDetail :dataDetails){ - score=excelTransUtil.getDetailScore(formDataDetail,module,layoutId,employee); - } -// if(dataDetails != null && dataDetails.size() > 0) { -// FormDataDetail dataDetail = dataDetails.get(0); -// if(dataDetail != null) { -// score = bulidFreeFormService(module).getOptionScore(dataDetail.getFormField().getId()+"", layoutId, dataDetail, employee).doubleValue(); -// } -// } - return score; - } - - private String getDetailValue(List dataDetails) { - String content =""; - if(dataDetails != null && dataDetails.size() > 0) { - FormDataDetail dataDetail = dataDetails.get(0); - if(dataDetail != null) { - content = dataDetail.getContent() == null ? "" : dataDetail.getContent(); // 字段新数据 - FormDataText formDataText = dataDetail.getDataText(); - if (formDataText != null) { // 如果是多行文本框 - content = formDataText.getContent(); - } - List optDetails = dataDetail.getDataOptions(); // 填写选项明细 - if ((optDetails != null) && (optDetails.size() > 0)) {// 如果是选项类型控件 - for (FormDataOption formDataOption : optDetails) { - content += formDataOption.getOptionId()+","; - } - if ((content != null) && (content.length() > 0)) { - content = content.substring(0, content.length() - 1); // 去掉最后一个逗号 - } - } - } - } - return content; - } - - private String getDetailContent(List dataDetails) { - String content =""; - if(dataDetails != null && dataDetails.size() > 0) { - FormDataDetail dataDetail = dataDetails.get(0); - if(dataDetail != null) { - content = dataDetail.getContent() == null ? "" : dataDetail.getContent(); // 字段新数据 - FormDataText formDataText = dataDetail.getDataText(); - if (formDataText != null) { // 如果是多行文本框 - content = formDataText.getContent(); - } - List optDetails = dataDetail.getDataOptions(); // 填写选项明细 - if ((optDetails != null) && (optDetails.size() > 0)) {// 如果是选项类型控件 - for (FormDataOption formDataOption : optDetails) { - content += formDataOption.getContent() + ","; - } - if ((content != null) && (content.length() > 0)) { - content = content.substring(0, content.length() - 1); // 去掉最后一个逗号 - } - } - } - } - return content; - } - - /** - * 检查控件类型 - * @param componentKey - * @return - */ - @Override - public String getDataType(String componentKey){ - DataType dataType = new DataType(); - if(ComponentConfig.isNumberComponent(componentKey)) { - return DataType.NUMBER; - }else if(ComponentConfig.isOptionComponent(componentKey)) { - return DataType.OPTION; - }else if(componentKey.equals(ComponentType.DateComponent.toString())) { - return DataType.STRING; - }else { - return DataType.STRING; - } - } - - @Override - public Map buildFilterParam(ExpressFormula dataExpressFormula, Long targetFormId, SimpleEmployee employee, FormData formData, String module) { - String moduleStr=module.toString(); - FormulaContext.get().setValue(moduleStr); - - Map expressMap=new HashMap<>(); - Map paramMap = Maps.newHashMap(); - if(dataExpressFormula==null) throw new RuntimeException("公式不存在"); - - try { - JSONObject paramJson= JSON.parseObject(dataExpressFormula.getParameter()); - List varList=null; - if(dataExpressFormula.getParameter()!=null){ - JSONArray paramArray=paramJson.getJSONArray("formulavars"); - varList=paramArray.toJavaList(FormulaVar.class); - List fieldIds=new ArrayList<>(); - for(FormulaVar formulaVar:varList){ - if(formulaVar.getFieldId()!=null&&formulaVar.getOptionId()==null&&!formulaVar.getFormId().equalsIgnoreCase(targetFormId.toString())){ - fieldIds.add(formulaVar.getFieldId().toString()); - } - } - - Map dataTypeMap=bulidDataType(fieldIds,formData,module,employee); - for(FormulaVar formulaVar:varList){ - if(formulaVar.getFieldId()!=null&&dataTypeMap.containsKey(formulaVar.getFieldId().toString())){ - DataType dataType=dataTypeMap.get(formulaVar.getFieldId().toString()); - if(formulaVar.getFormId()!=null){ - dataType.setFormId(Long.parseLong(formulaVar.getFormId())); - } - - try { - dataType.setModule(formulaVar.getModule()); - } catch (IllegalArgumentException e) { - logger.error("err",e); - dataType.setModule(formulaVar.getModule()); - } - dataType.setEmployee(employee); - if(formulaVar.getName()!=null){ - if(dataType.getContent()==null){ - dataType.setContent(formulaVar.getOptionId()); - } - if(dataType.getText()==null){ - dataType.setText(formulaVar.getName()); - } - } - expressMap.put(formulaVar.getKey(),dataType); - }else{ - DataType dataType=new DataType(); - - if(formulaVar.getKey().equals("current_operator")){ - dataType.setContent(employee.getId()); - dataType.setText(employee.getUsername()); - dataType.setDataType(DataType.OPTION); - expressMap.put(formulaVar.getKey(),dataType); - }else if(formulaVar.getOptionId()!=null){ - dataType.setDataType(DataType.OPTION); - dataType.setContent(formulaVar.getOptionId()); - dataType.setText(formulaVar.getName()); - expressMap.put(formulaVar.getKey(),dataType); - }else { - dataType.setContent(formulaVar.getFormId()); - try { - dataType.setModule(formulaVar.getModule()); - } catch (IllegalArgumentException e) { - logger.error("err",e); - dataType.setModule(formulaVar.getModule()); - } - dataType.setEmployee(employee); - } - dataType.setFormId(formulaVar.getFormId()!=null?Long.parseLong(formulaVar.getFormId()):null); - expressMap.put(formulaVar.getKey(),dataType); - } - } - - List paramDatas=paramJson.getJSONArray("formulavars").toJavaList(FormulaVar.class); - String filterGenFormula= ExcelParamUtil.replaceAllParam(dataExpressFormula.getFormula(),paramDatas); - filterGenFormula= ExcelParamUtil.spliteSql(filterGenFormula,expressMap); - filterGenFormula=filterGenFormula.replaceAll("\\{",""); - filterGenFormula=filterGenFormula.replaceAll("\\}",""); - paramMap=this.buildCndFilter(targetFormId,null,filterGenFormula,expressMap,module,employee); - } - } catch (Exception e) { - logger.error("err",e); - } - return paramMap; - } - -} diff --git a/src/com/engine/salary/formlua/data/func/EqOperator.java b/src/com/engine/salary/formlua/data/func/EqOperator.java deleted file mode 100644 index 83ef15e15..000000000 --- a/src/com/engine/salary/formlua/data/func/EqOperator.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.engine.salary.formlua.data.func; - -import com.ql.util.express.Operator; -import com.weaver.common.form.component.base.ComponentConfig; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.common.form.excel.validator.Validator; -import com.weaver.common.form.metadata.field.FormField; -import com.weaver.common.form.stat.FilterFormData; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.teams.util.StringUtils; - -import java.util.ArrayList; -import java.util.List; - - -/** - * equals转成筛选条件 - * @author Failymiss - */ -public class EqOperator extends Operator { - - private static final long serialVersionUID = -6647187680280498682L; - - - public Object executeInner(Object[] list) throws Exception { - Object obj=executeInner(list[0], list[1]); - return obj; - } - - public Object executeInner(Object obj1,Object obj2) throws Exception { - FilterFormData filterFormData = null; - String content = null; - FormField field = null; - if(checkParam(obj1, obj2)) { - field = (FormField) obj1; - if(obj2 instanceof DataType) { - content = ((DataType) obj2).getContent()+""; - }else { - content = obj2+""; - } - } - if (field != null && content != null) { - String componentKey = field.getComponentKey(); - filterFormData = new FilterFormData(); - filterFormData.setFieldId(field.getId()+""); - if(field.getSubForm() != null) { - filterFormData.setSubFormId(field.getSubForm().getId()+""); - } - filterFormData.setComponentKey(componentKey); - if(StringUtils.isEmpty(content)) { - filterFormData.setTerm(FilterFormData.TERM_NULL); - }else{ - filterFormData.setTerm(FilterFormData.TERM_EQ); - //数字类型 - if(ComponentConfig.isNumberComponent(componentKey) - || componentKey.equals(ComponentType.DateComponent.toString()) - || componentKey.equals(ComponentType.TimeComponent.toString())) { - filterFormData.setContent(content); - //选项控件 - }else if(ComponentConfig.isOptionComponent(componentKey)) { - List ids = new ArrayList<>(); - String[] idsArray = content.split(","); - for(String idStr : idsArray) { - if(StringUtils.isNotBlank(idStr)) { - ids.add(idStr); - } - } - filterFormData.setIds(ids); - //文本型 - }else { - filterFormData.setContent(content); - } - } - } - return filterFormData; - } - - private boolean checkParam(Object obj1,Object obj2) { - if(obj1 instanceof FormField) { - String componentKey = ((FormField) obj1).getComponentKey(); - if(ComponentConfig.isNumberComponent(componentKey)) { - if(obj2 instanceof DataType) { - if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)){ - return true; - }else { - throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); - } - }else if(StringUtils.isEmpty(obj2+"") || Validator.isFloat(obj2+"") ){ - return true; - }else { - throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); - } - }else if(ComponentConfig.isOptionComponent(componentKey)){ - if(StringUtils.isEmpty(obj2+"") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { - return true; - }else { - throw new RuntimeException("筛选条件[=]:选项控件右边必须是选项"); - } - } else { - if(StringUtils.isEmpty(obj2+"") || obj2 instanceof String || obj2 instanceof Character) { - return true; - }else if(obj2 instanceof DataType){ - if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ - return true; - }else if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ - return true; - }else { - throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); - } - }else { - throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); - } - } - } - throw new RuntimeException("筛选条件[=]:左边必须是表单控件"); - } -} \ No newline at end of file diff --git a/src/com/engine/salary/formlua/data/func/LessMoreOperator.java b/src/com/engine/salary/formlua/data/func/LessMoreOperator.java deleted file mode 100644 index 35cf47591..000000000 --- a/src/com/engine/salary/formlua/data/func/LessMoreOperator.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.engine.salary.formlua.data.func; - -import com.alibaba.fastjson.JSON; -import com.ql.util.express.Operator; -import com.weaver.common.form.component.base.ComponentConfig; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.common.form.excel.validator.Validator; -import com.weaver.common.form.metadata.field.FormField; -import com.weaver.common.form.stat.FilterFormData; -import com.weaver.excel.formula.entity.parameter.DataType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * >= <= > < 转成筛选条件 - * @author Failymiss - */ -public class LessMoreOperator extends Operator{ - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - private static final long serialVersionUID = -1001332992613137814L; - - public LessMoreOperator(String aName) { - this.name = aName; - } - - @Override - public Object executeInner(Object[] list) throws Exception { - - return executeInner(list[0], list[1]); - } - - private Object executeInner(Object obj1, Object obj2) { - FilterFormData filterFormData = null; - FormField field = null; - String content = null; - if(checkParam(obj1, obj2)) { - field = (FormField) obj1; - if(obj2 instanceof DataType) { - content = ((DataType) obj2).getContent()+""; - }else { - content = obj2+""; - } - } - if (field != null && content != null) { - String componentKey = field.getComponentKey(); - if(ComponentConfig.isNumberComponent(componentKey) - || componentKey.equals(ComponentType.DateComponent.toString()) - || componentKey.equals(ComponentType.TimeComponent.toString())) { - - filterFormData = new FilterFormData(); - filterFormData.setFieldId(field.getId()+""); - if(field.getSubForm() != null) { - filterFormData.setSubFormId(field.getSubForm().getId()+""); - } - filterFormData.setComponentKey(componentKey); - switch (this.name) { - case ">=": - filterFormData.setTerm(FilterFormData.TERM_GE); - break; - case ">": - filterFormData.setTerm(FilterFormData.TERM_GT); - break; - case "<=": - filterFormData.setTerm(FilterFormData.TERM_LE); - break; - case "<": - filterFormData.setTerm(FilterFormData.TERM_LT); - break; - default: - break; - } - filterFormData.setContent(content); - } - } - return filterFormData; - } - - private boolean checkParam(Object obj1,Object obj2) { - logger.info("聚合函数校验,第一个参数:"+ JSON.toJSONString(obj1)); - logger.info("聚合函数校验,第二个参数:"+ JSON.toJSONString(obj2)); - if(obj1 instanceof FormField) { - String componentKey = ((FormField) obj1).getComponentKey(); - if(ComponentConfig.isNumberComponent(componentKey)) { - if(obj2 instanceof Number) { - return true; - }else if(obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)){ - return true; - }else { - throw new RuntimeException("筛选条件["+this.name+"]:数字控件右边必须是数字"); - } - } - if(componentKey.equals(ComponentType.DateComponent.toString())) { - if(obj2 instanceof String && Validator.isDate((String)obj2)) { - return true; - }else if(obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ - return true; - }else { - throw new RuntimeException("筛选条件["+this.name+"]:日期控件右边必须是日期字符串"); - } - - } - if(componentKey.equals(ComponentType.TimeComponent.toString())) { - if(obj2 instanceof String && Validator.isTime((String)obj2)) { - return true; - }else if(obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING) ){ - return true; - }else { - throw new RuntimeException("筛选条件["+this.name+"]:时间控件右边必须是时间字符串"); - } - } - } - throw new RuntimeException("筛选条件["+this.name+"]:左边必须是数字控件或时间控件"); - } - -} diff --git a/src/com/engine/salary/formlua/data/func/LogicFunc.java b/src/com/engine/salary/formlua/data/func/LogicFunc.java deleted file mode 100644 index 655aaf249..000000000 --- a/src/com/engine/salary/formlua/data/func/LogicFunc.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.engine.salary.formlua.data.func; - -import com.weaver.common.form.component.base.ComponentConfig; -import com.weaver.common.form.metadata.field.FormField; -import com.weaver.common.form.stat.FilterFormData; -import com.weaver.excel.formula.entity.parameter.DataType; - -import java.util.ArrayList; -import java.util.List; - -public class LogicFunc { - - public static List and(Object... objs){ - List filterFormDatas = new ArrayList<>(); - if(objs != null && objs.length > 0) { - for(int i=0;i,>=,<,<=,LIKE,AND,OR'条件公式"); - } - } - } - return filterFormDatas; - } - - /** - * - * @param objs - * @return - */ - public static List or(Object... objs){ - List filterFormDatas = new ArrayList<>(); - if(objs != null && objs.length > 0) { - for(int i=0;i,>=,<,<=,LIKE,AND,OR'条件公式"); - } - } - } - return filterFormDatas; - } - - /** - * 支持文本、数字、日期 - * @param formField - * @param strs - * @return - */ - public static FilterFormData like(FormField formField,Object[] strs){ - if(formField != null && strs.length > 0) { - if(ComponentConfig.isOptionComponent(formField.getComponentKey())) { - throw new RuntimeException("筛选条件函数[LIKE]:第一个参数不能是选项控件"); - } - FilterFormData filterFormData = new FilterFormData(); - List contents = new ArrayList(); - for(Object str : strs) { - contents.add(str+""); - } - filterFormData.setContents(contents); - filterFormData.setTerm(FilterFormData.TERM_LIKE); - filterFormData.setFieldId(formField.getId()+""); - return filterFormData; - }else { - throw new RuntimeException("筛选条件函数[LIKE]:参数异常"); - } - } - - /** - * 仅支持选项型控件 - * @param formField - * @param options - * @return - */ - public static FilterFormData in(FormField formField,DataType[] options){ - if(formField != null && options.length > 0) { - if(!ComponentConfig.isOptionComponent(formField.getComponentKey())) { - throw new RuntimeException("筛选条件函数[IN]:第一个参数必须选项控件"); - } - FilterFormData filterFormData = new FilterFormData(); - List ids = new ArrayList(); - for(DataType option : options) { - ids.add(option.getContent()+""); - } - filterFormData.setIds(ids); - filterFormData.setFieldId(formField.getId()+""); - filterFormData.setTerm(FilterFormData.TERM_EQ); - return filterFormData; - }else { - throw new RuntimeException("筛选条件函数[IN]:参数异常"); - } - } -} diff --git a/src/com/engine/salary/formlua/data/func/NotEqOperator.java b/src/com/engine/salary/formlua/data/func/NotEqOperator.java deleted file mode 100644 index 494e291a8..000000000 --- a/src/com/engine/salary/formlua/data/func/NotEqOperator.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.engine.salary.formlua.data.func; - -import com.ql.util.express.Operator; -import com.weaver.common.form.component.base.ComponentConfig; -import com.weaver.common.form.excel.validator.Validator; -import com.weaver.common.form.metadata.field.FormField; -import com.weaver.common.form.stat.FilterFormData; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.teams.util.StringUtils; - -import java.util.ArrayList; -import java.util.List; - - -/** - * equals转成筛选条件 - * @author Failymiss - */ -public class NotEqOperator extends Operator { - - private static final long serialVersionUID = -6647187680280498682L; - - public Object executeInner(Object[] list) throws Exception { - return executeInner(list[0], list[1]); - } - - public Object executeInner(Object obj1,Object obj2) throws Exception { - FilterFormData filterFormData = null; - String content = null; - FormField field = null; - if(checkParam(obj1, obj2)) { - field = (FormField) obj1; - if(obj2 instanceof DataType) { - content = ((DataType) obj2).getContent()+""; - }else { - content = obj2+""; - } - } - if (field != null && content != null) { - String componentKey = field.getComponentKey(); - filterFormData = new FilterFormData(); - filterFormData.setFieldId(field.getId()+""); - if(field.getSubForm() != null) { - filterFormData.setSubFormId(field.getSubForm().getId()+""); - } - filterFormData.setComponentKey(componentKey); - if(StringUtils.isEmpty(content)) { - filterFormData.setTerm(FilterFormData.TERM_NOT_NULL); - }else{ - //选项控件 - if(ComponentConfig.isOptionComponent(componentKey)) { - filterFormData.setTerm(FilterFormData.TERM_NOT_EQ); - List ids = new ArrayList<>(); - String[] idsArray = content.split(","); - for(String idStr : idsArray) { - if(StringUtils.isNotBlank(idStr)) { - ids.add(idStr); - } - } - filterFormData.setIds(ids); - //其他 - }else { - filterFormData.setTerm(FilterFormData.TERM_NOT_EQ); - filterFormData.setContent(content); - } - } - } - return filterFormData; - } - - private boolean checkParam(Object obj1,Object obj2) { - if(obj1 instanceof FormField) { - String componentKey = ((FormField) obj1).getComponentKey(); - if(ComponentConfig.isNumberComponent(componentKey)) { - if(obj2 instanceof DataType) { - if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)){ - return true; - }else { - throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); - } - }else if(StringUtils.isEmpty(obj2+"") || Validator.isFloat(obj2+"") ){ - return true; - }else { - throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); - } - }else if(ComponentConfig.isOptionComponent(componentKey)){ - if(StringUtils.isEmpty(obj2+"") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { - return true; - }else { - throw new RuntimeException("筛选条件[!=]:选项控件右边必须是选项"); - } - } else { - if(StringUtils.isEmpty(obj2+"") || obj2 instanceof String || obj2 instanceof Character) { - return true; - }else if(obj2 instanceof DataType){ - if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING) ){ - return true; - }else if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ - return true; - }else if(((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)){ - return true; - }else { - throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); - } - }else { - throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); - } - } - } - throw new RuntimeException("筛选条件[!=]:左边必须是表单控件"); - } -} diff --git a/src/com/engine/salary/formlua/data/func/QLExpressContext.java b/src/com/engine/salary/formlua/data/func/QLExpressContext.java deleted file mode 100644 index 86cf3d8af..000000000 --- a/src/com/engine/salary/formlua/data/func/QLExpressContext.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.engine.salary.formlua.data.func; - - -import com.ql.util.express.IExpressContext; -import org.springframework.context.ApplicationContext; - -import java.util.HashMap; -import java.util.Map; - -@SuppressWarnings("serial") -public class QLExpressContext extends HashMap implements - IExpressContext { - - private ApplicationContext context; - - public QLExpressContext(ApplicationContext aContext) { - this.context = aContext; - } - - public QLExpressContext(Map aProperties,ApplicationContext aContext) { - super(aProperties); - this.context = aContext; - } - - /** - * 抽象方法:根据名称从属性列表中提取属性值 - */ - public Object get(Object name) { - Object result = null; - result = super.get(name); - try { - if (result == null && this.context != null - && this.context.containsBean((String) name)) { - // 如果在Spring容器中包含bean,则返回String的Bean - result = this.context.getBean((String) name); - } - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); - } - return result; - } - - public Object put(String name, Object object) { - return super.put(name, object); - } - -} \ No newline at end of file diff --git a/src/com/engine/salary/formlua/data/func/QlExpressUtil.java b/src/com/engine/salary/formlua/data/func/QlExpressUtil.java deleted file mode 100644 index 8f254735d..000000000 --- a/src/com/engine/salary/formlua/data/func/QlExpressUtil.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.engine.salary.formlua.data.func; - -import com.ql.util.express.DynamicParamsUtil; -import com.ql.util.express.ExpressRunner; -import com.ql.util.express.IExpressContext; -import com.weaver.common.form.metadata.field.FormField; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.excel.formula.entity.parameter.FuncNames; -import com.weaver.excel.formula.func.aggregate.AggregationFunc; -import com.weaver.excel.formula.func.compare.WOperatorAdd; -import com.weaver.excel.formula.func.compare.WOperatorDiv; -import com.weaver.excel.formula.func.compare.WOperatorMulti; -import com.weaver.excel.formula.func.compare.WOperatorReduce; -import com.weaver.excel.formula.func.date.DateTimeService; -import com.weaver.excel.formula.func.logic.IfOperator; -import com.weaver.excel.formula.func.logic.LogicService; -import com.weaver.excel.formula.func.math.MathFuncsService; -import com.weaver.excel.formula.func.string.StringFormulaService; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * 函数转换筛选条件类 - * @author Failymiss - */ -@Component -public class QlExpressUtil { - @Autowired - AggregationFunc aggregationFunc; - @Autowired - LogicService logicService; - @Autowired - DateTimeService dateTimeService; - @Autowired - StringFormulaService stringFormulaService; - @Autowired - MathFuncsService mathFuncsService; - - - private static ExpressRunner runner; - static { - runner = new ExpressRunner(true,false); - } - private static boolean isInitialRunner = false; - private ApplicationContext applicationContext;// spring上下文 - - /** - * - * @param statement - * 执行语句 - * @param context - * 上下文 - * @throws Exception - */ - public Object execute(String statement, Map context) - throws Exception { - DynamicParamsUtil.supportDynamicParams = true; - initRunner(runner); - IExpressContext expressContext = new QLExpressContext(context, - applicationContext); - return runner.execute(statement, expressContext, null, true, false); - } - - private void initRunner(ExpressRunner runner) { - if (isInitialRunner == true) { - return; - } - synchronized (runner) { - if (isInitialRunner == true) { - return; - } - try { - runner.replaceOperator("=",new EqOperator()); - runner.replaceOperator("==",new EqOperator()); - runner.replaceOperator("!=",new NotEqOperator()); - runner.replaceOperator(">=",new LessMoreOperator(">=")); - runner.replaceOperator(">",new LessMoreOperator(">")); - runner.replaceOperator("<=",new LessMoreOperator("<=")); - runner.replaceOperator("<",new LessMoreOperator("<")); - runner.addFunctionOfClassMethod("LIKE",LogicFunc.class.getName(),"like", new Class[] {FormField.class, Object[].class},""); - runner.addFunctionOfClassMethod("IN",LogicFunc.class.getName(),"in",new Class[] {FormField.class, DataType[].class},""); - runner.addFunctionOfClassMethod("AND",LogicFunc.class.getName(),"and",new Class[]{Object[].class},""); - runner.addFunctionOfClassMethod("OR",LogicFunc.class.getName(),"or",new Class[]{Object[].class},""); - - /**********************一下函数引入后不会构建成高级搜索条件***********************/ - - //字符串函数 - runner.addFunctionOfServiceMethod("CONCAT",stringFormulaService,"concatString",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("SEARCH",stringFormulaService,"search",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("TEXT",stringFormulaService,"text",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("PAD",stringFormulaService,"pad",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("REPLACE",stringFormulaService,"replace",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("VALUE",stringFormulaService,"value",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("LEN",stringFormulaService,"len",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("LEFT",stringFormulaService,"left",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("RIGHT",stringFormulaService,"right",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("MID",stringFormulaService,"mid",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("REPT",stringFormulaService,"repeat",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("TRIM",stringFormulaService,"trim",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("SCORE",stringFormulaService,"score",new Class[]{Object[].class},""); - - //数学函数 - runner.addFunctionOfServiceMethod("ROUNDUP",mathFuncsService,"roundUp",new Class[]{Object.class},""); - runner.addFunctionOfServiceMethod("ROUNDDOWN",mathFuncsService,"roundDown",new Class[]{Object.class},""); - - //日期函数 - runner.addFunctionOfServiceMethod( "DATEDIFF",dateTimeService,"dateDiff",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "DATEADD",dateTimeService,"dateAdd",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "YEAR",dateTimeService,"year",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "MONTH",dateTimeService,"month",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "DAY",dateTimeService,"day",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "HOUR",dateTimeService,"hour",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "MINUTE",dateTimeService,"minute",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "SECOND",dateTimeService,"seconds",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "WEEKNUM",dateTimeService,"weekNum",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "WEEKDAY",dateTimeService,"weekDay",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "NOW",dateTimeService,"now",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "TODAY",dateTimeService,"today",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod("DATEFORMAT",dateTimeService,"dateFormat",new Class[]{Object[].class},""); - - //逻辑函数 - runner.replaceOperator("IF",new IfOperator("IF")); - runner.addFunctionOfServiceMethod(FuncNames.TRUE.toString(),logicService,FuncNames.TRUE.getName(),new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod(FuncNames.FALSE.toString(),logicService,FuncNames.FALSE.getName(),new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod(FuncNames.ISEMPTY.toString(),logicService,FuncNames.ISEMPTY.getName(),new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod(FuncNames.NOT.toString(),logicService,FuncNames.NOT.getName(),new Class[]{Object[].class},""); - - runner.replaceOperator("+",new WOperatorAdd("+")); - runner.replaceOperator("-",new WOperatorReduce("-")); - runner.replaceOperator("*",new WOperatorMulti("*")); - runner.replaceOperator("/",new WOperatorDiv("/")); - - } catch (Exception e) { - throw new RuntimeException("初始化失败表达式"); - } - } - isInitialRunner = true; - } - - public void setApplicationContext(ApplicationContext aContext) - throws BeansException { - applicationContext = aContext; - } -} diff --git a/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java b/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java index 92ddf028d..437d8376e 100644 --- a/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java +++ b/src/com/engine/salary/formlua/entity/parameter/ExcelFuncs.java @@ -2,17 +2,12 @@ package com.engine.salary.formlua.entity.parameter; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.weaver.common.i18n.label.SystemEnv; -import com.weaver.excel.formula.core.rpc.ExcelDubboInvoker; -import com.weaver.excel.formula.core.rpc.RemoteExcelExtendFuncService; -import com.weaver.excel.formula.core.rpc.RpcMethod; +import com.engine.salary.util.SalaryI18nUtil; import org.apache.commons.compress.utils.Lists; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -28,34 +23,30 @@ public class ExcelFuncs { static private String[] paramDatas=new String[]{}; static private String[] allParamDatas=new String[]{"{}","[]"}; static private String[] moduleList=new String[]{"biaoge","workflow"}; - @Autowired - ExcelDubboInvoker excelDubboInvoker; - - @Autowired private FuncDescUtil funcDescUtil; public List getCompList(){ //比较操作符 List compList=new LinkedList<>(); ExcelFunc excelFunc=null; String [] paramArray=new String[]{}; - excelFunc=new ExcelFunc(">",SystemEnv.getHtmlLabelName(12132,"大于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc(">",SalaryI18nUtil.getI18nLabel(12132,"大于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); compList.add(excelFunc); - excelFunc=new ExcelFunc(">=",SystemEnv.getHtmlLabelName(27694,"大于等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc(">=",SalaryI18nUtil.getI18nLabel(27694,"大于等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); compList.add(excelFunc); - excelFunc=new ExcelFunc("<",SystemEnv.getHtmlLabelName(20009,"小于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("<",SalaryI18nUtil.getI18nLabel(20009,"小于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); compList.add(excelFunc); - excelFunc=new ExcelFunc("<=",SystemEnv.getHtmlLabelName(15251,"小于等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("<=",SalaryI18nUtil.getI18nLabel(15251,"小于等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); compList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("=",SystemEnv.getHtmlLabelName(15112,"等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("=",SalaryI18nUtil.getI18nLabel(15112,"等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); compList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("!=",SystemEnv.getHtmlLabelName(14897,"不等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("!=", SalaryI18nUtil.getI18nLabel(14897,"不等于"), "","",paramArray,paramDatas,"Boolean",CURRENTDATA); compList.add(excelFunc); return compList; @@ -70,98 +61,98 @@ public class ExcelFuncs { List dateList=new LinkedList<>(); ExcelFunc excelFunc=null; String [] paramArray=new String[]{}; - excelFunc=new ExcelFunc("TODAY",SystemEnv.getHtmlLabelName(94924,"当前日期"), funcDescUtil.get("TODAY"),"TODAY()",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("TODAY",SalaryI18nUtil.getI18nLabel(94924,"当前日期"), funcDescUtil.get("TODAY"),"TODAY()",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("NOW",SystemEnv.getHtmlLabelName(94925,"当前日期时间"), funcDescUtil.get("NOW"),"NOW()",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("NOW",SalaryI18nUtil.getI18nLabel(94925,"当前日期时间"), funcDescUtil.get("NOW"),"NOW()",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("DATEADD",SystemEnv.getHtmlLabelName(94926,"对日期加减年、月、日"), funcDescUtil.get("DATEADD"),"DATEADD(日期, 数值, ['单位'])",nullParamDatas,paramArray,"String",CURRENTDATA); + excelFunc=new ExcelFunc("DATEADD",SalaryI18nUtil.getI18nLabel(94926,"对日期加减年、月、日"), funcDescUtil.get("DATEADD"),"DATEADD(日期, 数值, ['单位'])",nullParamDatas,paramArray,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("DATEDIFF",SystemEnv.getHtmlLabelName(94927,"返回两个日期的差值"), funcDescUtil.get("DATEDIFF"),"DATEDIFF(日期1, 日期2, ['单位'])",nullParamDatas,paramArray,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("DATEDIFF",SalaryI18nUtil.getI18nLabel(94927,"返回两个日期的差值"), funcDescUtil.get("DATEDIFF"),"DATEDIFF(日期1, 日期2, ['单位'])",nullParamDatas,paramArray,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("DATEFORMAT",SystemEnv.getHtmlLabelName(94928,"返回指定格式的日期"), funcDescUtil.get("DATEFORMAT"),"DATEFORMAT(日期, '可选格式')",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("DATEFORMAT",SalaryI18nUtil.getI18nLabel(94928,"返回指定格式的日期"), funcDescUtil.get("DATEFORMAT"),"DATEFORMAT(日期, '可选格式')",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("YEAR",SystemEnv.getHtmlLabelName(94929,"返回日期中的年"), funcDescUtil.get("YEAR"),"YEAR(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("YEAR",SalaryI18nUtil.getI18nLabel(94929,"返回日期中的年"), funcDescUtil.get("YEAR"),"YEAR(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{"String"}; - excelFunc=new ExcelFunc("MONTH",SystemEnv.getHtmlLabelName(94930,"返回日期中的月"), funcDescUtil.get("MONTH"),"MONTH(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("MONTH",SalaryI18nUtil.getI18nLabel(94930,"返回日期中的月"), funcDescUtil.get("MONTH"),"MONTH(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("DAY",SystemEnv.getHtmlLabelName(94931,"返回日期中的日"), funcDescUtil.get("DAY"),"DAY(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("DAY",SalaryI18nUtil.getI18nLabel(94931,"返回日期中的日"), funcDescUtil.get("DAY"),"DAY(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("HOUR",SystemEnv.getHtmlLabelName(94932,"返回日期中的小时"), funcDescUtil.get("HOUR"),"HOUR(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("HOUR",SalaryI18nUtil.getI18nLabel(94932,"返回日期中的小时"), funcDescUtil.get("HOUR"),"HOUR(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("MINUTE",SystemEnv.getHtmlLabelName(94933,"返回日期中的分钟"), funcDescUtil.get("MINUTE"),"MINUTE(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("MINUTE",SalaryI18nUtil.getI18nLabel(94933,"返回日期中的分钟"), funcDescUtil.get("MINUTE"),"MINUTE(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("SECOND",SystemEnv.getHtmlLabelName(94934,"返回日期中的秒"), funcDescUtil.get("SECOND"),"SECOND(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("SECOND",SalaryI18nUtil.getI18nLabel(94934,"返回日期中的秒"), funcDescUtil.get("SECOND"),"SECOND(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("WEEKNUM",SystemEnv.getHtmlLabelName(94936,"返回日期为第几周"), funcDescUtil.get("WEEKNUM"),"WEEKNUM(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("WEEKNUM",SalaryI18nUtil.getI18nLabel(94936,"返回日期为第几周"), funcDescUtil.get("WEEKNUM"),"WEEKNUM(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("WEEKDAY",SystemEnv.getHtmlLabelName(94937,"返回日期为星期几"), funcDescUtil.get("WEEKDAY"),"WEEKDAY(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("WEEKDAY",SalaryI18nUtil.getI18nLabel(94937,"返回日期为星期几"), funcDescUtil.get("WEEKDAY"),"WEEKDAY(日期)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("NETWORKDAYSPI",SystemEnv.getHtmlLabelName(94938,"返回指定日期之间包含的工作日天数(仅限的过去时间)"), funcDescUtil.get("NETWORKDAYSPI"),"NETWORKDAYSPI(日期1, 日期2, 成员)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("NETWORKDAYSPI",SalaryI18nUtil.getI18nLabel(94938,"返回指定日期之间包含的工作日天数(仅限的过去时间)"), funcDescUtil.get("NETWORKDAYSPI"),"NETWORKDAYSPI(日期1, 日期2, 成员)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("EOMONTH",SystemEnv.getHtmlLabelName(94939,"返回某月最后一天日期"), funcDescUtil.get("EOMONTH"),"EOMONTH(日期,指定日期之前或之后的月数)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("EOMONTH",SalaryI18nUtil.getI18nLabel(94939,"返回某月最后一天日期"), funcDescUtil.get("EOMONTH"),"EOMONTH(日期,指定日期之前或之后的月数)",paramArray,nullParamDatas,"Number",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("CURRYEAR",SystemEnv.getHtmlLabelName(101059,"返回当前年份"), funcDescUtil.get("CURRYEAR"),"CURRYEAR()",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("CURRYEAR",SalaryI18nUtil.getI18nLabel(101059,"返回当前年份"), funcDescUtil.get("CURRYEAR"),"CURRYEAR()",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("CURRMONTH",SystemEnv.getHtmlLabelName(101060,"返回当前月份"), funcDescUtil.get("CURRMONTH"),"CURRMONTH()",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("CURRMONTH",SalaryI18nUtil.getI18nLabel(101060,"返回当前月份"), funcDescUtil.get("CURRMONTH"),"CURRMONTH()",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("CURRDAY",SystemEnv.getHtmlLabelName(101061,"返回当前第几日(当月)"), funcDescUtil.get("CURRDAY"),"CURRDAY()",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("CURRDAY",SalaryI18nUtil.getI18nLabel(101061,"返回当前第几日(当月)"), funcDescUtil.get("CURRDAY"),"CURRDAY()",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("CURRWEEK",SystemEnv.getHtmlLabelName(101062,"返回当前是周几"), funcDescUtil.get("CURRWEEK"),"CURRWEEK()",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("CURRWEEK",SalaryI18nUtil.getI18nLabel(101062,"返回当前是周几"), funcDescUtil.get("CURRWEEK"),"CURRWEEK()",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("CURRHOUR",SystemEnv.getHtmlLabelName(101063,"返回当前小时"), funcDescUtil.get("CURRHOUR"),"CURRHOUR()",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("CURRHOUR",SalaryI18nUtil.getI18nLabel(101063,"返回当前小时"), funcDescUtil.get("CURRHOUR"),"CURRHOUR()",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("CURRMINUTE",SystemEnv.getHtmlLabelName(101064,"返回当前分"), funcDescUtil.get("CURRMINUTE"),"CURRMINUTE()",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("CURRMINUTE",SalaryI18nUtil.getI18nLabel(101064,"返回当前分"), funcDescUtil.get("CURRMINUTE"),"CURRMINUTE()",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("CURRSECOND",SystemEnv.getHtmlLabelName(101065,"返回当前秒"), funcDescUtil.get("CURRSECOND"),"CURRSECOND()",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("CURRSECOND",SalaryI18nUtil.getI18nLabel(101065,"返回当前秒"), funcDescUtil.get("CURRSECOND"),"CURRSECOND()",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("MAXDATE",SystemEnv.getHtmlLabelName(100803,"返回一组日期中的最大值"), funcDescUtil.get("MAXDATE"),"MAXDATE(日期1,日期2,……)",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("MAXDATE",SalaryI18nUtil.getI18nLabel(100803,"返回一组日期中的最大值"), funcDescUtil.get("MAXDATE"),"MAXDATE(日期1,日期2,……)",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("MINDATE",SystemEnv.getHtmlLabelName(100805,"返回一组日期中的最小值"), funcDescUtil.get("MINDATE"),"MINDATE(日期1,日期2,……)",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("MINDATE",SalaryI18nUtil.getI18nLabel(100805,"返回一组日期中的最小值"), funcDescUtil.get("MINDATE"),"MINDATE(日期1,日期2,……)",paramArray,nullParamDatas,"String",CURRENTDATA); dateList.add(excelFunc); return dateList; } @@ -175,47 +166,47 @@ public class ExcelFuncs { List logicList=new LinkedList<>(); ExcelFunc excelFunc=null; String [] paramArray=new String[]{}; - excelFunc=new ExcelFunc("IF",SystemEnv.getHtmlLabelName(94940,"如果条件为真,则...否则..."), funcDescUtil.get("IF"),"IF(条件, 表达式1, 表达式2)",paramArray,nullParamDatas,"Object",CURRENTDATA); + excelFunc=new ExcelFunc("IF",SalaryI18nUtil.getI18nLabel(94940,"如果条件为真,则...否则..."), funcDescUtil.get("IF"),"IF(条件, 表达式1, 表达式2)",paramArray,nullParamDatas,"Object",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("AND",SystemEnv.getHtmlLabelName(51100,"且"), funcDescUtil.get("AND"),"AND(条件1, 条件2, [条件3, …])",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("AND",SalaryI18nUtil.getI18nLabel(51100,"且"), funcDescUtil.get("AND"),"AND(条件1, 条件2, [条件3, …])",paramArray,nullParamDatas,"Boolean",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("OR",SystemEnv.getHtmlLabelName(35824,"或"), funcDescUtil.get("OR"),"OR(条件1, 条件2, [条件3, …])",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("OR",SalaryI18nUtil.getI18nLabel(35824,"或"), funcDescUtil.get("OR"),"OR(条件1, 条件2, [条件3, …])",paramArray,nullParamDatas,"Boolean",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("NOT",SystemEnv.getHtmlLabelName(94942,"反转真假结果"), funcDescUtil.get("NOT"),"NOT(逻辑结果)",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("NOT",SalaryI18nUtil.getI18nLabel(94942,"反转真假结果"), funcDescUtil.get("NOT"),"NOT(逻辑结果)",paramArray,nullParamDatas,"Boolean",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("IN",SystemEnv.getHtmlLabelName(94943,"变量是否包含在一组结果中"), funcDescUtil.get("IN"),"IN(变量, [变量1, 变量2, …])",paramArray,allParamDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("IN",SalaryI18nUtil.getI18nLabel(94943,"变量是否包含在一组结果中"), funcDescUtil.get("IN"),"IN(变量, [变量1, 变量2, …])",paramArray,allParamDatas,"Boolean",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("LIKE",SystemEnv.getHtmlLabelName(94944,"文本是否包含任意一个关键字"), funcDescUtil.get("LIKE"),"LIKE(文本, [文本1, 文本2, …])",paramArray,allParamDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("LIKE",SalaryI18nUtil.getI18nLabel(94944,"文本是否包含任意一个关键字"), funcDescUtil.get("LIKE"),"LIKE(文本, [文本1, 文本2, …])",paramArray,allParamDatas,"Boolean",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("ISEMPTY",SystemEnv.getHtmlLabelName(94945,"是否为空"), funcDescUtil.get("ISEMPTY"),"ISEMPTY(变量)",paramArray,paramDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("ISEMPTY",SalaryI18nUtil.getI18nLabel(94945,"是否为空"), funcDescUtil.get("ISEMPTY"),"ISEMPTY(变量)",paramArray,paramDatas,"Boolean",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("TRUE",SystemEnv.getHtmlLabelName(94946,"返回真"), funcDescUtil.get("TRUE"),"TRUE()",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("TRUE",SalaryI18nUtil.getI18nLabel(94946,"返回真"), funcDescUtil.get("TRUE"),"TRUE()",paramArray,nullParamDatas,"Boolean",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("FALSE",SystemEnv.getHtmlLabelName(94947,"返回假"), funcDescUtil.get("FALSE"),"FALSE()",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("FALSE",SalaryI18nUtil.getI18nLabel(94947,"返回假"), funcDescUtil.get("FALSE"),"FALSE()",paramArray,nullParamDatas,"Boolean",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("IFS",SystemEnv.getHtmlLabelName(94948,"多条件"), funcDescUtil.get("IFS"),"IFS({条件1},{结果1},{条件2},{结果2}...{默认结果})",paramArray,nullParamDatas,"Object",CURRENTDATA); + excelFunc=new ExcelFunc("IFS",SalaryI18nUtil.getI18nLabel(94948,"多条件"), funcDescUtil.get("IFS"),"IFS({条件1},{结果1},{条件2},{结果2}...{默认结果})",paramArray,nullParamDatas,"Object",CURRENTDATA); logicList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("FIND",SystemEnv.getHtmlLabelName(31835,"查找"), funcDescUtil.get("FIND"),"FIND([{查找值1},{查找值2}...{查找值N}],[{查找目标1},{查找目标2}...{查找目标N}])",paramArray,nullParamDatas,"Boolean",CURRENTDATA); + excelFunc=new ExcelFunc("FIND",SalaryI18nUtil.getI18nLabel(31835,"查找"), funcDescUtil.get("FIND"),"FIND([{查找值1},{查找值2}...{查找值N}],[{查找目标1},{查找目标2}...{查找目标N}])",paramArray,nullParamDatas,"Boolean",CURRENTDATA); logicList.add(excelFunc); return logicList; } @@ -229,81 +220,81 @@ public class ExcelFuncs { List stringList=new LinkedList<>(); ExcelFunc excelFunc=null; String [] paramArray=new String[]{}; - excelFunc=new ExcelFunc("CONCAT",SystemEnv.getHtmlLabelName(94949,"链接多个文本"), funcDescUtil.get("CONCAT"),"CONCAT(文本1, 文本2, [文本3, …])",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("CONCAT",SalaryI18nUtil.getI18nLabel(94949,"链接多个文本"), funcDescUtil.get("CONCAT"),"CONCAT(文本1, 文本2, [文本3, …])",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("TEXT",SystemEnv.getHtmlLabelName(94950,"将变量转为文本"), funcDescUtil.get("TEXT"),"TEXT(变量)",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("TEXT",SalaryI18nUtil.getI18nLabel(94950,"将变量转为文本"), funcDescUtil.get("TEXT"),"TEXT(变量)",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("VALUE",SystemEnv.getHtmlLabelName(94951,"将文本转为数字"), funcDescUtil.get("VALUE"),"VALUE(文本)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("VALUE",SalaryI18nUtil.getI18nLabel(94951,"将文本转为数字"), funcDescUtil.get("VALUE"),"VALUE(文本)",paramArray,nullParamDatas,"Number",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("LEN",SystemEnv.getHtmlLabelName(94952,"返回文本长度"), funcDescUtil.get("LEN"),"LEN(文本)",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("LEN",SalaryI18nUtil.getI18nLabel(94952,"返回文本长度"), funcDescUtil.get("LEN"),"LEN(文本)",paramArray,nullParamDatas,"Number",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("SEARCH",SystemEnv.getHtmlLabelName(94953,"在文本中查找关键字"), funcDescUtil.get("SEARCH"),"SEARCH(关键字, 文本, [搜索开始位置])",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("SEARCH",SalaryI18nUtil.getI18nLabel(94953,"在文本中查找关键字"), funcDescUtil.get("SEARCH"),"SEARCH(关键字, 文本, [搜索开始位置])",paramArray,nullParamDatas,"Number",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("REPLACE",SystemEnv.getHtmlLabelName(94954,"替换文本中的字"), funcDescUtil.get("REPLACE"),"REPLACE(原文本, 替换开始位置, 替换字符数, 新文本)",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("REPLACE",SalaryI18nUtil.getI18nLabel(94954,"替换文本中的字"), funcDescUtil.get("REPLACE"),"REPLACE(原文本, 替换开始位置, 替换字符数, 新文本)",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("REPT",SystemEnv.getHtmlLabelName(94955,"将文本重复指定次数"), funcDescUtil.get("REPT"),"REPT(文本, 重复次数)",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("REPT",SalaryI18nUtil.getI18nLabel(94955,"将文本重复指定次数"), funcDescUtil.get("REPT"),"REPT(文本, 重复次数)",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("PAD",SystemEnv.getHtmlLabelName(94956,"将文本填充至指定长度"), funcDescUtil.get("PAD"),"PAD(原文本, 长度, 填充用的文本, ['填充位置'])",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("PAD",SalaryI18nUtil.getI18nLabel(94956,"将文本填充至指定长度"), funcDescUtil.get("PAD"),"PAD(原文本, 长度, 填充用的文本, ['填充位置'])",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("TRIM",SystemEnv.getHtmlLabelName(94957,"清除前后空格"), funcDescUtil.get("TRIM"),"TRIM(文本)",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("TRIM",SalaryI18nUtil.getI18nLabel(94957,"清除前后空格"), funcDescUtil.get("TRIM"),"TRIM(文本)",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("LEFT",SystemEnv.getHtmlLabelName(94958,"返回文本左侧开始的文字"), funcDescUtil.get("LEFT"),"LEFT(文本, 截取字符数)",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("LEFT",SalaryI18nUtil.getI18nLabel(94958,"返回文本左侧开始的文字"), funcDescUtil.get("LEFT"),"LEFT(文本, 截取字符数)",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("RIGHT",SystemEnv.getHtmlLabelName(94959,"返回文本右侧开始的文字"), funcDescUtil.get("RIGHT"),"RIGHT(文本, 截取字符数)",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("RIGHT",SalaryI18nUtil.getI18nLabel(94959,"返回文本右侧开始的文字"), funcDescUtil.get("RIGHT"),"RIGHT(文本, 截取字符数)",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("MID",SystemEnv.getHtmlLabelName(94960,"返回文本指定位置开始的文字"), funcDescUtil.get("MID"),"MID(文本, 指定位置, 截取字符数)",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("MID",SalaryI18nUtil.getI18nLabel(94960,"返回文本指定位置开始的文字"), funcDescUtil.get("MID"),"MID(文本, 指定位置, 截取字符数)",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("SCORE",SystemEnv.getHtmlLabelName(94961,"获取选项型控件分数"), funcDescUtil.get("SCORE"),"SCORE({选项型控件})",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("SCORE",SalaryI18nUtil.getI18nLabel(94961,"获取选项型控件分数"), funcDescUtil.get("SCORE"),"SCORE({选项型控件})",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("IDCARD",SystemEnv.getHtmlLabelName(94962,"身份证函数"), funcDescUtil.get("IDCARD"),"IDCARD({身份证号码}, {查找类型})",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("IDCARD",SalaryI18nUtil.getI18nLabel(94962,"身份证函数"), funcDescUtil.get("IDCARD"),"IDCARD({身份证号码}, {查找类型})",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("ISSTRING",SystemEnv.getHtmlLabelName(0,"是否是字符串"), funcDescUtil.get("ISSTRING"),"ISSTRING({任意控件})",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("ISSTRING",SalaryI18nUtil.getI18nLabel(0,"是否是字符串"), funcDescUtil.get("ISSTRING"),"ISSTRING({任意控件})",paramArray,nullParamDatas,"String",CURRENTDATA); stringList.add(excelFunc); // paramArray=new String[]{}; -// excelFunc=new ExcelFunc("SUBSTRING",SystemEnv.getHtmlLabelName(97524,"字符截取函数"), funcDescUtil.get("SUBSTRING"),"SUBSTRING({源字符}, {截取开始位置},{截取结束位置})",paramArray,nullParamDatas,"String",CURRENTDATA); +// excelFunc=new ExcelFunc("SUBSTRING",SalaryI18nUtil.getI18nLabel(97524,"字符截取函数"), funcDescUtil.get("SUBSTRING"),"SUBSTRING({源字符}, {截取开始位置},{截取结束位置})",paramArray,nullParamDatas,"String",CURRENTDATA); // stringList.add(excelFunc); // paramArray=new String[]{}; -// excelFunc=new ExcelFunc("SUBSTITUE",SystemEnv.getHtmlLabelName(97525,"字符查找替换函数"), funcDescUtil.get("SUBSTITUE"),"SUBSTITUE({源字符}, {被替换字符},{新字符})",paramArray,nullParamDatas,"String",CURRENTDATA); +// excelFunc=new ExcelFunc("SUBSTITUE",SalaryI18nUtil.getI18nLabel(97525,"字符查找替换函数"), funcDescUtil.get("SUBSTITUE"),"SUBSTITUE({源字符}, {被替换字符},{新字符})",paramArray,nullParamDatas,"String",CURRENTDATA); // stringList.add(excelFunc); // paramArray=new String[]{}; -// excelFunc=new ExcelFunc("LOWER",SystemEnv.getHtmlLabelName(97526,"字符转小写函数"), funcDescUtil.get("LOWER"),"LOWER({源字符})",paramArray,nullParamDatas,"String",CURRENTDATA); +// excelFunc=new ExcelFunc("LOWER",SalaryI18nUtil.getI18nLabel(97526,"字符转小写函数"), funcDescUtil.get("LOWER"),"LOWER({源字符})",paramArray,nullParamDatas,"String",CURRENTDATA); // stringList.add(excelFunc); // paramArray=new String[]{}; -// excelFunc=new ExcelFunc("UPPER",SystemEnv.getHtmlLabelName(97527,"字符转大写函数"), funcDescUtil.get("UPPER"),"UPPER({源字符})",paramArray,nullParamDatas,"String",CURRENTDATA); +// excelFunc=new ExcelFunc("UPPER",SalaryI18nUtil.getI18nLabel(97527,"字符转大写函数"), funcDescUtil.get("UPPER"),"UPPER({源字符})",paramArray,nullParamDatas,"String",CURRENTDATA); // stringList.add(excelFunc); // paramArray=new String[]{}; -// excelFunc=new ExcelFunc("EXACT",SystemEnv.getHtmlLabelName(97528,"字符比较函数"), funcDescUtil.get("EXACT"),"EXACT({字符1}, {字符2})",paramArray,nullParamDatas,"String",CURRENTDATA); +// excelFunc=new ExcelFunc("EXACT",SalaryI18nUtil.getI18nLabel(97528,"字符比较函数"), funcDescUtil.get("EXACT"),"EXACT({字符1}, {字符2})",paramArray,nullParamDatas,"String",CURRENTDATA); // stringList.add(excelFunc); return stringList; } @@ -316,36 +307,36 @@ public class ExcelFuncs { List mathList=new LinkedList<>(); ExcelFunc excelFunc=null; String [] paramArray=new String[]{}; - excelFunc=new ExcelFunc("ROUNDUP",SystemEnv.getHtmlLabelName(94963,"向上舍入"), funcDescUtil.get("ROUNDUP"),"ROUNDUP(数值, [小数位精确度])",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("ROUNDUP",SalaryI18nUtil.getI18nLabel(94963,"向上舍入"), funcDescUtil.get("ROUNDUP"),"ROUNDUP(数值, [小数位精确度])",paramArray,nullParamDatas,"Number",CURRENTDATA); mathList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("ROUND",SystemEnv.getHtmlLabelName(17392,"四舍五入"), funcDescUtil.get("ROUND"),"ROUND(数值, [小数位精确度])",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("ROUND",SalaryI18nUtil.getI18nLabel(17392,"四舍五入"), funcDescUtil.get("ROUND"),"ROUND(数值, [小数位精确度])",paramArray,nullParamDatas,"Number",CURRENTDATA); mathList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("ROUNDDOWN",SystemEnv.getHtmlLabelName(94964,"向下舍入"), funcDescUtil.get("ROUNDDOWN"),"ROUNDDOWN(数值, [小数位精确度])",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("ROUNDDOWN",SalaryI18nUtil.getI18nLabel(94964,"向下舍入"), funcDescUtil.get("ROUNDDOWN"),"ROUNDDOWN(数值, [小数位精确度])",paramArray,nullParamDatas,"Number",CURRENTDATA); mathList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("AGGREGATION",SystemEnv.getHtmlLabelName(94965,"聚合运算"), funcDescUtil.get("AGGREGATION"),"AGGREGATION({数字}...,{聚合运算类型})",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("AGGREGATION",SalaryI18nUtil.getI18nLabel(94965,"聚合运算"), funcDescUtil.get("AGGREGATION"),"AGGREGATION({数字}...,{聚合运算类型})",paramArray,nullParamDatas,"Number",CURRENTDATA); mathList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("MOD",SystemEnv.getHtmlLabelName(94966,"求余"), funcDescUtil.get("MOD"),"ROUNDDOWN({数字},{数字})",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("MOD",SalaryI18nUtil.getI18nLabel(94966,"求余"), funcDescUtil.get("MOD"),"ROUNDDOWN({数字},{数字})",paramArray,nullParamDatas,"Number",CURRENTDATA); mathList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("TRUNC",SystemEnv.getHtmlLabelName(94967,"数字格式化"), funcDescUtil.get("TRUNC"),"ROUNDDOWN({数字},{精度})",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("TRUNC",SalaryI18nUtil.getI18nLabel(94967,"数字格式化"), funcDescUtil.get("TRUNC"),"ROUNDDOWN({数字},{精度})",paramArray,nullParamDatas,"Number",CURRENTDATA); mathList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("ISINT",SystemEnv.getHtmlLabelName(0,"字符内容是否是整数"), funcDescUtil.get("ISINT"),"ISINT({字符})",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("ISINT",SalaryI18nUtil.getI18nLabel(0,"字符内容是否是整数"), funcDescUtil.get("ISINT"),"ISINT({字符})",paramArray,nullParamDatas,"String",CURRENTDATA); mathList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("ISNUMBER",SystemEnv.getHtmlLabelName(0,"字符内容是否是数字"), funcDescUtil.get("ISNUMBER"),"ISNUMBER({字符})",paramArray,nullParamDatas,"String",CURRENTDATA); + excelFunc=new ExcelFunc("ISNUMBER",SalaryI18nUtil.getI18nLabel(0,"字符内容是否是数字"), funcDescUtil.get("ISNUMBER"),"ISNUMBER({字符})",paramArray,nullParamDatas,"String",CURRENTDATA); mathList.add(excelFunc); return mathList; @@ -360,15 +351,15 @@ public class ExcelFuncs { List findList=new LinkedList<>(); ExcelFunc excelFunc=null; String [] paramArray=new String[]{}; - excelFunc=new ExcelFunc("CHOOSE",SystemEnv.getHtmlLabelName(94968,"返回索引范围内指定的值"), funcDescUtil.get("CHOOSE"),"CHOOSE(数据源,[条件])",paramArray,nullParamDatas,"Array",CURRENTDATA); + excelFunc=new ExcelFunc("CHOOSE",SalaryI18nUtil.getI18nLabel(94968,"返回索引范围内指定的值"), funcDescUtil.get("CHOOSE"),"CHOOSE(数据源,[条件])",paramArray,nullParamDatas,"Array",CURRENTDATA); findList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("VLOOKUPS",SystemEnv.getHtmlLabelName(94969,"按列查找,返回所需值"), funcDescUtil.get("VLOOKUPS"),"VLOOKUPS(表,[条件],[返回参数])",paramArray,nullParamDatas,"Array",CURRENTDATA); + excelFunc=new ExcelFunc("VLOOKUPS",SalaryI18nUtil.getI18nLabel(94969,"按列查找,返回所需值"), funcDescUtil.get("VLOOKUPS"),"VLOOKUPS(表,[条件],[返回参数])",paramArray,nullParamDatas,"Array",CURRENTDATA); findList.add(excelFunc); paramArray=new String[]{}; - excelFunc=new ExcelFunc("MATCH",SystemEnv.getHtmlLabelName(94970,"返回指定数值在指定数组区域中的位置"), funcDescUtil.get("MATCH"),"MATCH(值,[数组])",paramArray,nullParamDatas,"Number",CURRENTDATA); + excelFunc=new ExcelFunc("MATCH",SalaryI18nUtil.getI18nLabel(94970,"返回指定数值在指定数组区域中的位置"), funcDescUtil.get("MATCH"),"MATCH(值,[数组])",paramArray,nullParamDatas,"Number",CURRENTDATA); findList.add(excelFunc); return findList; } @@ -382,23 +373,23 @@ public class ExcelFuncs { ExcelFunc excelFunc=null; String [] paramArray=new String[]{"Form","Number","Boolean"}; - excelFunc=new ExcelFunc("COUNT", SystemEnv.getHtmlLabelName(16654,"计数"), funcDescUtil.get("COUNT"),"COUNT(表格)",paramArray,paramDatas,"Number",ALLFORM); + excelFunc=new ExcelFunc("COUNT", SalaryI18nUtil.getI18nLabel(16654,"计数"), funcDescUtil.get("COUNT"),"COUNT(表格)",paramArray,paramDatas,"Number",ALLFORM); aggList.add(excelFunc); paramArray=new String[]{"Number","Number","Boolean"}; - excelFunc=new ExcelFunc("SUM",SystemEnv.getHtmlLabelName(95012,"求和") , funcDescUtil.get("SUM"),"SUM(数字字段)",paramArray,paramDatas,"Number",ALLFORM); + excelFunc=new ExcelFunc("SUM",SalaryI18nUtil.getI18nLabel(95012,"求和") , funcDescUtil.get("SUM"),"SUM(数字字段)",paramArray,paramDatas,"Number",ALLFORM); aggList.add(excelFunc); paramArray=new String[]{"Number","Number","Boolean"}; - excelFunc=new ExcelFunc("AVG",SystemEnv.getHtmlLabelName(19550,"平均值"), funcDescUtil.get("AVG"),"AVG(数字字段)",paramArray,paramDatas,"Number",ALLFORM); + excelFunc=new ExcelFunc("AVG",SalaryI18nUtil.getI18nLabel(19550,"平均值"), funcDescUtil.get("AVG"),"AVG(数字字段)",paramArray,paramDatas,"Number",ALLFORM); aggList.add(excelFunc); paramArray=new String[]{"Number","Number","Boolean"}; - excelFunc=new ExcelFunc("MIN",SystemEnv.getHtmlLabelName(12318,"最小值"), funcDescUtil.get("MIN"),"MIN(表格)",paramArray,paramDatas,"Number",ALLFORM); + excelFunc=new ExcelFunc("MIN",SalaryI18nUtil.getI18nLabel(12318,"最小值"), funcDescUtil.get("MIN"),"MIN(表格)",paramArray,paramDatas,"Number",ALLFORM); aggList.add(excelFunc); paramArray=new String[]{"Number","Number","Boolean"}; - excelFunc=new ExcelFunc("MAX",SystemEnv.getHtmlLabelName(66750,"最大值"), funcDescUtil.get("MAX"),"MAX(表格)",paramArray,paramDatas,"Number",ALLFORM); + excelFunc=new ExcelFunc("MAX",SalaryI18nUtil.getI18nLabel(66750,"最大值"), funcDescUtil.get("MAX"),"MAX(表格)",paramArray,paramDatas,"Number",ALLFORM); aggList.add(excelFunc); return aggList; } @@ -410,7 +401,7 @@ public class ExcelFuncs { public Object getFinanceList(){ ExcelFunc excelFunc = null; List funcs = Lists.newArrayList(); - excelFunc = new ExcelFunc("GETMONEY",SystemEnv.getHtmlLabelName(0,"获取锁给定数字的金额大写"), funcDescUtil.get("GETMONEY"),"GETMONEY({数字})",null,nullParamDatas,"",CURRENTDATA); + excelFunc = new ExcelFunc("GETMONEY",SalaryI18nUtil.getI18nLabel(0,"获取锁给定数字的金额大写"), funcDescUtil.get("GETMONEY"),"GETMONEY({数字})",null,nullParamDatas,"",CURRENTDATA); funcs.add(excelFunc); return funcs; @@ -423,73 +414,54 @@ public class ExcelFuncs { ExcelFunc excelFunc = null; List funcs = Lists.newArrayList(); -// excelFunc = new ExcelFunc("GETHRMLOGINID",SystemEnv.getHtmlLabelName(100807,"返回指定人员系统账号"), funcDescUtil.get("GETHRMLOGINID"),"GETHRMLOGINID({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETHRMLOGINID",SalaryI18nUtil.getI18nLabel(100807,"返回指定人员系统账号"), funcDescUtil.get("GETHRMLOGINID"),"GETHRMLOGINID({表单.人员})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETHRMWORKCODE",SystemEnv.getHtmlLabelName(100809,"返回指定人员编号"), funcDescUtil.get("GETHRMWORKCODE"),"GETHRMWORKCODE({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETHRMWORKCODE",SalaryI18nUtil.getI18nLabel(100809,"返回指定人员编号"), funcDescUtil.get("GETHRMWORKCODE"),"GETHRMWORKCODE({表单.人员})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETHRMMANAGER",SystemEnv.getHtmlLabelName(100811,"返回指定人员直接上级"), funcDescUtil.get("GETHRMMANAGER"),"GETHRMMANAGER({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETHRMMANAGER",SalaryI18nUtil.getI18nLabel(100811,"返回指定人员直接上级"), funcDescUtil.get("GETHRMMANAGER"),"GETHRMMANAGER({表单.人员})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETHRMALLMANAGER",SystemEnv.getHtmlLabelName(100813,"返回指定人员所有上级"), funcDescUtil.get("GETHRMALLMANAGER"),"GETHRMALLMANAGER({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETHRMALLMANAGER",SalaryI18nUtil.getI18nLabel(100813,"返回指定人员所有上级"), funcDescUtil.get("GETHRMALLMANAGER"),"GETHRMALLMANAGER({表单.人员})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETHRMDEPARTMENT",SystemEnv.getHtmlLabelName(100815,"返回指定人员部门"), funcDescUtil.get("GETHRMDEPARTMENT"),"GETHRMDEPARTMENT({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETHRMDEPARTMENT",SalaryI18nUtil.getI18nLabel(100815,"返回指定人员部门"), funcDescUtil.get("GETHRMDEPARTMENT"),"GETHRMDEPARTMENT({表单.人员})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETHRMSUBCOMPANY",SystemEnv.getHtmlLabelName(100817,"返回指定人员分部"), funcDescUtil.get("GETHRMSUBCOMPANY"),"GETHRMSUBCOMPANY({表单.人员})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETHRMSUBCOMPANY",SalaryI18nUtil.getI18nLabel(100817,"返回指定人员分部"), funcDescUtil.get("GETHRMSUBCOMPANY"),"GETHRMSUBCOMPANY({表单.人员})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETDEPARTMENTNAME",SystemEnv.getHtmlLabelName(100819,"返回指定部门名称"), funcDescUtil.get("GETDEPARTMENTNAME"),"GETDEPARTMENTNAME({表单.部门})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETDEPARTMENTNAME",SalaryI18nUtil.getI18nLabel(100819,"返回指定部门名称"), funcDescUtil.get("GETDEPARTMENTNAME"),"GETDEPARTMENTNAME({表单.部门})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETDEPARTMENTCODE",SystemEnv.getHtmlLabelName(100821,"返回指定部门编号"), funcDescUtil.get("GETDEPARTMENTCODE"),"GETDEPARTMENTCODE({表单.部门})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETDEPARTMENTCODE",SalaryI18nUtil.getI18nLabel(100821,"返回指定部门编号"), funcDescUtil.get("GETDEPARTMENTCODE"),"GETDEPARTMENTCODE({表单.部门})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETSUPERDEPARTMENT",SystemEnv.getHtmlLabelName(100823,"返回指定部门直接上级部门"), funcDescUtil.get("GETSUPERDEPARTMENT"),"GETSUPERDEPARTMENT({表单.部门})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETSUPERDEPARTMENT",SalaryI18nUtil.getI18nLabel(100823,"返回指定部门直接上级部门"), funcDescUtil.get("GETSUPERDEPARTMENT"),"GETSUPERDEPARTMENT({表单.部门})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETALLSUPERDEPARTMENT",SystemEnv.getHtmlLabelName(100825,"返回指定部门所有上级部门"), funcDescUtil.get("GETALLSUPERDEPARTMENT"),"GETALLSUPERDEPARTMENT({表单.部门})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETALLSUPERDEPARTMENT",SalaryI18nUtil.getI18nLabel(100825,"返回指定部门所有上级部门"), funcDescUtil.get("GETALLSUPERDEPARTMENT"),"GETALLSUPERDEPARTMENT({表单.部门})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETSUBCOMPANYNAME",SystemEnv.getHtmlLabelName(100827,"返回指定分部名称"), funcDescUtil.get("GETSUBCOMPANYNAME"),"GETSUBCOMPANYNAME({表单.分部})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETSUBCOMPANYNAME",SalaryI18nUtil.getI18nLabel(100827,"返回指定分部名称"), funcDescUtil.get("GETSUBCOMPANYNAME"),"GETSUBCOMPANYNAME({表单.分部})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETSUBCOMPANYCODE",SystemEnv.getHtmlLabelName(100829,"返回指定分部编号"), funcDescUtil.get("GETSUBCOMPANYCODE"),"GETSUBCOMPANYCODE({表单.分部})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETSUBCOMPANYCODE",SalaryI18nUtil.getI18nLabel(100829,"返回指定分部编号"), funcDescUtil.get("GETSUBCOMPANYCODE"),"GETSUBCOMPANYCODE({表单.分部})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETSUPERSUBCOMPANY",SystemEnv.getHtmlLabelName(100831,"返回指定分部直接上级分部"), funcDescUtil.get("GETSUPERSUBCOMPANY"),"GETSUPERSUBCOMPANY({表单.分部})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETSUPERSUBCOMPANY",SalaryI18nUtil.getI18nLabel(100831,"返回指定分部直接上级分部"), funcDescUtil.get("GETSUPERSUBCOMPANY"),"GETSUPERSUBCOMPANY({表单.分部})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); // -// excelFunc = new ExcelFunc("GETALLSUPERSUBCOMPANY",SystemEnv.getHtmlLabelName(100833,"返回指定分部所有上级分部"), funcDescUtil.get("GETALLSUPERSUBCOMPANY"),"GETALLSUPERSUBCOMPANY({表单.分部})",null,nullParamDatas,"",CURRENTDATA); +// excelFunc = new ExcelFunc("GETALLSUPERSUBCOMPANY",SalaryI18nUtil.getI18nLabel(100833,"返回指定分部所有上级分部"), funcDescUtil.get("GETALLSUPERSUBCOMPANY"),"GETALLSUPERSUBCOMPANY({表单.分部})",null,nullParamDatas,"",CURRENTDATA); // funcs.add(excelFunc); - excelFunc = new ExcelFunc("GETHRMNAME",SystemEnv.getHtmlLabelName(100833,"获取人员名称"), funcDescUtil.get("GETHRMNAME"),"GETHRMNAME({人员})",null,nullParamDatas,"",CURRENTDATA); + excelFunc = new ExcelFunc("GETHRMNAME",SalaryI18nUtil.getI18nLabel(100833,"获取人员名称"), funcDescUtil.get("GETHRMNAME"),"GETHRMNAME({人员})",null,nullParamDatas,"",CURRENTDATA); funcs.add(excelFunc); - excelFunc = new ExcelFunc("GETHRMMOBILE",SystemEnv.getHtmlLabelName(100833,"获取人员手机号码"), funcDescUtil.get("GETHRMMOBILE"),"GETHRMMOBILE({人员})",null,nullParamDatas,"",CURRENTDATA); + excelFunc = new ExcelFunc("GETHRMMOBILE",SalaryI18nUtil.getI18nLabel(100833,"获取人员手机号码"), funcDescUtil.get("GETHRMMOBILE"),"GETHRMMOBILE({人员})",null,nullParamDatas,"",CURRENTDATA); funcs.add(excelFunc); return funcs; } - - public List getOtherFuncs(){ - List otherFuncs=new ArrayList<>(); - for(int i=0;i moduleFuncs=(List)result; - if(moduleFuncs.size()>0){ - otherFuncs.addAll(moduleFuncs); - } - } - } catch (Exception e) { - logger.error("err",e); - } - } - return otherFuncs; - } } diff --git a/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java b/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java index 1b0ea6889..d4e5fcee3 100644 --- a/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java +++ b/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java @@ -1,6 +1,6 @@ package com.engine.salary.formlua.entity.parameter; -import com.weaver.common.i18n.label.SystemEnv; +import com.engine.salary.util.SalaryI18nUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -11,122 +11,124 @@ import java.util.Map; @Component public class FuncDescUtil { - protected final Logger logger = LoggerFactory.getLogger(FuncDescUtil.class); - Map funcMap=new HashMap(); - public void initData(){ - //聚合函数 - funcMap.put("COUNT",SystemEnv.getHtmlLabelName(94986,"返回指定表格中满足条件的数据条数。示例:COUNT({员工表})")); - funcMap.put("SUM",SystemEnv.getHtmlLabelName(94987,"返回指定表格中满足条件的数据,其指定数字字段值的总和。统计条件中不可嵌套使用统计函数。示例:SUM({员工表.工资})")); - funcMap.put("AVG",SystemEnv.getHtmlLabelName(94988,"返回指定表格中满足条件的数据,其指定数字字段值的平均值。统计条件中不可嵌套使用统计函数。示例:AVG({员工表.工资})")); - funcMap.put("MIN",SystemEnv.getHtmlLabelName(94989,"返回指定表格中满足条件的数据,其指定数字字段值的最小值。统计条件中不可嵌套使用统计函数。示例:MIN({员工表.工资})")); - funcMap.put("MAX",SystemEnv.getHtmlLabelName(94990,"返回指定表格中满足条件的数据,其指定数字字段值的最大值。统计条件中不可嵌套使用统计函数。示例:MAX({员工表.工资})")); - //日期函数 - funcMap.put("TODAY",SystemEnv.getHtmlLabelName(97678,"返回当天日期。示例:TODAY() 结果: '2020-01-01'")); - funcMap.put("NOW",SystemEnv.getHtmlLabelName(97689,"返回当天日期+时间。示例:NOW() 结果: '2016-12-24 12:05:38'")); - funcMap.put("DATEADD",SystemEnv.getHtmlLabelName(97691,"对日期加减按照单位加减。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。示例:
DATEADD('2016-12-21', 3) 结果: '2016-12-24'
DATEADD('2016-12-24 20:00:00', 3, 'H') 结果: '2016-12-24 23:00:00'")); - funcMap.put("DATEDIFF",SystemEnv.getHtmlLabelName(97692,"根据指定的单位,返回日期2减去日期1的差值。当日期2小于日期1时,差值为负值。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。
示例:
DATEDIF('2016-12-21', '2016-12-24') 结果: 3
DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H') 结果: 24")); - funcMap.put("DATEFORMAT",SystemEnv.getHtmlLabelName(97693,"将日期转为指定格式返回。 示例:
DATEFORMAT('2016-12-24', 'YY年MM月DD日') 结果: 2016年12月24日
yyyy 将年份显示为1900-9999
yy 将年份显示为00-99
mm 将月份显示为 01–12
dd 将日期显示为 01–31")); - funcMap.put("YEAR",SystemEnv.getHtmlLabelName(97694,"返回指定日期中的年。示例:
YEAR('2016-12-24') 结果: 2016")); - funcMap.put("MONTH",SystemEnv.getHtmlLabelName(97695,"返回指定日期中的月。示例:
MONTH('2016-12-24') 结果: 12")); - funcMap.put("DAY",SystemEnv.getHtmlLabelName(97696,"返回指定日期中的日。示例:
DAY('2016-12-24') 结果: 24")); - funcMap.put("HOUR",SystemEnv.getHtmlLabelName(97697,"返回指定日期中的小时。示例:
HOUR('2016-12-24 20:30:56') 结果: 20")); - funcMap.put("MINUTE",SystemEnv.getHtmlLabelName(97698,"返回指定日期中的分钟。示例:
MINUTE('2016-12-24 20:30:56') 结果: 30")); - funcMap.put("SECOND",SystemEnv.getHtmlLabelName(97699,"返回指定日期中的秒钟。示例:
SECOND('2016-12-24 20:30:56') 结果: 56")); - funcMap.put("WEEKNUM",SystemEnv.getHtmlLabelName(97700,"返回指定日期为第几周,从每年第1天开始算第1周。示例:
WEEKNUM('2016-12-24') 结果: 52")); - funcMap.put("WEEKDAY",SystemEnv.getHtmlLabelName(97701,"返回指定日期为星期几。返回值为0~6,代表周日~周六。示例:
WEEKDAY('2016-12-24') 结果: 6")); - funcMap.put("EOMONTH",SystemEnv.getHtmlLabelName(97702,"将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。
示例:EOMONTH('2021-11-07', -2)
结果:2021-09-30")); - funcMap.put("NETWORKDAYSPI",SystemEnv.getHtmlLabelName(97703,"将指定日期(仅限的过去时间,最大支持跨度为365天)之间包含的工作日天数返回。注意:此函数只能选择过去的时间才可使用,跨度不能超过365天。当日期2小于日期1时,差值为负值。单位默认为日。
示例:想知道李四在2021-11-07和2021-11-12之间的工作日天数。
NETWORKDAYSPI('2021-11-07', '2021-11-12','李四')
结果:5")); - funcMap.put("MAXDATE", SystemEnv.getHtmlLabelName(100804, "取一组日期中的最大值。示例:
MAXDATE('2016-12-24', '2022-12-24') 结果: 2022-12-24")); - funcMap.put("MINDATE", SystemEnv.getHtmlLabelName(100806, "取一组日期中的最小值。示例:
MINDATE('2016-12-24', '2022-12-24') 结果: 2016-12-24")); - //日期中的当前时间操作 - funcMap.put("CURRYEAR", SystemEnv.getHtmlLabelName(101066, "取当前日期的年份。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRYEAR() 结果: 2022")); - funcMap.put("CURRMONTH", SystemEnv.getHtmlLabelName(101067, "取当前日期的月份。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRMONTH() 结果: 2")); - funcMap.put("CURRDAY", SystemEnv.getHtmlLabelName(101068, "取当前日期的天。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRDAY() 结果: 17")); - funcMap.put("CURRWEEK", SystemEnv.getHtmlLabelName(101069, "取当前日期是周几。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRWEEK() 结果: 4")); - funcMap.put("CURRHOUR", SystemEnv.getHtmlLabelName(101070, "取当前日期的小时。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRHOUR() 结果: 11")); - funcMap.put("CURRMINUTE", SystemEnv.getHtmlLabelName(101071, "取当前日期的分钟。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRMINUTE() 结果: 20")); - funcMap.put("CURRSECOND", SystemEnv.getHtmlLabelName(101072, "取当前日期的秒钟。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRSECOND() 结果: 30")); + protected final Logger logger = LoggerFactory.getLogger(FuncDescUtil.class); + Map funcMap = new HashMap(); - //逻辑函数 - funcMap.put("IF",SystemEnv.getHtmlLabelName(97704,"如果条件为真,则执行表达式1,为假则执行表达式2。条件中不可嵌套使用IF函数。示例:
IF({员工表.年龄} > 60, '退休', '在职')、IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')")); - funcMap.put("AND",SystemEnv.getHtmlLabelName(97705,"所有条件均为真,则返回真,否则返回假。逻辑操作AND的函数模式。示例:
AND(2 = 2, 2 < 2)")); - funcMap.put("OR",SystemEnv.getHtmlLabelName(97706,"任意一个条件为真,则返回真,否则返回假。逻辑操作OR的函数模式。示例:
OR(2 = 2, 2 > 3)")); - funcMap.put("NOT",SystemEnv.getHtmlLabelName(97707,"对逻辑结果取反。示例:
NOT(2 > 3)")); - funcMap.put("IN",SystemEnv.getHtmlLabelName(97708,"任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。示例:
IN(2, [2, 3, 4])")); - funcMap.put("LIKE",SystemEnv.getHtmlLabelName(97709,"文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个,则返回真。逻辑操作LIKE的函数模式。示例:
LIKE('大家好', ['大家', '好'])")); - funcMap.put("TRUE",SystemEnv.getHtmlLabelName(97710,"返回真。示例:TRUE()")); - funcMap.put("FALSE",SystemEnv.getHtmlLabelName(97712,"返回假。示例:FALSE()")); - funcMap.put("IFS",SystemEnv.getHtmlLabelName(97713,"多个条件判断,位于单数位置的参数设置为条件,位于双数位置的参数设置为结果,最后一个参数为默认返回值,当所有条件都不满足的时候返回默认参数。示例:IFS(1>1,1,1=1,2,0),结果:2")); - funcMap.put("FIND",SystemEnv.getHtmlLabelName(97714,"用指定参数去另一个参数列表中查找匹配项,指定参数时,填写1则去第一个参数列表中查找,2则是第二个参数列表里匹配查找第一个参数,成功则返回true,失败返回false。示例:FIND([1,2,3],[1,2,3,4],1),结果:true")); + public void initData() { + //聚合函数 + funcMap.put("COUNT", SalaryI18nUtil.getI18nLabel(94986, "返回指定表格中满足条件的数据条数。示例:COUNT({员工表})")); + funcMap.put("SUM", SalaryI18nUtil.getI18nLabel(94987, "返回指定表格中满足条件的数据,其指定数字字段值的总和。统计条件中不可嵌套使用统计函数。示例:SUM({员工表.工资})")); + funcMap.put("AVG", SalaryI18nUtil.getI18nLabel(94988, "返回指定表格中满足条件的数据,其指定数字字段值的平均值。统计条件中不可嵌套使用统计函数。示例:AVG({员工表.工资})")); + funcMap.put("MIN", SalaryI18nUtil.getI18nLabel(94989, "返回指定表格中满足条件的数据,其指定数字字段值的最小值。统计条件中不可嵌套使用统计函数。示例:MIN({员工表.工资})")); + funcMap.put("MAX", SalaryI18nUtil.getI18nLabel(94990, "返回指定表格中满足条件的数据,其指定数字字段值的最大值。统计条件中不可嵌套使用统计函数。示例:MAX({员工表.工资})")); + //日期函数 + funcMap.put("TODAY", SalaryI18nUtil.getI18nLabel(97678, "返回当天日期。示例:TODAY() 结果: '2020-01-01'")); + funcMap.put("NOW", SalaryI18nUtil.getI18nLabel(97689, "返回当天日期+时间。示例:NOW() 结果: '2016-12-24 12:05:38'")); + funcMap.put("DATEADD", SalaryI18nUtil.getI18nLabel(97691, "对日期加减按照单位加减。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。示例:
DATEADD('2016-12-21', 3) 结果: '2016-12-24'
DATEADD('2016-12-24 20:00:00', 3, 'H') 结果: '2016-12-24 23:00:00'")); + funcMap.put("DATEDIFF", SalaryI18nUtil.getI18nLabel(97692, "根据指定的单位,返回日期2减去日期1的差值。当日期2小于日期1时,差值为负值。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。
示例:
DATEDIF('2016-12-21', '2016-12-24') 结果: 3
DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H') 结果: 24")); + funcMap.put("DATEFORMAT", SalaryI18nUtil.getI18nLabel(97693, "将日期转为指定格式返回。 示例:
DATEFORMAT('2016-12-24', 'YY年MM月DD日') 结果: 2016年12月24日
yyyy 将年份显示为1900-9999
yy 将年份显示为00-99
mm 将月份显示为 01–12
dd 将日期显示为 01–31")); + funcMap.put("YEAR", SalaryI18nUtil.getI18nLabel(97694, "返回指定日期中的年。示例:
YEAR('2016-12-24') 结果: 2016")); + funcMap.put("MONTH", SalaryI18nUtil.getI18nLabel(97695, "返回指定日期中的月。示例:
MONTH('2016-12-24') 结果: 12")); + funcMap.put("DAY", SalaryI18nUtil.getI18nLabel(97696, "返回指定日期中的日。示例:
DAY('2016-12-24') 结果: 24")); + funcMap.put("HOUR", SalaryI18nUtil.getI18nLabel(97697, "返回指定日期中的小时。示例:
HOUR('2016-12-24 20:30:56') 结果: 20")); + funcMap.put("MINUTE", SalaryI18nUtil.getI18nLabel(97698, "返回指定日期中的分钟。示例:
MINUTE('2016-12-24 20:30:56') 结果: 30")); + funcMap.put("SECOND", SalaryI18nUtil.getI18nLabel(97699, "返回指定日期中的秒钟。示例:
SECOND('2016-12-24 20:30:56') 结果: 56")); + funcMap.put("WEEKNUM", SalaryI18nUtil.getI18nLabel(97700, "返回指定日期为第几周,从每年第1天开始算第1周。示例:
WEEKNUM('2016-12-24') 结果: 52")); + funcMap.put("WEEKDAY", SalaryI18nUtil.getI18nLabel(97701, "返回指定日期为星期几。返回值为0~6,代表周日~周六。示例:
WEEKDAY('2016-12-24') 结果: 6")); + funcMap.put("EOMONTH", SalaryI18nUtil.getI18nLabel(97702, "将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。
示例:EOMONTH('2021-11-07', -2)
结果:2021-09-30")); + funcMap.put("NETWORKDAYSPI", SalaryI18nUtil.getI18nLabel(97703, "将指定日期(仅限的过去时间,最大支持跨度为365天)之间包含的工作日天数返回。注意:此函数只能选择过去的时间才可使用,跨度不能超过365天。当日期2小于日期1时,差值为负值。单位默认为日。
示例:想知道李四在2021-11-07和2021-11-12之间的工作日天数。
NETWORKDAYSPI('2021-11-07', '2021-11-12','李四')
结果:5")); + funcMap.put("MAXDATE", SalaryI18nUtil.getI18nLabel(100804, "取一组日期中的最大值。示例:
MAXDATE('2016-12-24', '2022-12-24') 结果: 2022-12-24")); + funcMap.put("MINDATE", SalaryI18nUtil.getI18nLabel(100806, "取一组日期中的最小值。示例:
MINDATE('2016-12-24', '2022-12-24') 结果: 2016-12-24")); + //日期中的当前时间操作 + funcMap.put("CURRYEAR", SalaryI18nUtil.getI18nLabel(101066, "取当前日期的年份。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRYEAR() 结果: 2022")); + funcMap.put("CURRMONTH", SalaryI18nUtil.getI18nLabel(101067, "取当前日期的月份。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRMONTH() 结果: 2")); + funcMap.put("CURRDAY", SalaryI18nUtil.getI18nLabel(101068, "取当前日期的天。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRDAY() 结果: 17")); + funcMap.put("CURRWEEK", SalaryI18nUtil.getI18nLabel(101069, "取当前日期是周几。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRWEEK() 结果: 4")); + funcMap.put("CURRHOUR", SalaryI18nUtil.getI18nLabel(101070, "取当前日期的小时。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRHOUR() 结果: 11")); + funcMap.put("CURRMINUTE", SalaryI18nUtil.getI18nLabel(101071, "取当前日期的分钟。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRMINUTE() 结果: 20")); + funcMap.put("CURRSECOND", SalaryI18nUtil.getI18nLabel(101072, "取当前日期的秒钟。示例:
假设当前时间为:2022年2月17日 11:20:30 ,CURRSECOND() 结果: 30")); - //文本函数 - funcMap.put("CONCAT",SystemEnv.getHtmlLabelName(97730,"可用于连接多个任意类型的文本、日期、数字变量或常量。示例:
CONCAT({总价}/10000, '万元')")); - funcMap.put("TEXT",SystemEnv.getHtmlLabelName(97731,"将变量转为文本。示例:
TEXT({当前数据.性别}) 结果: '男'")); - funcMap.put("VALUE",SystemEnv.getHtmlLabelName(97732,"将文本转为数字。示例:
VALUE('23') 结果: 23")); - funcMap.put("LEN",SystemEnv.getHtmlLabelName(97733,"返回文本的长度,中文、英文都算1个字符。示例:
LEN('大家好dajiahao') 结果: 12")); - funcMap.put("SEARCH",SystemEnv.getHtmlLabelName(97734,"在指定文本中查找关键字,返回第一次出现关键字的字符位置,文本的第一个字记为1。未找到,返回0。搜索开始位置,表示从文本的第几个字符开始搜索,默认为1。示例:
SEARCH('大家', '大家好大家好', 3) 结果: 4")); - funcMap.put("REPLACE",SystemEnv.getHtmlLabelName(97735,"在原文本中,从替换位置开始,往后数指定的替换字符数,将这段文本替换为新文本。示例:
REPLACE('大家好大家好', 2, 3, 'dajia') 结果: '大dajia家好'")); - funcMap.put("REPT",SystemEnv.getHtmlLabelName(97736,"将文本重复指定次数。示例:
REPT('大家', 2) 结果: '大家大家'")); - funcMap.put("PAD",SystemEnv.getHtmlLabelName(97737,"将原文本填充到指定长度,如果文本长度大于设置的长度,则不做任何操作。填充位置可用参数:'LEFT'、'RIGHT'。示例:
PAD('你好', 4, '你', 'LEFT') 结果: '你你你好'")); - funcMap.put("TRIM",SystemEnv.getHtmlLabelName(97738,"删除文本首尾的空格。示例:
TRIM(' 大家好 ') 结果: '大家好'")); - funcMap.put("LEFT",SystemEnv.getHtmlLabelName(97739,"从文本左侧开始,返回指定字符数的文字。示例:
LEFT('大家好', 2) 结果: '大家'")); - funcMap.put("RIGHT",SystemEnv.getHtmlLabelName(97740,"从文本右侧开始,返回指定字符数的文字。示例:
RIGHT('大家好', 2) 结果: '家好'")); - funcMap.put("MID",SystemEnv.getHtmlLabelName(97741,"从文本指定位置之后开始,返回指定字符数的文字。示例:
MID('大家好', 2, 1) 结果: '家'")); - funcMap.put("ISEMPTY",SystemEnv.getHtmlLabelName(97742,"变量为空或未填写,则返回真。示例:
ISEMPTY({员工表.电话})")); - funcMap.put("IDCARD",SystemEnv.getHtmlLabelName(97743,"从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。示例:
IDCARD( ‘43070319980706334X’ , ‘BD’ ) 结果: '1998-07-06'")); - funcMap.put("SCORE",SystemEnv.getHtmlLabelName(97744,"获取选项型控件(单选框、复选框、下拉菜单)分数。示例:SCORE({当前数据.单选框}) 结果:选项分数
注:未设置选项分数时,结果为0")); - funcMap.put("SUBSTRING", SystemEnv.getHtmlLabelName(97745,"字符截取函数,用于按起始位置截取字符。
示例:SUBSTRING('abcdefg',2,3)
结果:bc")); - funcMap.put("SUBSTITUE", SystemEnv.getHtmlLabelName(97746,"字符查找替换函数,替换字符中的所有关键词为新字符。
示例:SUBSTITUE('泛微移动办公','泛微','eteams')
结果:eteams移动办公")); - funcMap.put("LOWER", SystemEnv.getHtmlLabelName(97747,"将字符中的字母转为小写。
示例:LOWER('abc')
结果:ABC")); - funcMap.put("UPPER", SystemEnv.getHtmlLabelName(97748,"将字符中的字母转为大写。
示例:LOWER('ABC')
结果:abc")); - funcMap.put("EXACT", SystemEnv.getHtmlLabelName(97749,"比较两个字符是否相等,区分字母的大小写。
示例:EXACT('泛微Eteams','泛微eteams')
结果:false")); - funcMap.put("ISSTRING", SystemEnv.getHtmlLabelName(0,"判断是否是字符。
示例:ISSTRING('泛微Eteams')
结果:true")); + //逻辑函数 + funcMap.put("IF", SalaryI18nUtil.getI18nLabel(97704, "如果条件为真,则执行表达式1,为假则执行表达式2。条件中不可嵌套使用IF函数。示例:
IF({员工表.年龄} > 60, '退休', '在职')、IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')")); + funcMap.put("AND", SalaryI18nUtil.getI18nLabel(97705, "所有条件均为真,则返回真,否则返回假。逻辑操作AND的函数模式。示例:
AND(2 = 2, 2 < 2)")); + funcMap.put("OR", SalaryI18nUtil.getI18nLabel(97706, "任意一个条件为真,则返回真,否则返回假。逻辑操作OR的函数模式。示例:
OR(2 = 2, 2 > 3)")); + funcMap.put("NOT", SalaryI18nUtil.getI18nLabel(97707, "对逻辑结果取反。示例:
NOT(2 > 3)")); + funcMap.put("IN", SalaryI18nUtil.getI18nLabel(97708, "任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。示例:
IN(2, [2, 3, 4])")); + funcMap.put("LIKE", SalaryI18nUtil.getI18nLabel(97709, "文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个,则返回真。逻辑操作LIKE的函数模式。示例:
LIKE('大家好', ['大家', '好'])")); + funcMap.put("TRUE", SalaryI18nUtil.getI18nLabel(97710, "返回真。示例:TRUE()")); + funcMap.put("FALSE", SalaryI18nUtil.getI18nLabel(97712, "返回假。示例:FALSE()")); + funcMap.put("IFS", SalaryI18nUtil.getI18nLabel(97713, "多个条件判断,位于单数位置的参数设置为条件,位于双数位置的参数设置为结果,最后一个参数为默认返回值,当所有条件都不满足的时候返回默认参数。示例:IFS(1>1,1,1=1,2,0),结果:2")); + funcMap.put("FIND", SalaryI18nUtil.getI18nLabel(97714, "用指定参数去另一个参数列表中查找匹配项,指定参数时,填写1则去第一个参数列表中查找,2则是第二个参数列表里匹配查找第一个参数,成功则返回true,失败返回false。示例:FIND([1,2,3],[1,2,3,4],1),结果:true")); - //数学函数 - funcMap.put("ROUND",SystemEnv.getHtmlLabelName(97750,"根据设置的小数位精确度,返回对数值四舍五入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,针对小数点后的数据进行四舍五入;如果小数位精确度等于 0,返回最接近数值的整数;如果小数位精确度为负整数,针对小数点前的数据进行四舍五入,被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。
示例:ROUND(123.456,2),ROUND(123.456,0),ROUND(123.456,-2)
结果:依次为123.46,123,100")); - funcMap.put("ROUNDUP",SystemEnv.getHtmlLabelName(97751,"根据设置的小数位精确度,返回对数值向上舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向上舍入到指定的小数位。如果小数位精确度等于 0,则向上舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。示例:ROUNDDOWN(76.9,0)结果:77")); - funcMap.put("ROUNDDOWN",SystemEnv.getHtmlLabelName(97752,"根据设置的小数位精确度,返回对数值向下舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向下舍入到指定的小数位。如果小数位精确度等于 0,则向下舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。
示例:ROUNDDOWN(76.9,0)
结果:76")); - funcMap.put("AGGREGATION",SystemEnv.getHtmlLabelName(97753,"将一组数据进行统计计算,支持最大值(MAX)、最小值(MIN)、平均值(AVG)。示例:AGGREGATION(1 , 2,3,'AVG'),结果:2")); - funcMap.put("MOD",SystemEnv.getHtmlLabelName(97754,"将两个参数进行除法运算然后得出余数返回。示例:MOD( 7 , 3 ),结果:1")); - funcMap.put("TRUNC",SystemEnv.getHtmlLabelName(97755,"将小数点格式化成指定位数。示例:TRUNC( 2.123 , 2 ),结果:2.12")); - funcMap.put("ISINT",SystemEnv.getHtmlLabelName(0,"判断字符内容是否是整数。示例:ISINT( 2.123 ),结果:false")); - funcMap.put("ISNUMBER",SystemEnv.getHtmlLabelName(0,"判断字符内容是否是数字。示例:ISNUMBER('2.123'),结果:true")); + //文本函数 + funcMap.put("CONCAT", SalaryI18nUtil.getI18nLabel(97730, "可用于连接多个任意类型的文本、日期、数字变量或常量。示例:
CONCAT({总价}/10000, '万元')")); + funcMap.put("TEXT", SalaryI18nUtil.getI18nLabel(97731, "将变量转为文本。示例:
TEXT({当前数据.性别}) 结果: '男'")); + funcMap.put("VALUE", SalaryI18nUtil.getI18nLabel(97732, "将文本转为数字。示例:
VALUE('23') 结果: 23")); + funcMap.put("LEN", SalaryI18nUtil.getI18nLabel(97733, "返回文本的长度,中文、英文都算1个字符。示例:
LEN('大家好dajiahao') 结果: 12")); + funcMap.put("SEARCH", SalaryI18nUtil.getI18nLabel(97734, "在指定文本中查找关键字,返回第一次出现关键字的字符位置,文本的第一个字记为1。未找到,返回0。搜索开始位置,表示从文本的第几个字符开始搜索,默认为1。示例:
SEARCH('大家', '大家好大家好', 3) 结果: 4")); + funcMap.put("REPLACE", SalaryI18nUtil.getI18nLabel(97735, "在原文本中,从替换位置开始,往后数指定的替换字符数,将这段文本替换为新文本。示例:
REPLACE('大家好大家好', 2, 3, 'dajia') 结果: '大dajia家好'")); + funcMap.put("REPT", SalaryI18nUtil.getI18nLabel(97736, "将文本重复指定次数。示例:
REPT('大家', 2) 结果: '大家大家'")); + funcMap.put("PAD", SalaryI18nUtil.getI18nLabel(97737, "将原文本填充到指定长度,如果文本长度大于设置的长度,则不做任何操作。填充位置可用参数:'LEFT'、'RIGHT'。示例:
PAD('你好', 4, '你', 'LEFT') 结果: '你你你好'")); + funcMap.put("TRIM", SalaryI18nUtil.getI18nLabel(97738, "删除文本首尾的空格。示例:
TRIM(' 大家好 ') 结果: '大家好'")); + funcMap.put("LEFT", SalaryI18nUtil.getI18nLabel(97739, "从文本左侧开始,返回指定字符数的文字。示例:
LEFT('大家好', 2) 结果: '大家'")); + funcMap.put("RIGHT", SalaryI18nUtil.getI18nLabel(97740, "从文本右侧开始,返回指定字符数的文字。示例:
RIGHT('大家好', 2) 结果: '家好'")); + funcMap.put("MID", SalaryI18nUtil.getI18nLabel(97741, "从文本指定位置之后开始,返回指定字符数的文字。示例:
MID('大家好', 2, 1) 结果: '家'")); + funcMap.put("ISEMPTY", SalaryI18nUtil.getI18nLabel(97742, "变量为空或未填写,则返回真。示例:
ISEMPTY({员工表.电话})")); + funcMap.put("IDCARD", SalaryI18nUtil.getI18nLabel(97743, "从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。示例:
IDCARD( ‘43070319980706334X’ , ‘BD’ ) 结果: '1998-07-06'")); + funcMap.put("SCORE", SalaryI18nUtil.getI18nLabel(97744, "获取选项型控件(单选框、复选框、下拉菜单)分数。示例:SCORE({当前数据.单选框}) 结果:选项分数
注:未设置选项分数时,结果为0")); + funcMap.put("SUBSTRING", SalaryI18nUtil.getI18nLabel(97745, "字符截取函数,用于按起始位置截取字符。
示例:SUBSTRING('abcdefg',2,3)
结果:bc")); + funcMap.put("SUBSTITUE", SalaryI18nUtil.getI18nLabel(97746, "字符查找替换函数,替换字符中的所有关键词为新字符。
示例:SUBSTITUE('泛微移动办公','泛微','eteams')
结果:eteams移动办公")); + funcMap.put("LOWER", SalaryI18nUtil.getI18nLabel(97747, "将字符中的字母转为小写。
示例:LOWER('abc')
结果:ABC")); + funcMap.put("UPPER", SalaryI18nUtil.getI18nLabel(97748, "将字符中的字母转为大写。
示例:LOWER('ABC')
结果:abc")); + funcMap.put("EXACT", SalaryI18nUtil.getI18nLabel(97749, "比较两个字符是否相等,区分字母的大小写。
示例:EXACT('泛微Eteams','泛微eteams')
结果:false")); + funcMap.put("ISSTRING", SalaryI18nUtil.getI18nLabel(0, "判断是否是字符。
示例:ISSTRING('泛微Eteams')
结果:true")); - //查找函数 - funcMap.put("CHOOSE",SystemEnv.getHtmlLabelName(97756,"根据条件获取指定数据源中的全部数据。数据源支持选表单、表单中的字段。
示例:想知道税表中,收入大于15000的数值
CHOOSE({税表}, {税表.收入}>15000)
结果:返回税表中收入大于15000的集合")); - funcMap.put("MATCH",SystemEnv.getHtmlLabelName(97757,"将指定数值在指定数组区域中的位置返回。若数组中无指定值,返回null。
示例:MATCH(15000, [1000, 15000, 2000])
结果:1")); - funcMap.put("VLOOKUPS", SystemEnv.getHtmlLabelName(97758,"按列查找,返回所需值。常用于薪酬模块。根据条件获取查询参数所在列的返回参数的值。返回参数可填写多个,用英文逗号隔开。若查询不到返回null。
示例:VLOOKUPS({税表},{税表.收入},AND({税表.收入}>{税表.应纳税所得额下限},{税表.收入}<{税表.应纳税所得额上限}),[{税表.税率},{税表.速算扣除数}])
结果:按列查找返回税表中收入所在的收入区间所对应的税率和速算扣除数的数值")); + //数学函数 + funcMap.put("ROUND", SalaryI18nUtil.getI18nLabel(97750, "根据设置的小数位精确度,返回对数值四舍五入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,针对小数点后的数据进行四舍五入;如果小数位精确度等于 0,返回最接近数值的整数;如果小数位精确度为负整数,针对小数点前的数据进行四舍五入,被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。
示例:ROUND(123.456,2),ROUND(123.456,0),ROUND(123.456,-2)
结果:依次为123.46,123,100")); + funcMap.put("ROUNDUP", SalaryI18nUtil.getI18nLabel(97751, "根据设置的小数位精确度,返回对数值向上舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向上舍入到指定的小数位。如果小数位精确度等于 0,则向上舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。示例:ROUNDDOWN(76.9,0)结果:77")); + funcMap.put("ROUNDDOWN", SalaryI18nUtil.getI18nLabel(97752, "根据设置的小数位精确度,返回对数值向下舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向下舍入到指定的小数位。如果小数位精确度等于 0,则向下舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。
示例:ROUNDDOWN(76.9,0)
结果:76")); + funcMap.put("AGGREGATION", SalaryI18nUtil.getI18nLabel(97753, "将一组数据进行统计计算,支持最大值(MAX)、最小值(MIN)、平均值(AVG)。示例:AGGREGATION(1 , 2,3,'AVG'),结果:2")); + funcMap.put("MOD", SalaryI18nUtil.getI18nLabel(97754, "将两个参数进行除法运算然后得出余数返回。示例:MOD( 7 , 3 ),结果:1")); + funcMap.put("TRUNC", SalaryI18nUtil.getI18nLabel(97755, "将小数点格式化成指定位数。示例:TRUNC( 2.123 , 2 ),结果:2.12")); + funcMap.put("ISINT", SalaryI18nUtil.getI18nLabel(0, "判断字符内容是否是整数。示例:ISINT( 2.123 ),结果:false")); + funcMap.put("ISNUMBER", SalaryI18nUtil.getI18nLabel(0, "判断字符内容是否是数字。示例:ISNUMBER('2.123'),结果:true")); - //数据库函数 - funcMap.put("GETHRMLOGINID", SystemEnv.getHtmlLabelName(100808, "获取指定人员系统账号。
示例:GETHRMLOGINID({表单.张三})
结果:zhangsan@qq.com")); - funcMap.put("GETHRMWORKCODE", SystemEnv.getHtmlLabelName(100810, "获取指定人员编号。
示例:GETHRMWORKCODE({表单.张三})
结果:A001")); - funcMap.put("GETHRMMANAGER", SystemEnv.getHtmlLabelName(100812, "获取指定人员直接上级。
示例:GETHRMMANAGER({表单.张三})
结果:返回张三的直接上级")); - funcMap.put("GETHRMALLMANAGER", SystemEnv.getHtmlLabelName(100814, "获取指定人员所有上级。
示例:GETHRMMANAGER({表单.张三})
结果:返回张三的所有上级形成的数组")); - funcMap.put("GETHRMDEPARTMENT", SystemEnv.getHtmlLabelName(100816, "获取指定人员部门。
示例:GETHRMDEPARTMENT({表单.张三})
结果:返回张三的部门")); - funcMap.put("GETHRMSUBCOMPANY", SystemEnv.getHtmlLabelName(100818, "获取指定人员分部。
示例:GETHRMSUBCOMPANY({表单.张三})
结果:返回张三的分部")); - funcMap.put("GETDEPARTMENTNAME", SystemEnv.getHtmlLabelName(100820, "获取指定部门名称。
示例:GETDEPARTMENTNAME({表单.A部门})
结果:A部门")); - funcMap.put("GETDEPARTMENTCODE", SystemEnv.getHtmlLabelName(100822, "获取指定部门编号。
示例:GETDEPARTMENTCODE({表单.A部门})
结果:A001")); - funcMap.put("GETSUPERDEPARTMENT", SystemEnv.getHtmlLabelName(100824, "获取指定部门直接上级部门。
示例:GETDEPARTMENTCODE({表单.A部门})
结果:A部门的直接上级部门")); - funcMap.put("GETALLSUPERDEPARTMENT", SystemEnv.getHtmlLabelName(100826, "获取指定部门所有上级部门。
示例:GETALLSUPERDEPARTMENT({表单.A部门})
结果:A部门的所有上级部门形成的数组")); - funcMap.put("GETSUBCOMPANYNAME", SystemEnv.getHtmlLabelName(100828, "获取指定分部名称。
示例:GETSUBCOMPANYNAME({表单.A分部})
结果:A分部")); - funcMap.put("GETSUBCOMPANYCODE", SystemEnv.getHtmlLabelName(100830, "获取指定分部编号。
示例:GETSUBCOMPANYCODE({表单.A分部})
结果:B001")); - funcMap.put("GETSUPERSUBCOMPANY", SystemEnv.getHtmlLabelName(100832, "获取指定分部直接上级分部。
示例:GETSUPERSUBCOMPANY({表单.A分部})
结果:A分部的直接上级分部")); - funcMap.put("GETALLSUPERSUBCOMPANY", SystemEnv.getHtmlLabelName(100834, "获取指定分部所有上级分部。
示例:GETALLSUPERSUBCOMPANY({表单.A分部})
结果:A分部的所有上级分部形成的数组")); - funcMap.put("GETHRMNAME", SystemEnv.getHtmlLabelName(100834, "获取指定人员的姓名。
示例:GETHRMNAME({U:张三})
结果:张三")); - funcMap.put("GETHRMMOBILE", SystemEnv.getHtmlLabelName(100834, "获取指定人员的手机号码。
示例:GETHRMMOBILE({U:张三})
结果:13123232323")); + //查找函数 + funcMap.put("CHOOSE", SalaryI18nUtil.getI18nLabel(97756, "根据条件获取指定数据源中的全部数据。数据源支持选表单、表单中的字段。
示例:想知道税表中,收入大于15000的数值
CHOOSE({税表}, {税表.收入}>15000)
结果:返回税表中收入大于15000的集合")); + funcMap.put("MATCH", SalaryI18nUtil.getI18nLabel(97757, "将指定数值在指定数组区域中的位置返回。若数组中无指定值,返回null。
示例:MATCH(15000, [1000, 15000, 2000])
结果:1")); + funcMap.put("VLOOKUPS", SalaryI18nUtil.getI18nLabel(97758, "按列查找,返回所需值。常用于薪酬模块。根据条件获取查询参数所在列的返回参数的值。返回参数可填写多个,用英文逗号隔开。若查询不到返回null。
示例:VLOOKUPS({税表},{税表.收入},AND({税表.收入}>{税表.应纳税所得额下限},{税表.收入}<{税表.应纳税所得额上限}),[{税表.税率},{税表.速算扣除数}])
结果:按列查找返回税表中收入所在的收入区间所对应的税率和速算扣除数的数值")); - //财务函数 - funcMap.put("GETMONEY", SystemEnv.getHtmlLabelName(0, "将金额转换成中文金额大写。
示例:GETMONEY({1234})
结果:壹仟贰佰叁拾肆元整")); + //数据库函数 + funcMap.put("GETHRMLOGINID", SalaryI18nUtil.getI18nLabel(100808, "获取指定人员系统账号。
示例:GETHRMLOGINID({表单.张三})
结果:zhangsan@qq.com")); + funcMap.put("GETHRMWORKCODE", SalaryI18nUtil.getI18nLabel(100810, "获取指定人员编号。
示例:GETHRMWORKCODE({表单.张三})
结果:A001")); + funcMap.put("GETHRMMANAGER", SalaryI18nUtil.getI18nLabel(100812, "获取指定人员直接上级。
示例:GETHRMMANAGER({表单.张三})
结果:返回张三的直接上级")); + funcMap.put("GETHRMALLMANAGER", SalaryI18nUtil.getI18nLabel(100814, "获取指定人员所有上级。
示例:GETHRMMANAGER({表单.张三})
结果:返回张三的所有上级形成的数组")); + funcMap.put("GETHRMDEPARTMENT", SalaryI18nUtil.getI18nLabel(100816, "获取指定人员部门。
示例:GETHRMDEPARTMENT({表单.张三})
结果:返回张三的部门")); + funcMap.put("GETHRMSUBCOMPANY", SalaryI18nUtil.getI18nLabel(100818, "获取指定人员分部。
示例:GETHRMSUBCOMPANY({表单.张三})
结果:返回张三的分部")); + funcMap.put("GETDEPARTMENTNAME", SalaryI18nUtil.getI18nLabel(100820, "获取指定部门名称。
示例:GETDEPARTMENTNAME({表单.A部门})
结果:A部门")); + funcMap.put("GETDEPARTMENTCODE", SalaryI18nUtil.getI18nLabel(100822, "获取指定部门编号。
示例:GETDEPARTMENTCODE({表单.A部门})
结果:A001")); + funcMap.put("GETSUPERDEPARTMENT", SalaryI18nUtil.getI18nLabel(100824, "获取指定部门直接上级部门。
示例:GETDEPARTMENTCODE({表单.A部门})
结果:A部门的直接上级部门")); + funcMap.put("GETALLSUPERDEPARTMENT", SalaryI18nUtil.getI18nLabel(100826, "获取指定部门所有上级部门。
示例:GETALLSUPERDEPARTMENT({表单.A部门})
结果:A部门的所有上级部门形成的数组")); + funcMap.put("GETSUBCOMPANYNAME", SalaryI18nUtil.getI18nLabel(100828, "获取指定分部名称。
示例:GETSUBCOMPANYNAME({表单.A分部})
结果:A分部")); + funcMap.put("GETSUBCOMPANYCODE", SalaryI18nUtil.getI18nLabel(100830, "获取指定分部编号。
示例:GETSUBCOMPANYCODE({表单.A分部})
结果:B001")); + funcMap.put("GETSUPERSUBCOMPANY", SalaryI18nUtil.getI18nLabel(100832, "获取指定分部直接上级分部。
示例:GETSUPERSUBCOMPANY({表单.A分部})
结果:A分部的直接上级分部")); + funcMap.put("GETALLSUPERSUBCOMPANY", SalaryI18nUtil.getI18nLabel(100834, "获取指定分部所有上级分部。
示例:GETALLSUPERSUBCOMPANY({表单.A分部})
结果:A分部的所有上级分部形成的数组")); + funcMap.put("GETHRMNAME", SalaryI18nUtil.getI18nLabel(100834, "获取指定人员的姓名。
示例:GETHRMNAME({U:张三})
结果:张三")); + funcMap.put("GETHRMMOBILE", SalaryI18nUtil.getI18nLabel(100834, "获取指定人员的手机号码。
示例:GETHRMMOBILE({U:张三})
结果:13123232323")); - } - public String get(String key){ - if(funcMap.size()>0){ + //财务函数 + funcMap.put("GETMONEY", SalaryI18nUtil.getI18nLabel(0, "将金额转换成中文金额大写。
示例:GETMONEY({1234})
结果:壹仟贰佰叁拾肆元整")); + + } + + public String get(String key) { + if (funcMap.size() > 0) { // logger.info("描述数据存在:"+funcMap.size()); - }else { - logger.info("初始化函数描述数据"); - initData(); - } + } else { + logger.info("初始化函数描述数据"); + initData(); + } - return funcMap.get(key); - } + return funcMap.get(key); + } } diff --git a/src/com/engine/salary/formlua/entity/parameter/ThreadLocalData.java b/src/com/engine/salary/formlua/entity/parameter/ThreadLocalData.java index 4a06cc07e..7e9c14289 100644 --- a/src/com/engine/salary/formlua/entity/parameter/ThreadLocalData.java +++ b/src/com/engine/salary/formlua/entity/parameter/ThreadLocalData.java @@ -1,7 +1,7 @@ package com.engine.salary.formlua.entity.parameter; -import com.weaver.common.form.metadata.ModuleSource; -import com.weaver.teams.domain.user.SimpleEmployee; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import org.mozilla.javascript.commonjs.module.provider.ModuleSource; import java.util.Iterator; import java.util.Map; @@ -11,7 +11,7 @@ public class ThreadLocalData { private Map expressContext; private ModuleSource moduleSource; - private SimpleEmployee employee; + private DataCollectionEmployee employee; public ModuleSource getModuleSource() { return moduleSource; @@ -21,11 +21,11 @@ public class ThreadLocalData { this.moduleSource = moduleSource; } - public SimpleEmployee getEmployee() { + public DataCollectionEmployee getEmployee() { return employee; } - public void setEmployee(SimpleEmployee employee) { + public void setEmployee(DataCollectionEmployee employee) { this.employee = employee; } diff --git a/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java b/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java index 150606a81..fa6bbd7bc 100644 --- a/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java +++ b/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java @@ -685,7 +685,7 @@ public class DateTimeServiceImpl implements DateTimeService { // Object employeeObj = objects[2]; // String empIdStr = employeeObj != null ? ((DataType) employeeObj).getContent() + "" : null; // -// SimpleEmployee currEmp = employeeObj != null ? ((DataType) employeeObj).getEmployee() : null; +// DataCollectionEmployee currEmp = employeeObj != null ? ((DataType) employeeObj).getEmployee() : null; // String tenantKey = currEmp != null ? currEmp.getTenantKey() : null; // // if (ExcelParamUtil.checkIsNull(startDate, endDate, empIdStr, ExcelParamUtil.CHECKLEVEL_STRING)) { diff --git a/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java b/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java index 18031fbb7..bbdc37dec 100644 --- a/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java +++ b/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java @@ -6,7 +6,7 @@ import com.weaver.excel.formula.entity.parameter.DataType; import com.weaver.excel.formula.entity.parameter.DateAndString; import com.weaver.excel.formula.entity.parameter.FuncNames; import com.weaver.excel.formula.util.*; -import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.domain.user.DataCollectionEmployee; import com.weaver.teams.util.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -698,7 +698,7 @@ public class DateTimeTestServiceImpl implements DateTimeService { if(!IgnoreParamFilter.isEmployee(employeeObj)) throw new RuntimeException(func+"函数第三个参数必须是人员参数"); String empIdStr = employeeObj != null ? ((DataType)employeeObj).getContent()+"" : null; - SimpleEmployee currEmp = employeeObj != null ? ((DataType)employeeObj).getEmployee() : null; + DataCollectionEmployee currEmp = employeeObj != null ? ((DataType)employeeObj).getEmployee() : null; String tenantKey = currEmp != null ? currEmp.getTenantKey() : null; if(ExcelParamUtil.checkIsNull(startDate, endDate, empIdStr, ExcelParamUtil.CHECKLEVEL_STRING)){ diff --git a/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java b/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java index 347ad130e..7164fe9fd 100644 --- a/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java +++ b/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java @@ -10,7 +10,7 @@ import com.weaver.excel.formula.entity.parameter.standard.FormulaFilterData; import com.weaver.excel.formula.util.ErrorUtil; import com.weaver.excel.formula.util.ExcelParamUtil; import com.weaver.excel.formula.util.IgnoreParamFilter; -import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.domain.user.DataCollectionEmployee; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang.ArrayUtils; @@ -71,7 +71,7 @@ public class FindFuncsServiceImpl implements FindFuncsService{ Long formId = formObj.getFormId(); List filterDatas = conditionObj != null ? conditionObj.getFormulaFilterDataList(): Lists.newArrayList(); - SimpleEmployee user = formObj.getEmployee(); + DataCollectionEmployee user = formObj.getEmployee(); Object[] params = {formId, filterDatas, user}; return excelDubboInvoker.invokeCommonDubbo(DataType.class,formObj.getModule()+"", RpcMethod.choose, params); @@ -145,7 +145,7 @@ public class FindFuncsServiceImpl implements FindFuncsService{ Long formId = formObj.getFormId(); List filterDatas = conditionObj != null ? conditionObj.getFormulaFilterDataList() : Lists.newArrayList(); - SimpleEmployee user = formObj.getEmployee(); + DataCollectionEmployee user = formObj.getEmployee(); Object[] params = {formId+"", filterDatas, fieldIds, null,user}; diff --git a/src/com/engine/salary/formlua/util/ExcelParamUtil.java b/src/com/engine/salary/formlua/util/ExcelParamUtil.java index 10b20219c..8d576c7b5 100644 --- a/src/com/engine/salary/formlua/util/ExcelParamUtil.java +++ b/src/com/engine/salary/formlua/util/ExcelParamUtil.java @@ -1,16 +1,16 @@ package com.engine.salary.formlua.util; import com.alibaba.fastjson.JSONObject; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.formlua.entity.parameter.DataType; import com.weaver.common.form.component.base.Component; import com.weaver.common.form.component.base.ComponentType; import com.weaver.common.form.conditionrule.FixedField; import com.weaver.common.form.metadata.ModuleSource; -import com.weaver.excel.formula.api.entity.FormulaVar; import com.weaver.excel.formula.entity.parameter.*; import com.weaver.excel.formula.entity.standard.execute.FixFieldType; -import com.weaver.teams.domain.user.SimpleEmployee; -import com.weaver.teams.util.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,1081 +24,1107 @@ import java.util.regex.Pattern; public class ExcelParamUtil { - protected static final Logger logger = LoggerFactory.getLogger(ExcelParamUtil.class); - public final static String[] NUMBERFIELD=new String[]{"NumberComponent","Money","Monitor","Raty","ProgressBar", FixFieldType.Num.toString(),DataType.NUMBER}; - public final static String[] DATEFIELD=new String[]{"DateComponent","DateInterval","TimeComponent",DataType.DATE}; - public final static String[] TEXTFIELD=new String[]{"Text","TextArea","Email","Phone","Mobile","IDCard","FileComponent","SerialNumber","PositionComponent","Paragraph",FixFieldType.Text.toString(),DataType.STRING}; - public final static String[] SELECTFIELD=new String[]{"ImageComponent","RadioBox","CheckBox","Select","ComboSelect","ImageRadioBox","ImageCheckBox","TreeSelect","MatrixComponent",FixFieldType.Select.toString(),"option","employee","department","subcompany","operator",DataType.OPTION}; - public final static String[] DATASOURCEFIELD=new String[]{"Employee","Department","Mainline","Task","Document","Workflow","AgendaComponent","FormComponent","CustomerComponent","ClueComponent","Subcompany", - "OrderComponent","ContactComponent","ChanceComponent","ProductionComponent","ContractComponent","ActivityComponent","WorkreportComponent","CompetitorComponent","KpiFlowComponent","Ebuilder","QuoteComponent","AttendComponent","DataSource", - FixFieldType.Department.toString(),FixFieldType.Employee.toString()}; + protected static final Logger logger = LoggerFactory.getLogger(ExcelParamUtil.class); + public final static String[] NUMBERFIELD = new String[]{"NumberComponent", "Money", "Monitor", "Raty", "ProgressBar", FixFieldType.Num.toString(), DataType.NUMBER}; + public final static String[] DATEFIELD = new String[]{"DateComponent", "DateInterval", "TimeComponent", DataType.DATE}; + public final static String[] TEXTFIELD = new String[]{"Text", "TextArea", "Email", "Phone", "Mobile", "IDCard", "FileComponent", "SerialNumber", "PositionComponent", "Paragraph", FixFieldType.Text.toString(), DataType.STRING}; + public final static String[] SELECTFIELD = new String[]{"ImageComponent", "RadioBox", "CheckBox", "Select", "ComboSelect", "ImageRadioBox", "ImageCheckBox", "TreeSelect", "MatrixComponent", FixFieldType.Select.toString(), "option", "employee", "department", "subcompany", "operator", DataType.OPTION}; + public final static String[] DATASOURCEFIELD = new String[]{"Employee", "Department", "Mainline", "Task", "Document", "Workflow", "AgendaComponent", "FormComponent", "CustomerComponent", "ClueComponent", "Subcompany", + "OrderComponent", "ContactComponent", "ChanceComponent", "ProductionComponent", "ContractComponent", "ActivityComponent", "WorkreportComponent", "CompetitorComponent", "KpiFlowComponent", "Ebuilder", "QuoteComponent", "AttendComponent", "DataSource", + FixFieldType.Department.toString(), FixFieldType.Employee.toString()}; - private static String[] funcArray= IllegalList.getInstance().getNameIllegalArray(); - private final static String[] NUMBERCOMPONENTS=new String[]{"NumberComponent","Money","Raty","ProgressBar","Monitor"}; - private static String[] numberTypes=new String[]{"Integer","integer","Long","Double","Float","float","int","double","long","float","bigdecimal","BigDecimal"}; - public final static String CHECKLEVEL_NULL="NULL"; - public final static String CHECKLEVEL_STRING="STRING"; + private static String[] funcArray = IllegalList.getInstance().getNameIllegalArray(); + private final static String[] NUMBERCOMPONENTS = new String[]{"NumberComponent", "Money", "Raty", "ProgressBar", "Monitor"}; + private static String[] numberTypes = new String[]{"Integer", "integer", "Long", "Double", "Float", "float", "int", "double", "long", "float", "bigdecimal", "BigDecimal"}; + public final static String CHECKLEVEL_NULL = "NULL"; + public final static String CHECKLEVEL_STRING = "STRING"; - /** - * 自定义脚本生成调用的逻辑 - * @param funcString - * @return - */ - public static String initFunc(String funcString){ - if(StringUtils.isEmpty(funcString)){ - return funcString; - } - int startIdx=funcString.indexOf("("); - int endIdx=funcString.indexOf(")"); - int funcIdx=funcString.indexOf("function"); - if(startIdx==-1 ){ - throw new RuntimeException("【语法错误】缺少左括号("); - }else if(endIdx == -1){ - throw new RuntimeException("【语法错误】缺少右括号)"); - }else if(funcIdx ==-1){ - throw new RuntimeException("【语法错误】缺少function关键字"); - } - String funcName=funcString.substring(funcIdx+8,startIdx).trim(); - String paramStr=funcString.substring(startIdx+1,endIdx); - if(paramStr.trim().equalsIgnoreCase("")){ - funcString+=funcName+"();"; - return funcString; - } - String[] paramStrArray=paramStr.split(","); - logger.info("总参数个数:"+paramStrArray.length); - String paramNames=""; - for (int i=0;i numberList=Arrays.asList(NUMBERFIELD); - List textList=Arrays.asList(TEXTFIELD); - List selectList=Arrays.asList(SELECTFIELD); - List dataSourceList=Arrays.asList(DATASOURCEFIELD); - List dateList=Arrays.asList(DATEFIELD); - if(numberList.contains(compnentKey)){ - return DataType.NUMBER; - }else if(textList.contains(compnentKey)){ - return DataType.STRING; - }else if(dateList.contains(compnentKey)){ - return DataType.STRING; - }else if(selectList.contains(compnentKey)){ - return DataType.OPTION; - }else if(dataSourceList.contains(compnentKey)){ - return DataType.OPTION; - }else { - return ""; - } - } + /** + * 判断控件所属的数据类型 + * + * @param compnentKey FormField中的ComponentKey + * @return + */ + public static String findType(String compnentKey) { + List numberList = Arrays.asList(NUMBERFIELD); + List textList = Arrays.asList(TEXTFIELD); + List selectList = Arrays.asList(SELECTFIELD); + List dataSourceList = Arrays.asList(DATASOURCEFIELD); + List dateList = Arrays.asList(DATEFIELD); + if (numberList.contains(compnentKey)) { + return DataType.NUMBER; + } else if (textList.contains(compnentKey)) { + return DataType.STRING; + } else if (dateList.contains(compnentKey)) { + return DataType.STRING; + } else if (selectList.contains(compnentKey)) { + return DataType.OPTION; + } else if (dataSourceList.contains(compnentKey)) { + return DataType.OPTION; + } else { + return ""; + } + } - public static String findDataType(String compnentKey){ - List numberList=Arrays.asList(NUMBERFIELD); - List textList=Arrays.asList(TEXTFIELD); - List selectList=Arrays.asList(SELECTFIELD); - List dataSourceList=Arrays.asList(DATASOURCEFIELD); - List dateList=Arrays.asList(DATEFIELD); - if(numberList.contains(compnentKey)){ - return DataType.NUMBER; - }else if(textList.contains(compnentKey)){ - return DataType.STRING; - }else if(dateList.contains(compnentKey)){ - return DataType.STRING; - }else if(selectList.contains(compnentKey)){ - return DataType.OPTION; - }else if(dataSourceList.contains(compnentKey)){ - return DataType.OPTION; - }else { - return DataType.STRING; - } - } - public static String findTestDataType(String compnentKey){ - List numberList=Arrays.asList(NUMBERFIELD); - List textList=Arrays.asList(TEXTFIELD); - List selectList=Arrays.asList(SELECTFIELD); - List dataSourceList=Arrays.asList(DATASOURCEFIELD); - List dateList=Arrays.asList(DATEFIELD); - if(numberList.contains(compnentKey)){ - return DataType.NUMBER; - }else if(textList.contains(compnentKey)){ - return DataType.STRING; - }else if(dateList.contains(compnentKey)){ - return DataType.DATE; - }else if(selectList.contains(compnentKey)){ - return DataType.OPTION; - }else if(dataSourceList.contains(compnentKey)){ - return DataType.OPTION; - }else { - return DataType.STRING; - } - } - /** - * 判断变量是否为空 - * @param objects - * @return - */ - public static boolean checkIsNull(Object... objects){ - String checkLevel=objects[objects.length-1].toString(); - List formulavars=new ArrayList<>(); - for (int i=0;i numberList = Arrays.asList(NUMBERFIELD); + List textList = Arrays.asList(TEXTFIELD); + List selectList = Arrays.asList(SELECTFIELD); + List dataSourceList = Arrays.asList(DATASOURCEFIELD); + List dateList = Arrays.asList(DATEFIELD); + if (numberList.contains(compnentKey)) { + return DataType.NUMBER; + } else if (textList.contains(compnentKey)) { + return DataType.STRING; + } else if (dateList.contains(compnentKey)) { + return DataType.STRING; + } else if (selectList.contains(compnentKey)) { + return DataType.OPTION; + } else if (dataSourceList.contains(compnentKey)) { + return DataType.OPTION; + } else { + return DataType.STRING; + } + } - for (Object object:formulavars){ - switch (checkLevel){ - case CHECKLEVEL_NULL: - if(null==object){ - return true; - } - break; - case CHECKLEVEL_STRING: - if(null==object){ - return true; - } - if(object instanceof String || object instanceof Character){ - if(object.toString().trim().equals("")){ - return true; - } - } - break; - } + public static String findTestDataType(String compnentKey) { + List numberList = Arrays.asList(NUMBERFIELD); + List textList = Arrays.asList(TEXTFIELD); + List selectList = Arrays.asList(SELECTFIELD); + List dataSourceList = Arrays.asList(DATASOURCEFIELD); + List dateList = Arrays.asList(DATEFIELD); + if (numberList.contains(compnentKey)) { + return DataType.NUMBER; + } else if (textList.contains(compnentKey)) { + return DataType.STRING; + } else if (dateList.contains(compnentKey)) { + return DataType.DATE; + } else if (selectList.contains(compnentKey)) { + return DataType.OPTION; + } else if (dataSourceList.contains(compnentKey)) { + return DataType.OPTION; + } else { + return DataType.STRING; + } + } - } - return false; - } + /** + * 判断变量是否为空 + * + * @param objects + * @return + */ + public static boolean checkIsNull(Object... objects) { + String checkLevel = objects[objects.length - 1].toString(); + List formulavars = new ArrayList<>(); + for (int i = 0; i < objects.length; i++) { + Object object = objects[i]; + if (object instanceof Array) { + Object[] subArray = (Object[]) object; + for (int j = 0; j < subArray.length; j++) { + formulavars.add(subArray[j]); + } + } else { + formulavars.add(object); + } + } - /** - * 替换所有中文参数为Key - * @param sql - * @param replaceArray - * @return - */ - public static String replaceAllParam(String sql,String[] replaceArray){ - String partternStr="\\{.+?\\}{1}?"; - Pattern pt=Pattern.compile(partternStr); - Matcher matcher=pt.matcher(sql); + for (Object object : formulavars) { + switch (checkLevel) { + case CHECKLEVEL_NULL: + if (null == object) { + return true; + } + break; + case CHECKLEVEL_STRING: + if (null == object) { + return true; + } + if (object instanceof String || object instanceof Character) { + if (object.toString().trim().equals("")) { + return true; + } + } + break; + } - int loop=0; - while (matcher.find()){ - String matherString=matcher.group(); - matherString=matherString.replaceAll("(\\{|\\})",""); - String replaceStr=replaceArray[loop]; - sql=sql.replaceFirst(matherString,replaceStr); - loop++; - } - return sql; - } + } + return false; + } - /** - * 找到聚合函数的条件参数 - * @param sql - * @return - */ - public static List findAggParam(String sql){ - List list=new LinkedList<>(); - String partternStr="(COUNT|SUM|MIN|MAX|AVG){1}\\(+.+?\\)+"; - Pattern pt=Pattern.compile(partternStr); - Matcher matcher=pt.matcher(sql); - while (matcher.find()){ - String aggStr=matcher.group(); - aggStr=aggStr.replaceAll("(COUNT|SUM|MIN|MAX|AVG){1}",""); - String[] paramArray=aggStr.split(",",2); - if(paramArray.length==2){ - String cndParam=paramArray[1]; - cndParam=cndParam.substring(0,cndParam.length()-1); - list.add(cndParam); - } - } + /** + * 替换所有中文参数为Key + * + * @param sql + * @param replaceArray + * @return + */ + public static String replaceAllParam(String sql, String[] replaceArray) { + String partternStr = "\\{.+?\\}{1}?"; + Pattern pt = Pattern.compile(partternStr); + Matcher matcher = pt.matcher(sql); + + int loop = 0; + while (matcher.find()) { + String matherString = matcher.group(); + matherString = matherString.replaceAll("(\\{|\\})", ""); + String replaceStr = replaceArray[loop]; + sql = sql.replaceFirst(matherString, replaceStr); + loop++; + } + return sql; + } + + /** + * 找到聚合函数的条件参数 + * + * @param sql + * @return + */ + public static List findAggParam(String sql) { + List list = new LinkedList<>(); + String partternStr = "(COUNT|SUM|MIN|MAX|AVG){1}\\(+.+?\\)+"; + Pattern pt = Pattern.compile(partternStr); + Matcher matcher = pt.matcher(sql); + while (matcher.find()) { + String aggStr = matcher.group(); + aggStr = aggStr.replaceAll("(COUNT|SUM|MIN|MAX|AVG){1}", ""); + String[] paramArray = aggStr.split(",", 2); + if (paramArray.length == 2) { + String cndParam = paramArray[1]; + cndParam = cndParam.substring(0, cndParam.length() - 1); + list.add(cndParam); + } + } - return list; - } + return list; + } - /** - * 替换聚合函数的条件参数,一般是从规则库返回过来的条件语句 - * @param sql - * @param replaceArray - * @return - */ - public static String replaceAggParam(String sql,List replaceArray){ - String partternStr="(COUNT|SUM|MIN|MAX|AVG){1}\\(.+?\\){1}?"; - Pattern pt=Pattern.compile(partternStr); - Matcher matcher=pt.matcher(sql); - String paramPattStr="\\(.+?\\){1}?"; - Pattern ppatt=Pattern.compile(paramPattStr); - int loop=0; - while (matcher.find()){ - String matherString=matcher.group(); - String[] paramStrArray=matherString.replaceAll("(\\(|\\))","").split(","); - String newmatherString=matherString.replace(paramStrArray[1],"{"+replaceArray.get(loop)+"}"); - sql=sql.replace(matherString,newmatherString); - loop++; - } - return sql; - } + /** + * 替换聚合函数的条件参数,一般是从规则库返回过来的条件语句 + * + * @param sql + * @param replaceArray + * @return + */ + public static String replaceAggParam(String sql, List replaceArray) { + String partternStr = "(COUNT|SUM|MIN|MAX|AVG){1}\\(.+?\\){1}?"; + Pattern pt = Pattern.compile(partternStr); + Matcher matcher = pt.matcher(sql); + String paramPattStr = "\\(.+?\\){1}?"; + Pattern ppatt = Pattern.compile(paramPattStr); + int loop = 0; + while (matcher.find()) { + String matherString = matcher.group(); + String[] paramStrArray = matherString.replaceAll("(\\(|\\))", "").split(","); + String newmatherString = matherString.replace(paramStrArray[1], "{" + replaceArray.get(loop) + "}"); + sql = sql.replace(matherString, newmatherString); + loop++; + } + return sql; + } + public static void checkParamArrayDataType(List formulavars) { + for (FormulaVar formulaVar : formulavars) { + if (formulaVar.getComponentKey() != null && !formulaVar.getComponentKey().equals("")) { + String componentKey = formulaVar.getComponentKey(); + Arrays.sort(NUMBERCOMPONENTS); + int searchIdx = Arrays.binarySearch(NUMBERCOMPONENTS, componentKey); + if (searchIdx >= 0) { + formulaVar.setFieldType("Number"); + } + Arrays.sort(ReturnType.CHECK_TYPE); + if (Arrays.binarySearch(ReturnType.CHECK_TYPE, componentKey) >= 0) { + formulaVar.setFieldType("String"); + } + if (formulaVar.getOptionId() != null) { + formulaVar.setFieldType("String"); + } + } - public static void checkParamArrayDataType(List formulavars){ - for (FormulaVar formulaVar:formulavars){ - if(formulaVar.getComponentKey()!=null&&!formulaVar.getComponentKey().equals("")){ - String componentKey=formulaVar.getComponentKey(); - Arrays.sort(NUMBERCOMPONENTS); - int searchIdx=Arrays.binarySearch(NUMBERCOMPONENTS,componentKey); - if(searchIdx>=0){ - formulaVar.setFieldType("Number"); - } - Arrays.sort(ReturnType.CHECK_TYPE); - if(Arrays.binarySearch(ReturnType.CHECK_TYPE,componentKey)>=0){ - formulaVar.setFieldType("String"); - } - if(formulaVar.getOptionId()!=null){ - formulaVar.setFieldType("String"); - } - } - - } - } + } + } - /** - * 替换语句中的参数为参数列表中的Key - * @param sql - * @param formulaVars - * @return - */ - public static String replaceAllParam(String sql,List formulaVars){ - if(null==formulaVars){ - return sql; - } - //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 - String partternStr="\\{.+?\\}{1}?"; - Pattern pt=Pattern.compile(partternStr); - Matcher matcher=pt.matcher(sql); + /** + * 替换语句中的参数为参数列表中的Key + * + * @param sql + * @param formulaVars + * @return + */ + public static String replaceAllParam(String sql, List formulaVars) { + if (null == formulaVars) { + return sql; + } + //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 + String partternStr = "\\{.+?\\}{1}?"; + Pattern pt = Pattern.compile(partternStr); + Matcher matcher = pt.matcher(sql); - int loop=0; - //替换逻辑 - while (matcher.find()){ - String matherString=matcher.group(); - //替换特殊字符 - matherString=matherString.replace("{",""); - matherString=matherString.replace("}",""); - matherString=matherString.replace("(","\\("); - matherString=matherString.replace(")","\\)"); - matherString=matherString.replaceAll("\\+","\\\\+"); - matherString=matherString.replaceAll("\\-","\\\\-"); - matherString=matherString.replaceAll("\\*","\\\\*"); - matherString=matherString.replaceAll("\\/","\\\\/"); - if(formulaVars!=null&&loop") - .replace("<","<"); - return formatStr; - } + /** + * 替换参数 + * + * @param sourceString + * @return + */ + public static String replaceParam(String sourceString) { + String formatStr = sourceString.replace(">", ">") + .replace("<", "<"); + return formatStr; + } - /** - * 过滤 除了数字外的其他参数类型 - * @param param - * @return - */ - public static boolean inNumber(Object param){ - boolean r=false; - Class[] paramClasses=new Class[]{Integer.class,Double.class,Float.class,Long.class,Short.class}; - for(int i=0;i numberList=Arrays.asList(numberTypes); - if(typeAllName.equals("Character")){ - return "String"; - }else if(numberList.contains(typeAllName.toLowerCase())){ - return "Number"; - } - return typeAllName; - } + /** + * 获取参数名 + * + * @param typeAllName + * @return + */ + public static String getParamType(String typeAllName) { + int fnameIdx = typeAllName.lastIndexOf("."); + typeAllName = typeAllName.substring(fnameIdx + 1); + List numberList = Arrays.asList(numberTypes); + if (typeAllName.equals("Character")) { + return "String"; + } else if (numberList.contains(typeAllName.toLowerCase())) { + return "Number"; + } + return typeAllName; + } - /** - * 获取参数类型 - * @param - * @return - */ - public static String getParamType(Object dataType){ - if(dataType instanceof DataType){ - DataType data=(DataType)dataType; - String filedType=data.getDataType(); - filedType=filedType.toLowerCase(); + /** + * 获取参数类型 + * + * @param + * @return + */ + public static String getParamType(Object dataType) { + if (dataType instanceof DataType) { + DataType data = (DataType) dataType; + String filedType = data.getDataType(); + filedType = filedType.toLowerCase(); - switch (filedType){ - case "number": - filedType= ParamType.DOUBLE.getName(); - break; - case "string": - filedType=ParamType.STRING.getName(); - break; - case "boolean": - filedType=ParamType.BOOLEAN.getName(); - break; - case "select": - filedType=ParamType.STRING.getName(); - break; - case "text": - filedType=ParamType.STRING.getName(); - break; - case "employee": - filedType= ParamType.STRING.getName(); - break; - case "department": - filedType=ParamType.STRING.getName(); - break; - case "integer": - filedType=ParamType.DOUBLE.getName(); - break; - case "double": - filedType=ParamType.DOUBLE.getName(); - break; - case "float": - filedType=ParamType.DOUBLE.getName(); - break; - case "int": - filedType=ParamType.DOUBLE.getName(); - break; - case "long": - filedType=ParamType.DOUBLE.getName(); - break; - case "bigdecimal": - filedType=ParamType.DOUBLE.getName(); - break; + switch (filedType) { + case "number": + filedType = ParamType.DOUBLE.getName(); + break; + case "string": + filedType = ParamType.STRING.getName(); + break; + case "boolean": + filedType = ParamType.BOOLEAN.getName(); + break; + case "select": + filedType = ParamType.STRING.getName(); + break; + case "text": + filedType = ParamType.STRING.getName(); + break; + case "employee": + filedType = ParamType.STRING.getName(); + break; + case "department": + filedType = ParamType.STRING.getName(); + break; + case "integer": + filedType = ParamType.DOUBLE.getName(); + break; + case "double": + filedType = ParamType.DOUBLE.getName(); + break; + case "float": + filedType = ParamType.DOUBLE.getName(); + break; + case "int": + filedType = ParamType.DOUBLE.getName(); + break; + case "long": + filedType = ParamType.DOUBLE.getName(); + break; + case "bigdecimal": + filedType = ParamType.DOUBLE.getName(); + break; - } - return filedType; - }else { - return getParamType(dataType.getClass().getName()); - } - } + } + return filedType; + } else { + return getParamType(dataType.getClass().getName()); + } + } - /** - * 从DataType中获取值 - * @param object - * @return - */ - public static List getParamContent(Object object){ - List dataList=new ArrayList<>(); - if(object!=null){ - if(object instanceof DataType){ - DataType data=(DataType)object; - dataList.add(getDataTypeContent(data)); - return dataList; - }else if(object instanceof List){ - List sourceDataList=(List)object; - for (Object paramObj:sourceDataList){ - if(paramObj instanceof DataType){ - DataType pramDataType=(DataType)paramObj; - dataList.add(pramDataType.getContent()); - }else{ - dataList.add(paramObj); - } - } - return dataList; - }else if(object instanceof Object[]){ - Object[] sourceDataList=(Object[]) object; - for (Object paramObj:sourceDataList){ - if(paramObj instanceof DataType){ - DataType pramDataType=(DataType)paramObj; - dataList.add(pramDataType.getContent()); - }else{ - dataList.add(paramObj); - } - } - return dataList; - }else { - dataList.add(object); - return dataList; - } - } - dataList.add(object); - return dataList; - } - public static Object getDataTypeContent(DataType dataType){ - String properType=""; - Object content=null; - if(StringUtils.isNotEmpty(dataType.getComponentKey())){ - properType=dataType.getComponentKey(); - }else if(StringUtils.isNotEmpty(dataType.getDataType())){ - properType=dataType.getDataType(); - } - switch (findType(properType)){ - case DataType.NUMBER: - case DataType.STRING: - case DataType.DATE: - content=dataType.getContent(); - break; - case DataType.OPTION: - content=dataType.getContent(); - break; - } - return content; - } + /** + * 从DataType中获取值 + * + * @param object + * @return + */ + public static List getParamContent(Object object) { + List dataList = new ArrayList<>(); + if (object != null) { + if (object instanceof DataType) { + DataType data = (DataType) object; + dataList.add(getDataTypeContent(data)); + return dataList; + } else if (object instanceof List) { + List sourceDataList = (List) object; + for (Object paramObj : sourceDataList) { + if (paramObj instanceof DataType) { + DataType pramDataType = (DataType) paramObj; + dataList.add(pramDataType.getContent()); + } else { + dataList.add(paramObj); + } + } + return dataList; + } else if (object instanceof Object[]) { + Object[] sourceDataList = (Object[]) object; + for (Object paramObj : sourceDataList) { + if (paramObj instanceof DataType) { + DataType pramDataType = (DataType) paramObj; + dataList.add(pramDataType.getContent()); + } else { + dataList.add(paramObj); + } + } + return dataList; + } else { + dataList.add(object); + return dataList; + } + } + dataList.add(object); + return dataList; + } - /** - * 获取JSON的content内容 - * @param object - * @return - */ - public static Object getParamContent(Object object,String funcType){ - Object result=null; - if(object instanceof DataType){ - DataType dataType=(DataType)object; - switch (dataType.getDataType()){ - case DataType.DATE: - if(dataType.getContent()==null||dataType.getContent().equals("")){ - return ""; - } - String format= DateUtil.buildFormat(dataType.getContent().toString()); - SimpleDateFormat formatter = new SimpleDateFormat(format); - try { - Date date=formatter.parse(dataType.getContent().toString()); - result=funcType.equalsIgnoreCase("string")?dataType.getContent():date.getTime(); - } catch (ParseException e) { - logger.error("err",e); - } - break; - case DataType.NUMBER: - if(null==dataType.getContent()||dataType.getContent().equals("")){ - return 0; - } - if(funcType.equalsIgnoreCase("string")){ - result=dataType.getContent(); + public static Object getDataTypeContent(DataType dataType) { + String properType = ""; + Object content = null; + if (StringUtils.isNotEmpty(dataType.getComponentKey())) { + properType = dataType.getComponentKey(); + } else if (StringUtils.isNotEmpty(dataType.getDataType())) { + properType = dataType.getDataType(); + } + switch (findType(properType)) { + case DataType.NUMBER: + case DataType.STRING: + case DataType.DATE: + content = dataType.getContent(); + break; + case DataType.OPTION: + content = dataType.getContent(); + break; + } + return content; + } - }else { - if(!RegularUtil.isNumber(dataType.getContent())){ - return 0; - } - if(dataType.getContent().toString().indexOf(".")>=0){ + /** + * 获取JSON的content内容 + * + * @param object + * @return + */ + public static Object getParamContent(Object object, String funcType) { + Object result = null; + if (object instanceof DataType) { + DataType dataType = (DataType) object; + switch (dataType.getDataType()) { + case DataType.DATE: + if (dataType.getContent() == null || dataType.getContent().equals("")) { + return ""; + } + String format = DateUtil.buildFormat(dataType.getContent().toString()); + SimpleDateFormat formatter = new SimpleDateFormat(format); + try { + Date date = formatter.parse(dataType.getContent().toString()); + result = funcType.equalsIgnoreCase("string") ? dataType.getContent() : date.getTime(); + } catch (ParseException e) { + logger.error("err", e); + } + break; + case DataType.NUMBER: + if (null == dataType.getContent() || dataType.getContent().equals("")) { + return 0; + } + if (funcType.equalsIgnoreCase("string")) { + result = dataType.getContent(); + + } else { + if (!RegularUtil.isNumber(dataType.getContent())) { + return 0; + } + if (dataType.getContent().toString().indexOf(".") >= 0) { // result=Double.parseDouble(dataType.getContent().toString()); - result=new BigDecimal(dataType.getContent().toString()); - }else if(dataType.getContent().toString().length()<=9){ - result=Integer.parseInt(dataType.getContent().toString()); - }else { - result=Long.parseLong(dataType.getContent().toString()); - } - } - break; - case DataType.STRING: - if(null==dataType.getContent()){ - result=""; - }else { - result=dataType.getContent().toString().trim(); - } + result = new BigDecimal(dataType.getContent().toString()); + } else if (dataType.getContent().toString().length() <= 9) { + result = Integer.parseInt(dataType.getContent().toString()); + } else { + result = Long.parseLong(dataType.getContent().toString()); + } + } + break; + case DataType.STRING: + if (null == dataType.getContent()) { + result = ""; + } else { + result = dataType.getContent().toString().trim(); + } - break; - case DataType.OPTION: - if(funcType.equalsIgnoreCase("string")){ - if(StringUtils.isNotEmpty(dataType.getOptionContent())){ - result=dataType.getOptionContent(); - }else { - result=""; - } + break; + case DataType.OPTION: + if (funcType.equalsIgnoreCase("string")) { + if (StringUtils.isNotEmpty(dataType.getOptionContent())) { + result = dataType.getOptionContent(); + } else { + result = ""; + } - }else { - result=dataType.getContent(); - } - break; - case DataType.BOOL: - result=dataType.getContent(); - break; - default: - if(dataType.getContent()==null){ - return ""; - } - result=dataType.getContent().toString(); - break; - } - }else if(object instanceof Date){ - Date date=(Date)object; - result=date.getTime(); - }else { - if(funcType.equalsIgnoreCase(DataType.BOOL)){ - result=object==null?false:object; - }else if(object instanceof Boolean){ - result=object; - }else if(object instanceof Integer || object instanceof Double || object instanceof Long || object instanceof BigDecimal){ - result=object; - }else { - result=object==null?"":object+""; - } + } else { + result = dataType.getContent(); + } + break; + case DataType.BOOL: + result = dataType.getContent(); + break; + default: + if (dataType.getContent() == null) { + return ""; + } + result = dataType.getContent().toString(); + break; + } + } else if (object instanceof Date) { + Date date = (Date) object; + result = date.getTime(); + } else { + if (funcType.equalsIgnoreCase(DataType.BOOL)) { + result = object == null ? false : object; + } else if (object instanceof Boolean) { + result = object; + } else if (object instanceof Integer || object instanceof Double || object instanceof Long || object instanceof BigDecimal) { + result = object; + } else { + result = object == null ? "" : object + ""; + } - } - return result; - } + } + return result; + } - /** - * 获取参数的数据类型,从DataType中获取或者直接获取 - * @param object - * @return - */ - public static String checkParamType(Object object){ - String typeName=null; - if(object instanceof DataType){ - DataType dataType=(DataType)object; - typeName= dataType.getDataType(); - }else { - typeName= ExcelParamUtil.getParamType(object.getClass().getName()); - } - return typeName; - } + /** + * 获取参数的数据类型,从DataType中获取或者直接获取 + * + * @param object + * @return + */ + public static String checkParamType(Object object) { + String typeName = null; + if (object instanceof DataType) { + DataType dataType = (DataType) object; + typeName = dataType.getDataType(); + } else { + typeName = ExcelParamUtil.getParamType(object.getClass().getName()); + } + return typeName; + } - /** - * 运行公式时的参数设置 - * @param formulavars - * @param expressMap - * @return - */ - public static Map buildParam(List formulavars, Map expressMap){ - checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 - for(FormulaVar formulaVar:formulavars){ - DataType dataType=new DataType(); - String key=null; - if(formulaVar.getFormId()!=null&&formulaVar.getFieldId()==null){ - key="form"+formulaVar.getFormId(); - }else if(formulaVar.getFieldId()!=null&&formulaVar.getOptionId()==null){ - String fieldId=formulaVar.getFieldId().toString(); - key="field"+fieldId; - dataType.setFieldId(fieldId); - }else if(formulaVar.getOptionId()!=null){ - key="option"+formulaVar.getOptionId(); - dataType.setContent(formulaVar.getOptionId()); - }else { - key="option"+formulaVar.getOptionId(); - } + /** + * 运行公式时的参数设置 + * + * @param formulavars + * @param expressMap + * @return + */ + public static Map buildParam(List formulavars, Map expressMap) { + checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 + for (FormulaVar formulaVar : formulavars) { + DataType dataType = new DataType(); + String key = null; + if (formulaVar.getFormId() != null && formulaVar.getFieldId() == null) { + key = "form" + formulaVar.getFormId(); + } else if (formulaVar.getFieldId() != null && formulaVar.getOptionId() == null) { + String fieldId = formulaVar.getFieldId().toString(); + key = "field" + fieldId; + dataType.setFieldId(fieldId); + } else if (formulaVar.getOptionId() != null) { + key = "option" + formulaVar.getOptionId(); + dataType.setContent(formulaVar.getOptionId()); + } else { + key = "option" + formulaVar.getOptionId(); + } - Arrays.sort(funcArray); - int sidx= Arrays.binarySearch(funcArray,key); - if( sidx>=0 ){ - throw new RuntimeException("变量名非法"); - } - if(formulaVar.getOptionId()!=null){ - dataType.setDataType(DataType.OPTION); - } - if(expressMap.containsKey(key)){ - String newKey= ExcelParamUtil.randomNumber()+"_"+key; - expressMap.put(newKey,dataType); - formulaVar.setKey(newKey); - }else { - expressMap.put(key,dataType); - } - } + Arrays.sort(funcArray); + int sidx = Arrays.binarySearch(funcArray, key); + if (sidx >= 0) { + throw new RuntimeException("变量名非法"); + } + if (formulaVar.getOptionId() != null) { + dataType.setDataType(DataType.OPTION); + } + if (expressMap.containsKey(key)) { + String newKey = ExcelParamUtil.randomNumber() + "_" + key; + expressMap.put(newKey, dataType); + formulaVar.setKey(newKey); + } else { + expressMap.put(key, dataType); + } + } - return expressMap; - } + return expressMap; + } - /*** - * 验证函数时构建参数设置参数值 - * 把FormulaVar类型的参数封装成DataType类型参数 - * @param formulavars 入参类型 - * @param expressMap 返回Map - * @return - */ - public static Map buildLocalParam(List formulavars, Map expressMap, SimpleEmployee employee){ + /*** + * 验证函数时构建参数设置参数值 + * 把FormulaVar类型的参数封装成DataType类型参数 + * @param formulavars 入参类型 + * @param expressMap 返回Map + * @return + */ + public static Map buildLocalParam(List formulavars, Map expressMap, DataCollectionEmployee employee) { - checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 - for(FormulaVar formulaVar:formulavars){ - DataType dataType=new DataType(); - dataType.setScore(0d); - dataType.setName((null==formulaVar.getName() || formulaVar.getName().equals(""))?formulaVar.getParent():formulaVar.getName()); - dataType.setFieldId(formulaVar.getFieldId()!=null?formulaVar.getFieldId().toString():null); - String key=null; - if(formulaVar.getModule()!=null&&!formulaVar.getModule().equals("")){ - try { - dataType.setModule(formulaVar.getModule()); - } catch (IllegalArgumentException e) { - logger.error("err",e); - dataType.setModule(formulaVar.getModule()); - } - } - dataType.setFormId(formulaVar.getFormId()!=null?Long.parseLong(formulaVar.getFormId()):null); - if(formulaVar.getName()!=null&&formulaVar.getName().equals("当前操作人")){ - key=formulaVar.getKey(); - formulaVar.setContent(employee.getUserId().toString()); - dataType.setContent(formulaVar.getContent()); - dataType.setText(formulaVar.getContent()); - dataType.setDataType(DataType.OPTION); - }else{ - if(formulaVar.getFormId()!=null&&formulaVar.getFieldId()==null&&formulaVar.getOptionId()==null){ - key="form"+formulaVar.getFormId().toString(); - ThreadLocalData threadLocalData=new ThreadLocalData(); - threadLocalData.setEmployee(employee); - threadLocalData.setModuleSource(ModuleSource.biaoge); - ParamContext.get().setValue(formulaVar.getFormId().toString(),threadLocalData); - }else if(formulaVar.getFieldId()!=null&&formulaVar.getOptionId()==null){ - String fieldId=formulaVar.getFieldId().toString(); - key="field"+fieldId; - dataType.setFieldId(fieldId); - }else if(formulaVar.getOptionId()!=null){ - key="option"+formulaVar.getOptionId().toString(); - dataType.setContent(formulaVar.getOptionId()); - dataType.setText(formulaVar.getName()); - dataType.setFormId(null); - }else { - key="option"+formulaVar.getOptionId().toString(); - } - } + checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 + for (FormulaVar formulaVar : formulavars) { + DataType dataType = new DataType(); + dataType.setScore(0d); + dataType.setName((null == formulaVar.getName() || formulaVar.getName().equals("")) ? formulaVar.getParent() : formulaVar.getName()); + dataType.setFieldId(formulaVar.getFieldId() != null ? formulaVar.getFieldId().toString() : null); + String key = null; + if (formulaVar.getModule() != null && !formulaVar.getModule().equals("")) { + try { + dataType.setModule(formulaVar.getModule()); + } catch (IllegalArgumentException e) { + logger.error("err", e); + dataType.setModule(formulaVar.getModule()); + } + } + dataType.setFormId(formulaVar.getFormId() != null ? Long.parseLong(formulaVar.getFormId()) : null); + if (formulaVar.getName() != null && formulaVar.getName().equals("当前操作人")) { + key = formulaVar.getKey(); + formulaVar.setContent(employee.getUserId().toString()); + dataType.setContent(formulaVar.getContent()); + dataType.setText(formulaVar.getContent()); + dataType.setDataType(DataType.OPTION); + } else { + if (formulaVar.getFormId() != null && formulaVar.getFieldId() == null && formulaVar.getOptionId() == null) { + key = "form" + formulaVar.getFormId().toString(); + ThreadLocalData threadLocalData = new ThreadLocalData(); + threadLocalData.setEmployee(employee); + threadLocalData.setModuleSource(ModuleSource.biaoge); + ParamContext.get().setValue(formulaVar.getFormId().toString(), threadLocalData); + } else if (formulaVar.getFieldId() != null && formulaVar.getOptionId() == null) { + String fieldId = formulaVar.getFieldId().toString(); + key = "field" + fieldId; + dataType.setFieldId(fieldId); + } else if (formulaVar.getOptionId() != null) { + key = "option" + formulaVar.getOptionId().toString(); + dataType.setContent(formulaVar.getOptionId()); + dataType.setText(formulaVar.getName()); + dataType.setFormId(null); + } else { + key = "option" + formulaVar.getOptionId().toString(); + } + } - Arrays.sort(funcArray); - int sidx= Arrays.binarySearch(funcArray,key); - if( sidx>=0 ){ - throw new RuntimeException("变量名非法"); - } - if(formulaVar.getOptionId()!=null){ - dataType.setDataType(DataType.OPTION); - } + Arrays.sort(funcArray); + int sidx = Arrays.binarySearch(funcArray, key); + if (sidx >= 0) { + throw new RuntimeException("变量名非法"); + } + if (formulaVar.getOptionId() != null) { + dataType.setDataType(DataType.OPTION); + } - if(StringUtils.isEmpty(dataType.getDataType())){ - String typeKey=null; - if(StringUtils.isNotEmpty(formulaVar.getFieldType())){ - typeKey=formulaVar.getFieldType(); - }else if(StringUtils.isNotEmpty(formulaVar.getType())){ - typeKey=formulaVar.getType(); - }else if(StringUtils.isNotEmpty(formulaVar.getFieldType())){ - typeKey=formulaVar.getFieldType(); - } - dataType.setDataType(ExcelParamUtil.findTestDataType(typeKey)); - } - if(StringUtils.isEmpty(dataType.getComponentKey())){ - dataType.setComponentKey(formulaVar.getComponentKey()); - } - if(expressMap.containsKey(key)){ - String newKey=key+ ExcelParamUtil.randomNumber(); - formulaVar.setKey(newKey); - dataType.setAggCndKey(key); - expressMap.put(newKey,dataType); - }else { - expressMap.put(key,dataType); - } - } + if (StringUtils.isEmpty(dataType.getDataType())) { + String typeKey = null; + if (StringUtils.isNotEmpty(formulaVar.getFieldType())) { + typeKey = formulaVar.getFieldType(); + } else if (StringUtils.isNotEmpty(formulaVar.getType())) { + typeKey = formulaVar.getType(); + } else if (StringUtils.isNotEmpty(formulaVar.getFieldType())) { + typeKey = formulaVar.getFieldType(); + } + dataType.setDataType(ExcelParamUtil.findTestDataType(typeKey)); + } + if (StringUtils.isEmpty(dataType.getComponentKey())) { + dataType.setComponentKey(formulaVar.getComponentKey()); + } + if (expressMap.containsKey(key)) { + String newKey = key + ExcelParamUtil.randomNumber(); + formulaVar.setKey(newKey); + dataType.setAggCndKey(key); + expressMap.put(newKey, dataType); + } else { + expressMap.put(key, dataType); + } + } - return expressMap; - } + return expressMap; + } - /** - * 格式化变量为数字 - * @param - */ - public static Object convertParamValToNumber(Object op1){ - BigDecimal oop1=new BigDecimal(ExcelParamUtil.getParamContent(op1,"string").toString()); - return oop1; - } - /** - * 格式化参数 - * @param op1 - * @param op2 - * @return - */ - public static List converParamValue(Object op1,Object op2){ - List list=new ArrayList<>(); + /** + * 格式化变量为数字 + * + * @param + */ + public static Object convertParamValToNumber(Object op1) { + BigDecimal oop1 = new BigDecimal(ExcelParamUtil.getParamContent(op1, "string").toString()); + return oop1; + } + + /** + * 格式化参数 + * + * @param op1 + * @param op2 + * @return + */ + public static List converParamValue(Object op1, Object op2) { + List list = new ArrayList<>(); - if(op1 instanceof DataType){ - list.add(op1); - DataType op1Data=(DataType)op1; - if(!(op2 instanceof DataType)&&op1Data.getDataType().toLowerCase().equals("date")){ - DataType dataType=new DataType(); - dataType.setDataType(DataType.STRING); - dataType.setContent(op2); - list.add(dataType); - }else if(op2 instanceof DataType&&op1Data.getDataType().toLowerCase().equals("date")){ - DataType dataType=(DataType)op2; - dataType.setDataType(DataType.STRING); - list.add(dataType); - }else{ - list.add(op2); - } + if (op1 instanceof DataType) { + list.add(op1); + DataType op1Data = (DataType) op1; + if (!(op2 instanceof DataType) && op1Data.getDataType().toLowerCase().equals("date")) { + DataType dataType = new DataType(); + dataType.setDataType(DataType.STRING); + dataType.setContent(op2); + list.add(dataType); + } else if (op2 instanceof DataType && op1Data.getDataType().toLowerCase().equals("date")) { + DataType dataType = (DataType) op2; + dataType.setDataType(DataType.STRING); + list.add(dataType); + } else { + list.add(op2); + } - }else if(op2 instanceof DataType){ - DataType op2Data=(DataType)op2; - if(!(op1 instanceof DataType)&&op2Data.getDataType().toLowerCase().equals("date")){ - DataType dataType=new DataType(); - dataType.setDataType(DataType.STRING); - dataType.setContent(op1); - list.add(dataType); - }else if(op1 instanceof DataType&&op2Data.getDataType().toLowerCase().equals("date")){ - DataType dataType=(DataType)op1; - dataType.setDataType(DataType.STRING); - list.add(dataType); - }else { - list.add(op1); - } - list.add(op2); - }else { - list.add(op1); - list.add(op2); - } + } else if (op2 instanceof DataType) { + DataType op2Data = (DataType) op2; + if (!(op1 instanceof DataType) && op2Data.getDataType().toLowerCase().equals("date")) { + DataType dataType = new DataType(); + dataType.setDataType(DataType.STRING); + dataType.setContent(op1); + list.add(dataType); + } else if (op1 instanceof DataType && op2Data.getDataType().toLowerCase().equals("date")) { + DataType dataType = (DataType) op1; + dataType.setDataType(DataType.STRING); + list.add(dataType); + } else { + list.add(op1); + } + list.add(op2); + } else { + list.add(op1); + list.add(op2); + } - return list; - } + return list; + } - /** - * 统一处理参数类型不一致问题 - * @param typeName - * @return - */ - public static String checkParamType(String typeName){ - typeName=typeName.toLowerCase(); - switch (typeName){ - case "option": - typeName=ParamType.STRING.getName(); - break; - case "date": - typeName=DataType.STRING; - break; - case "number": - typeName=DataType.NUMBER; - break; - case "string": - typeName=ParamType.STRING.getName(); - break; - case "boolean": - typeName=ParamType.BOOLEAN.getName(); - break; - case "select": - typeName=ParamType.STRING.getName(); - break; - case "text": - typeName=ParamType.STRING.getName(); - break; - case "employee": - typeName=ParamType.STRING.getName(); - break; - case "department": - typeName=ParamType.STRING.getName(); - break; - case "integer": - typeName=DataType.NUMBER; - break; - case "double": - typeName=DataType.NUMBER; - break; - case "float": - typeName=DataType.NUMBER; - break; - case "int": - typeName=DataType.NUMBER; - break; - case "long": - typeName=DataType.NUMBER; - break; - case "bigdecimal": - typeName=DataType.NUMBER; - break; + /** + * 统一处理参数类型不一致问题 + * + * @param typeName + * @return + */ + public static String checkParamType(String typeName) { + typeName = typeName.toLowerCase(); + switch (typeName) { + case "option": + typeName = ParamType.STRING.getName(); + break; + case "date": + typeName = DataType.STRING; + break; + case "number": + typeName = DataType.NUMBER; + break; + case "string": + typeName = ParamType.STRING.getName(); + break; + case "boolean": + typeName = ParamType.BOOLEAN.getName(); + break; + case "select": + typeName = ParamType.STRING.getName(); + break; + case "text": + typeName = ParamType.STRING.getName(); + break; + case "employee": + typeName = ParamType.STRING.getName(); + break; + case "department": + typeName = ParamType.STRING.getName(); + break; + case "integer": + typeName = DataType.NUMBER; + break; + case "double": + typeName = DataType.NUMBER; + break; + case "float": + typeName = DataType.NUMBER; + break; + case "int": + typeName = DataType.NUMBER; + break; + case "long": + typeName = DataType.NUMBER; + break; + case "bigdecimal": + typeName = DataType.NUMBER; + break; - } - return typeName; - } - public static String getKeyString(Object obj){ - if(obj instanceof JSONObject){ - JSONObject jsonObject=(JSONObject)obj; - return jsonObject.getString("key"); - }else { - return obj.toString(); - } - } - /** - * 替换变量的错误位置 - * @param startIdx - * @param endIdx - * @param excuteStr - */ - public static Map replaceErrorPlace(int startIdx,int endIdx,String errorFunc,String excuteStr,Map paramMap){ - Map kvMap=loopMap(paramMap); - Map replaceMap=new HashMap<>(); - String excuteLeftStr=excuteStr.substring(0,startIdx); - if(!excuteLeftStr.equals("")){ - Iterator wordItaretor=kvMap.keySet().iterator(); - while (wordItaretor.hasNext()){ - String key=wordItaretor.next(); - String name=kvMap.get(key); - if(excuteLeftStr.indexOf(key)>=0){ - String newStr=excuteLeftStr.replaceAll(key,name); - startIdx=startIdx-(excuteLeftStr.length()-newStr.length()); - } - } + } + return typeName; + } - } - if(kvMap.get(errorFunc)!=null){ - endIdx=startIdx+kvMap.get(errorFunc).length()-1; - }else { - endIdx=startIdx+errorFunc.length()-1; - } + public static String getKeyString(Object obj) { + if (obj instanceof JSONObject) { + JSONObject jsonObject = (JSONObject) obj; + return jsonObject.getString("key"); + } else { + return obj.toString(); + } + } - replaceMap.put("startIdx",startIdx); - replaceMap.put("endIdx",endIdx); - return replaceMap; - } + /** + * 替换变量的错误位置 + * + * @param startIdx + * @param endIdx + * @param excuteStr + */ + public static Map replaceErrorPlace(int startIdx, int endIdx, String errorFunc, String excuteStr, Map paramMap) { + Map kvMap = loopMap(paramMap); + Map replaceMap = new HashMap<>(); + String excuteLeftStr = excuteStr.substring(0, startIdx); + if (!excuteLeftStr.equals("")) { + Iterator wordItaretor = kvMap.keySet().iterator(); + while (wordItaretor.hasNext()) { + String key = wordItaretor.next(); + String name = kvMap.get(key); + if (excuteLeftStr.indexOf(key) >= 0) { + String newStr = excuteLeftStr.replaceAll(key, name); + startIdx = startIdx - (excuteLeftStr.length() - newStr.length()); + } + } - public static Map loopMap(Map paramMap){ - Map kvMap=new HashMap<>(); + } + if (kvMap.get(errorFunc) != null) { + endIdx = startIdx + kvMap.get(errorFunc).length() - 1; + } else { + endIdx = startIdx + errorFunc.length() - 1; + } - Set set=paramMap.keySet(); - Iterator iterator=set.iterator(); - while (iterator.hasNext()){ - String key=iterator.next(); - DataType dataType=(DataType)paramMap.get(key); - kvMap.put(key,dataType.getName()); - } - return kvMap; - } + replaceMap.put("startIdx", startIdx); + replaceMap.put("endIdx", endIdx); + return replaceMap; + } - public static boolean isNumber(Object object){ - String type= ExcelParamUtil.getParamType(object.getClass().getName()); - Arrays.sort(numberTypes); - if(Arrays.binarySearch(numberTypes,type)>=0){ - return true; - } - return false; - } + public static Map loopMap(Map paramMap) { + Map kvMap = new HashMap<>(); - public static String randomNumber(){ - int max=1000,min=1; - long randomNum = System.currentTimeMillis(); - int ran3 = (int) (randomNum%(max-min)+min); - return ran3+""; - } + Set set = paramMap.keySet(); + Iterator iterator = set.iterator(); + while (iterator.hasNext()) { + String key = iterator.next(); + DataType dataType = (DataType) paramMap.get(key); + kvMap.put(key, dataType.getName()); + } + return kvMap; + } - /** - * 长度不够则添加元素的字符串拼接 - * @param chars 将要拼接的字符 - * @param sourceStr 源字符 - * @param targetLength 目标字符长度 - * @param place 位置在左还是右 - * @return - */ - public static String appendString(String chars, String sourceStr, int targetLength, String place){ - StringBuilder builder = new StringBuilder(sourceStr); + public static boolean isNumber(Object object) { + String type = ExcelParamUtil.getParamType(object.getClass().getName()); + Arrays.sort(numberTypes); + if (Arrays.binarySearch(numberTypes, type) >= 0) { + return true; + } + return false; + } - while (true){ - //长度相等,不做处理 - if(builder.length() == targetLength){ - break; - }else if(builder.length() > targetLength){ - //源字符长度大于目标长度则截取 - int length = builder.length() - targetLength; + public static String randomNumber() { + int max = 1000, min = 1; + long randomNum = System.currentTimeMillis(); + int ran3 = (int) (randomNum % (max - min) + min); + return ran3 + ""; + } - if("LEFT".equals(place)){ - String tempStr = builder.substring(length, builder.length()); - builder.replace(0, builder.length(), tempStr); - }else { - String tempStr = builder.substring(0, targetLength); - builder.replace(0, builder.length(), tempStr); - } - break; - } + /** + * 长度不够则添加元素的字符串拼接 + * + * @param chars 将要拼接的字符 + * @param sourceStr 源字符 + * @param targetLength 目标字符长度 + * @param place 位置在左还是右 + * @return + */ + public static String appendString(String chars, String sourceStr, int targetLength, String place) { + StringBuilder builder = new StringBuilder(sourceStr); - //源字符长度小于目标长度则不断拼接 - if("LEFT".equals(place)){ - builder.insert(0, chars.replaceAll(",","")); - }else { - builder.append(chars.replaceAll(",","")); - } - } - return builder.toString(); - } + while (true) { + //长度相等,不做处理 + if (builder.length() == targetLength) { + break; + } else if (builder.length() > targetLength) { + //源字符长度大于目标长度则截取 + int length = builder.length() - targetLength; - public static FormulaVar getFixFieldVar(List list, String key){ - FormulaVar formulaVar=new FormulaVar(); - for (FixedField fixedField:list){ - if(fixedField.getKey().equals(key)){ - Component component=(Component)fixedField.getMatchs().get(0); - ComponentType componentType=component.getComponentKey(); - if(componentType.equals(ComponentType.Text)){ + if ("LEFT".equals(place)) { + String tempStr = builder.substring(length, builder.length()); + builder.replace(0, builder.length(), tempStr); + } else { + String tempStr = builder.substring(0, targetLength); + builder.replace(0, builder.length(), tempStr); + } + break; + } - } - } - } - return formulaVar; - } + //源字符长度小于目标长度则不断拼接 + if ("LEFT".equals(place)) { + builder.insert(0, chars.replaceAll(",", "")); + } else { + builder.append(chars.replaceAll(",", "")); + } + } + return builder.toString(); + } - public static String findAggCndStr(String sql,Map paramMap){ - String partternStr="(COUNT|SUM|MIN|MAX|AVG|count|sum|min|max)+\\(+(.)+\\)+"; - Pattern pattern = Pattern.compile(partternStr); - Matcher matcher = pattern.matcher(sql ); - int i=0; - while (matcher.find()) { - String cnd = matcher.group(); - String[] cndArray=cnd.split(",",2); - if(cndArray.length==2){ - String realCnd=cndArray[1].substring(0,cndArray[1].length()-1); - String key="cnd"+i+Math.abs(realCnd.hashCode())+""; - sql=sql.replace(realCnd,key); - realCnd=realCnd.replace("{",""); - realCnd=realCnd.replace("}",""); - paramMap.put(key,realCnd); - } - i++; - } - return sql; - } + public static FormulaVar getFixFieldVar(List list, String key) { + FormulaVar formulaVar = new FormulaVar(); + for (FixedField fixedField : list) { + if (fixedField.getKey().equals(key)) { + Component component = (Component) fixedField.getMatchs().get(0); + ComponentType componentType = component.getComponentKey(); + if (componentType.equals(ComponentType.Text)) { + + } + } + } + return formulaVar; + } + + public static String findAggCndStr(String sql, Map paramMap) { + String partternStr = "(COUNT|SUM|MIN|MAX|AVG|count|sum|min|max)+\\(+(.)+\\)+"; + Pattern pattern = Pattern.compile(partternStr); + Matcher matcher = pattern.matcher(sql); + int i = 0; + while (matcher.find()) { + String cnd = matcher.group(); + String[] cndArray = cnd.split(",", 2); + if (cndArray.length == 2) { + String realCnd = cndArray[1].substring(0, cndArray[1].length() - 1); + String key = "cnd" + i + Math.abs(realCnd.hashCode()) + ""; + sql = sql.replace(realCnd, key); + realCnd = realCnd.replace("{", ""); + realCnd = realCnd.replace("}", ""); + paramMap.put(key, realCnd); + } + i++; + } + return sql; + } - /** - * 执行语句的断句算法,通过计算小括号的数量进行断句断点的确定,然后拆分语句 - * @param sql - */ - public static String spliteSql(String sql,Map paramMap){ - List strList=new ArrayList<>(); - int pointIdx=0; - char[] charArray=sql.toCharArray(); - int leftBrakets=0; - char brackeLeft='('; - char brackeRight=')'; - boolean find=false; - for (int i=0;i=0?cndArray[0].length():0); - replaceSql+=cndArray[0]+findAggCndStr(realCnd,paramMap); - } + /** + * 执行语句的断句算法,通过计算小括号的数量进行断句断点的确定,然后拆分语句 + * + * @param sql + */ + public static String spliteSql(String sql, Map paramMap) { + List strList = new ArrayList<>(); + int pointIdx = 0; + char[] charArray = sql.toCharArray(); + int leftBrakets = 0; + char brackeLeft = '('; + char brackeRight = ')'; + boolean find = false; + for (int i = 0; i < charArray.length; i++) { + char charstr = charArray[i]; + if (charstr == brackeLeft) { + find = true; + leftBrakets++; + } + if (leftBrakets != 0 && charstr == brackeRight) { + leftBrakets--; + } + if (find && leftBrakets == 0) { + pointIdx = i; + break; + } + } + pointIdx += 1; + if (pointIdx == sql.length()) { + strList.add(sql.substring(0, pointIdx)); + } else { + strList.add(sql.substring(0, pointIdx)); + strList.add(sql.substring(pointIdx)); + } + String replaceSql = ""; + for (String s : strList) { + String[] cndArray = s.split("(COUNT|SUM|MIN|MAX|count|sum|min|max)"); + if (cndArray.length == 2) { + if (cndArray[0].equals("")) { + replaceSql += findAggCndStr(s, paramMap); + } else { + String realCnd = s.substring(cndArray[0].length() - 1 >= 0 ? cndArray[0].length() : 0); + replaceSql += cndArray[0] + findAggCndStr(realCnd, paramMap); + } - }else { - replaceSql+=findAggCndStr(s,paramMap); - } + } else { + replaceSql += findAggCndStr(s, paramMap); + } - } - sql=replaceSql; - return sql; - } + } + sql = replaceSql; + return sql; + } } diff --git a/src/com/engine/salary/formlua/util/ExcelStandardUtil.java b/src/com/engine/salary/formlua/util/ExcelStandardUtil.java index 45489e83d..ba3cb6da8 100644 --- a/src/com/engine/salary/formlua/util/ExcelStandardUtil.java +++ b/src/com/engine/salary/formlua/util/ExcelStandardUtil.java @@ -8,7 +8,7 @@ import com.weaver.excel.formula.api.entity.FormulaVar; import com.weaver.excel.formula.entity.parameter.DataType; import com.weaver.excel.formula.entity.parameter.ParamFactory; import com.weaver.excel.formula.entity.standard.front.CurrentVar; -import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.domain.user.DataCollectionEmployee; import com.weaver.teams.util.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,7 +22,7 @@ import java.util.regex.Pattern; public class ExcelStandardUtil { protected static final Logger logger = LoggerFactory.getLogger(ExcelStandardUtil.class); - public static Map replaceAllParam(String sql, List localVars,List dataVars, SimpleEmployee employee){ + public static Map replaceAllParam(String sql, List localVars,List dataVars, DataCollectionEmployee employee){ if(null!=localVars){ for (FormulaVar formulaVar:localVars){ if(StringUtils.isNotEmpty(formulaVar.getDataId()) && StringUtils.isEmpty(formulaVar.getFormId())){ @@ -131,7 +131,7 @@ public class ExcelStandardUtil { return dataMap; } - public static Map replaceAllParamForTest(String sql, List formulaVars, SimpleEmployee employee){ + public static Map replaceAllParamForTest(String sql, List formulaVars, DataCollectionEmployee employee){ if(null==formulaVars){ return null; } @@ -234,7 +234,7 @@ public class ExcelStandardUtil { return dataMap; } - private static DataType transFormulaVarToDataTypeTesy(FormulaVar formulaVar,SimpleEmployee employee){ + private static DataType transFormulaVarToDataTypeTesy(FormulaVar formulaVar,DataCollectionEmployee employee){ DataType dataType =new DataType(); ParamFactory paramFactory=ParamFactory.getInstance(); dataType.setContent(formulaVar.getContent()); @@ -330,7 +330,7 @@ public class ExcelStandardUtil { return dataType; } - private static DataType transFormulaVarToDataType(FormulaVar localFormulaVar,List dataVars,SimpleEmployee employee){ + private static DataType transFormulaVarToDataType(FormulaVar localFormulaVar,List dataVars,DataCollectionEmployee employee){ DataType dataType =new DataType(); if(localFormulaVar == null){ return null; diff --git a/src/com/engine/salary/formlua/util/TestUtil.java b/src/com/engine/salary/formlua/util/TestUtil.java index 1fcab01eb..3e8e39ed2 100644 --- a/src/com/engine/salary/formlua/util/TestUtil.java +++ b/src/com/engine/salary/formlua/util/TestUtil.java @@ -30,7 +30,7 @@ import com.weaver.excel.formula.func.math.MathFuncsServiceImpl; import com.weaver.excel.formula.func.string.StringFormulaService; import com.weaver.excel.formula.func.string.StringFormulaServiceImpl; import com.weaver.excel.formula.util.standard.ExcelDataType; -import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.domain.user.DataCollectionEmployee; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -150,7 +150,7 @@ public class TestUtil { filterDatas.add(formulaFilterData2); String dataId="60000000000000001"; String[] cols=new String[]{"10_taxRate"}; - SimpleEmployee employee=new SimpleEmployee(); + DataCollectionEmployee employee=new DataCollectionEmployee(); employee.setTenantKey("tm7tozevws"); employee.setUserId(5113514575963198048L); employee.setId(3573514574891514361L); diff --git a/src/com/engine/salary/formlua/util/standard/ExcelTransUtil.java b/src/com/engine/salary/formlua/util/standard/ExcelTransUtil.java deleted file mode 100644 index fb3d4422a..000000000 --- a/src/com/engine/salary/formlua/util/standard/ExcelTransUtil.java +++ /dev/null @@ -1,320 +0,0 @@ -package com.engine.salary.formlua.util.standard; - -import com.alibaba.fastjson.JSON; -import com.weaver.common.form.FreeFormAssistService; -import com.weaver.common.form.FreeFormService; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.common.form.data.detail.FormDataDetail; -import com.weaver.common.form.data.option.FormDataOption; -import com.weaver.common.form.metadata.ModuleSource; -import com.weaver.common.form.metadata.field.FormField; -import com.weaver.excel.formula.api.entity.DataOption; -import com.weaver.excel.formula.api.entity.FormulaVar; -import com.weaver.excel.formula.entity.standard.execute.FixFieldType; -import com.weaver.excel.formula.util.ExcelParamUtil; -import com.weaver.teams.domain.user.SimpleEmployee; -import com.weaver.teams.util.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 函数标准数据转换工具 - */ -@Component -public class ExcelTransUtil { - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - protected FreeFormAssistService freeFormAssistService; - /** - * 固定字段数据转换方法 - * @param sourceId 来源ID或表单ID - * @param fixFieldKey 固定字段属性ID - * @param name 固定字段名称,记录日志使用 - * @param content 文本、数字的值 - * @param dataOptions 选项型数据的值 - * @param fixFieldType 固定字段类型,使用函数提供的FixFieldType标记 - * @return - */ - public static FormulaVar buildFixField(Long sourceId, String fixFieldKey,String name, String content, List dataOptions, FixFieldType fixFieldType){ - FormulaVar formulaVar=new FormulaVar(); - formulaVar.setFormId(sourceId+""); - formulaVar.setDataType(ExcelParamUtil.findType(fixFieldType.toString())); - formulaVar.setContent(content); - formulaVar.setFixName(name); - formulaVar.setFixFieldKey(fixFieldKey); - formulaVar.setId(fixFieldKey); - formulaVar.setKey(fixFieldKey); - formulaVar.setFieldId(fixFieldKey); - if(fixFieldType==FixFieldType.Select || fixFieldType==FixFieldType.Department || fixFieldType == FixFieldType.Employee || fixFieldType == FixFieldType.Relate){ - formulaVar.setDataOptionList(dataOptions); - String options=""; - for(DataOption dataOption:dataOptions){ - options+=dataOption.getOptionId(); - } - formulaVar.setContent(options); - formulaVar.setComponentKey(ComponentType.Employee.toString()); - } - return formulaVar; - } - - /** - * 构建字段数据,文本、数字、日期使用此方法 - * @param sourceId - * @param fieldId - * @param excelDataType - * @param module - * @param value - * @return - */ - public static FormulaVar buildTxtNumDateField(Long sourceId,Long fieldId,ExcelDataType excelDataType,String module,Object value){ - return commonBuildField(sourceId,fieldId,excelDataType,module,null,value); - } - - /** - * 构建选项型或数据源型使用此方法 - * @param sourceId - * @param fieldId - * @param excelDataType - * @param module - * @param dataOptions - * @return - */ - public static FormulaVar buildOptionField(Long sourceId,Long fieldId,ExcelDataType excelDataType,String module,List dataOptions){ - return commonBuildField(sourceId,fieldId,excelDataType,module,dataOptions,null); - } - private static FormulaVar commonBuildField(Long sourceId,Long fieldId,ExcelDataType excelDataType,String module,List dataOptions,Object value){ - FormulaVar formulaVar =new FormulaVar(); - formulaVar.setContent(value+""); - formulaVar.setFieldId(fieldId+""); - formulaVar.setFormId(sourceId+""); - formulaVar.setDataType(excelDataType.toString()); - formulaVar.setModule(module); - if(dataOptions!=null && dataOptions.size()>0){ - formulaVar.setDataOptionList(dataOptions); - String optionStr=""; - for(DataOption dataOption:dataOptions){ - optionStr+=dataOption.getOptionId(); - } - formulaVar.setContent(optionStr); - } - return formulaVar; - } - - /** - * 转换表单字段数据为函数标准参数对象 - * @param formDataDetailList 表单字段数据列表 - * @param sourceId 表单ID或者数据源ID - * @param module 所属模块 - * @return - */ - public List transFieldForForm(List formDataDetailList,Long layoutId, Long sourceId, ModuleSource module,SimpleEmployee simpleEmployee){ - List formulaVarList=new ArrayList<>(); - if(formDataDetailList!=null && formDataDetailList.size()>0){ - - Map fieldMap = bulidFreeFormService(module).getFieldMapByFormId(sourceId, simpleEmployee); - FormulaVar formulaVar =null; - Map replaceMap=new HashMap<>(); - for (FormDataDetail formDataDetail:formDataDetailList){ - if(formDataDetail.getFormField()==null){ - throw new RuntimeException("函数数据转换失败,找不到表单字段数据"); - } - FormField newFormField=fieldMap.get(formDataDetail.getFormField().getId()); - if(newFormField!=null){ - formDataDetail.setFormField(newFormField); - } - Double score=getDetailScoreForForm(formDataDetail,module,layoutId,simpleEmployee); -// Double score=getDetailScore(formDataDetail,module,layoutId,simpleEmployee); - formulaVar=new FormulaVar(); - if(score!=null){ - formulaVar.setScore(score); - } - FormField formField=formDataDetail.getFormField(); - formulaVar.setContent(formDataDetail.getContent()); - if(formDataDetail.getDataText()!=null && StringUtils.isNotEmpty(formDataDetail.getDataText().getContent())){ - if(StringUtils.isNotEmpty(formDataDetail.getDataText().getContent())){ - formulaVar.setContent(formDataDetail.getDataText().getContent()); - } - } - formulaVar.setFieldId(formField.getId()!=null?formField.getId()+"":null); - formulaVar.setFormId(formField.getFormId()!=null?formField.getFormId()+"":null); - formulaVar.setComponentKey(formField.getComponentKey()); - if(formField.getSubForm()!=null){ - formulaVar.setsFormId(formField.getSubForm().getId()+""); - } - formulaVar.setDataType(ExcelParamUtil.findType(formField.getComponentKey())); - formulaVar.setModule(module.toString()); - if(formulaVar.getFormId()==null){ - formulaVar.setFormId(sourceId+""); - } - if(formDataDetail.getDataOptions()!=null && formDataDetail.getDataOptions().size()>0){ - List formDataOptions=formDataDetail.getDataOptions(); - List excelOptionList=new ArrayList<>(); - String optionstr=""; - String optionContent=""; - for(FormDataOption formDataOption:formDataOptions){ - DataOption dataOption=new DataOption(); - dataOption.setOptionId(formDataOption.getOptionId()+""); - dataOption.setOptionContent(formDataOption.getContent()); - excelOptionList.add(dataOption); - optionstr+=formDataOption.getOptionId(); - optionContent+=formDataOption.getContent(); - } - if(StringUtils.isNotEmpty(optionstr)){ - formulaVar.setContent(optionstr); - } - formulaVar.setOptionContent(optionContent); - formulaVar.setDataOptionList(excelOptionList); - } - //明细替换处理 - try { - if(!replaceMap.containsKey(formDataDetail.getFormField().getId())){ - replaceMap.put(formDataDetail.getFormField().getId(),formDataDetail); - }else{ - FormDataDetail lastFormDataDetail=replaceMap.get(formDataDetail.getFormField().getId()); - if(formDataDetail.getDataIndex()!=null && lastFormDataDetail.getDataIndex()!=null){ - if(formDataDetail.getDataIndex().longValue() loopData.getFieldId().equalsIgnoreCase(formDataDetail.getFormField().getId().toString())); - logger.info("替换了:"+JSON.toJSONString(formDataDetail)); - }else{ - continue; - } - } - } - } catch (Exception e) { - logger.error("err",e); - } - - formulaVarList.add(formulaVar); - } - } - return formulaVarList; - } - - /** - * 转换表单字段数据为函数标准参数对象 - * @param formDataDetailList 表单字段数据列表 - * @param sourceId 表单ID或者数据源ID - * @param module 所属模块 - * @return - */ - public List transField(List formDataDetailList,Long layoutId, Long sourceId, ModuleSource module,SimpleEmployee simpleEmployee){ - List formulaVarList=new ArrayList<>(); - if(formDataDetailList!=null && formDataDetailList.size()>0){ - - Map fieldMap = bulidFreeFormService(module).getFieldMapByFormId(sourceId, simpleEmployee); - - FormulaVar formulaVar =null; - for (FormDataDetail formDataDetail:formDataDetailList){ - if(formDataDetail.getFormField()==null){ - throw new RuntimeException("函数数据转换失败,找不到表单字段数据"); - } - FormField newFormField=fieldMap.get(formDataDetail.getFormField().getId()); - if(newFormField!=null){ - formDataDetail.setFormField(newFormField); - } - Double score=getDetailScore(formDataDetail,module,layoutId,simpleEmployee); - - formulaVar=new FormulaVar(); - if(score!=null){ - formulaVar.setScore(score); - } - FormField formField=formDataDetail.getFormField(); - formulaVar.setContent(formDataDetail.getContent()); - if(formDataDetail.getDataText()!=null && StringUtils.isNotEmpty(formDataDetail.getDataText().getContent())){ - if(StringUtils.isNotEmpty(formDataDetail.getDataText().getContent())){ - formulaVar.setContent(formDataDetail.getDataText().getContent()); - } - } - formulaVar.setFieldId(formField.getId()!=null?formField.getId()+"":null); - formulaVar.setFormId(formField.getFormId()!=null?formField.getFormId()+"":null); - formulaVar.setComponentKey(formField.getComponentKey()); - if(formField.getSubForm()!=null){ - formulaVar.setsFormId(formField.getSubForm().getId()+""); - } - formulaVar.setDataType(ExcelParamUtil.findType(formField.getComponentKey())); - formulaVar.setModule(module.toString()); - if(formulaVar.getFormId()==null){ - formulaVar.setFormId(sourceId+""); - } - if(formDataDetail.getDataOptions()!=null && formDataDetail.getDataOptions().size()>0){ - List formDataOptions=formDataDetail.getDataOptions(); - List excelOptionList=new ArrayList<>(); - String optionstr=""; - String optionContent=""; - for(FormDataOption formDataOption:formDataOptions){ - DataOption dataOption=new DataOption(); - dataOption.setOptionId(formDataOption.getOptionId()+""); - dataOption.setOptionContent(formDataOption.getContent()); - excelOptionList.add(dataOption); - optionstr+=formDataOption.getOptionId(); - optionContent+=formDataOption.getContent(); - } - if(StringUtils.isNotEmpty(optionstr)){ - formulaVar.setContent(optionstr); - } - formulaVar.setOptionContent(optionContent); - formulaVar.setDataOptionList(excelOptionList); - } - - formulaVarList.add(formulaVar); - } - } - return formulaVarList; - } - - public Double getDetailScore(FormDataDetail dataDetail, ModuleSource module, Long layoutId, SimpleEmployee employee) { - Double score = null; - FormField formField=dataDetail.getFormField(); -// logger.info("获取分数的参数:"+(JSON.toJSONString(dataDetail))); -// logger.info("获取分数的布局ID:"+(layoutId)); - if( ComponentType.RadioBox.toString().equals(formField.getComponentKey()) - || ComponentType.CheckBox.toString().equals(formField.getComponentKey()) - || ComponentType.Select.toString().equals(formField.getComponentKey())) { -// score=getDetailScoreForForm(dataDetail,module,layoutId,employee); - score = bulidFreeFormService(module).getOptionScore(dataDetail.getFormField().getId()+"", layoutId, dataDetail, employee).doubleValue(); - } - return score; - } - public Double getDetailScoreForForm(FormDataDetail dataDetail, ModuleSource module, Long layoutId, SimpleEmployee employee) { - Double score = null; - FormField formField=dataDetail.getFormField(); - if( ComponentType.RadioBox.toString().equals(formField.getComponentKey()) - || ComponentType.CheckBox.toString().equals(formField.getComponentKey()) - || ComponentType.Select.toString().equals(formField.getComponentKey())) { - if(dataDetail.getDataOptions()!=null && dataDetail.getDataOptions().size()>0){ - Double scoreSum=0D; - for(FormDataOption formDataOption:dataDetail.getDataOptions()){ - try { - if(StringUtils.isNotEmpty(formDataOption.getScore())){ - scoreSum+=Double.parseDouble(formDataOption.getScore()); - } - } catch (NumberFormatException e) { - logger.error("err",e); - } -// scoreString=scoreSum.toString(); - } - if(scoreSum!=null){ - try { - score=scoreSum; - } catch (NumberFormatException e) { - logger.error("err",e); - } - } - logger.info("获取分数:"+score); - } - } - return score; - } - public FreeFormService bulidFreeFormService(ModuleSource module) { - return freeFormAssistService.buildFreeFormService(module.toString()); - } - -} diff --git a/src/com/engine/salary/remote/attend/cmd/GetKQReportCmd.java b/src/com/engine/salary/remote/attend/cmd/GetKQReportCmd.java index 632802719..f1d3b612d 100644 --- a/src/com/engine/salary/remote/attend/cmd/GetKQReportCmd.java +++ b/src/com/engine/salary/remote/attend/cmd/GetKQReportCmd.java @@ -95,7 +95,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0)continue; column = new HashMap(); - column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); + column.put("title", SalaryI18nUtil.getI18nLabels(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); column.put("dataIndex", kqReportFieldComInfo.getFieldname()); column.put("type", kqReportFieldComInfo.getFieldname()); @@ -143,7 +143,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { // } // column = new HashMap(); -// column.put("title", SystemEnv.getHtmlLabelName(386476, user.getLanguage())); +// column.put("title", SalaryI18nUtil.getI18nLabel(386476, user.getLanguage())); // column.put("dataIndex", "kqCalendar"); // column.put("key", "kqCalendar"); // if(childColumns.size()>0) {//跨列width取子列的width @@ -430,7 +430,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { if(DateUtil.compDate(today, date)>0){ data.put(date,""); }else{ - data.put(date,detialDatas.get(id+"|"+date)==null?SystemEnv.getHtmlLabelName(26593, user.getLanguage()):detialDatas.get(id+"|"+date)); + data.put(date,detialDatas.get(id+"|"+date)==null?SalaryI18nUtil.getI18nLabel(26593, user.getLanguage()):detialDatas.get(id+"|"+date)); } cal.setTime(DateUtil.parseToDate(date)); date = DateUtil.getDate(cal.getTime(), 1); @@ -489,7 +489,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { String unitType = Util.null2String(leaveRule.get("unitType")); column = new HashMap(); column.put("title", name); - column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage())); + column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SalaryI18nUtil.getI18nLabel(391, user.getLanguage()):SalaryI18nUtil.getI18nLabel(1925, user.getLanguage())); column.put("width", 65); column.put("dataIndex", id); column.put("key", id); @@ -517,16 +517,16 @@ public class GetKQReportCmd extends AbstractCommonCommand> { String unitTypeName = ""; if(Util.null2String(unitType).length()>0){ if(unitType.equals("1")){ - unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage()); + unitTypeName=SalaryI18nUtil.getI18nLabel(1925, user.getLanguage()); }else if(unitType.equals("2")){ - unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage()); + unitTypeName=SalaryI18nUtil.getI18nLabel(391, user.getLanguage()); }else if(unitType.equals("3")){ - unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage()); + unitTypeName=SalaryI18nUtil.getI18nLabel(18083, user.getLanguage()); } } column.put("unit", unitTypeName); } - column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())); + column.put("title", SalaryI18nUtil.getI18nLabels(fieldlabel, user.getLanguage())); column.put("dataIndex", id); column.put("key", id); column.put("rowSpan", 1); @@ -547,7 +547,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { if(kqReportFieldComInfo.getParentid().equals(parentid)) { if(!kqReportFieldComInfo.getReportType().equals("month"))continue; column = new HashMap(); - column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); + column.put("title", SalaryI18nUtil.getI18nLabels(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth())); column.put("dataIndex", kqReportFieldComInfo.getFieldname()); @@ -579,7 +579,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { if(!kqReportFieldComInfo.getReportType().equals("month"))continue; if (kqReportFieldComInfo.getFieldname().equals(lsCascadeKey.get(i))){ column = new HashMap(); - column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); + column.put("title", SalaryI18nUtil.getI18nLabels(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth())); column.put("dataIndex", kqReportFieldComInfo.getFieldname()); diff --git a/src/com/engine/salary/service/RemoteExcelService.java b/src/com/engine/salary/service/RemoteExcelService.java index 8081451ee..d65e6197d 100644 --- a/src/com/engine/salary/service/RemoteExcelService.java +++ b/src/com/engine/salary/service/RemoteExcelService.java @@ -7,22 +7,22 @@ import java.util.List; import java.util.Map; public interface RemoteExcelService { -// ExcelResult aggregation(AggFunc func, String sourceId, String fieldId, List filterFormDataList, Map extendParam, SimpleEmployee employee); +// ExcelResult aggregation(AggFunc func, String sourceId, String fieldId, List filterFormDataList, Map extendParam, DataCollectionEmployee employee); // -// ExcelPage categoryList(ExcelPage page, Map extendParam, SimpleEmployee employee); +// ExcelPage categoryList(ExcelPage page, Map extendParam, DataCollectionEmployee employee); List fieldList(String sourceId, Map extendParam); List> fieldGroupList(Map extendParam); -// ExcelPage dataSourceList(String categoryId, ExcelPage page, Map extendParam, SimpleEmployee employee); +// ExcelPage dataSourceList(String categoryId, ExcelPage page, Map extendParam, DataCollectionEmployee employee); // -// List findProperData(String dataId, String fieldId, String fieldType, Map extendParam, SimpleEmployee employee); +// List findProperData(String dataId, String fieldId, String fieldType, Map extendParam, DataCollectionEmployee employee); // -// List choose(String sourceId, List filterFormDataList, Map extendParam, SimpleEmployee employee); +// List choose(String sourceId, List filterFormDataList, Map extendParam, DataCollectionEmployee employee); // -// List vlookups(String sourceId, List filterFormDataList, List returnFields, Map extendParam, SimpleEmployee employee); +// List vlookups(String sourceId, List filterFormDataList, List returnFields, Map extendParam, DataCollectionEmployee employee); // -// Map findSourceName(String Module, List idList, Map extendParam, SimpleEmployee employee); +// Map findSourceName(String Module, List idList, Map extendParam, DataCollectionEmployee employee); } diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index edeb2ed77..716150827 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -161,7 +161,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction //日期范围选项 // List dateOptions = new ArrayList(); -// dateOptions.add(new SearchConditionOption("6", SystemEnv.getHtmlLabelName(32530, user.getLanguage()), true));//指定日期范围(必须为6) +// dateOptions.add(new SearchConditionOption("6", SalaryI18nUtil.getI18nLabel(32530, user.getLanguage()), true));//指定日期范围(必须为6) // SearchConditionItem hiredate = conditionFactory.createCondition(ConditionType.RANGEPICKER, 18648, new String[]{"hiredate", "hiredate"}); // hiredate.setInputType("rangepicker"); // hiredate.setFormat("yyyy-MM-dd"); diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index f3b04ecf1..e7a2ad739 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -144,7 +144,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // // //日期范围选项 // List dateOptions = new ArrayList(); -// dateOptions.add(new SearchConditionOption("6", SystemEnv.getHtmlLabelName(32530, user.getLanguage()), true));//指定日期范围(必须为6) +// dateOptions.add(new SearchConditionOption("6", SalaryI18nUtil.getI18nLabel(32530, user.getLanguage()), true));//指定日期范围(必须为6) // SearchConditionItem hiredate = conditionFactory.createCondition(ConditionType.RANGEPICKER, 18648, new String[]{"hiredate", "hiredate"}); // hiredate.setInputType("rangepicker"); // hiredate.setFormat("yyyy-MM-dd"); diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index 93b7c17ea..53591543c 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -79,12 +79,12 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic // @Override // public ExcelResult aggregation(AggFunc func, String sourceId, String fieldId, List filterFormDataList, Map extendParam, -// SimpleEmployee employee) { +// DataCollectionEmployee employee) { // return null; // } // @Override -// public ExcelPage categoryList(ExcelPage page, Map extendParam, SimpleEmployee employee) { +// public ExcelPage categoryList(ExcelPage page, Map extendParam, DataCollectionEmployee employee) { // log.info("page: {}", JsonUtil.toJsonString(page)); // List categories = Lists.newArrayList(); // FormulaCategory category = new FormulaCategory(); @@ -201,7 +201,7 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic } // @Override -// public ExcelPage dataSourceList(String categoryId, ExcelPage page, Map extendParam, SimpleEmployee employee) { +// public ExcelPage dataSourceList(String categoryId, ExcelPage page, Map extendParam, DataCollectionEmployee employee) { // log.info("categoryId: {}, page: {}", categoryId, JsonUtil.toJsonString(page)); // if (StringUtils.equals("TAX_RATE", categoryId)) { // taxRate2FormulaDataSource(page, employee.getTenantKey()); @@ -211,18 +211,18 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic // } // // @Override -// public List findProperData(String dataId, String fieldId, String fieldType, Map extendParam, SimpleEmployee employee) { +// public List findProperData(String dataId, String fieldId, String fieldType, Map extendParam, DataCollectionEmployee employee) { // return null; // } // // @Override -// public List choose(String sourceId, List filterFormDataList, Map extendParam, SimpleEmployee employee) { +// public List choose(String sourceId, List filterFormDataList, Map extendParam, DataCollectionEmployee employee) { // return null; // } // //// @Override // public List vlookups(String sourceId, List filterFormDataList, List returnFields, Map extendParam, -// SimpleEmployee employee) { +// DataCollectionEmployee employee) { // log.info("sourceId: {}, filterFormDataList: {}, returnFields: {}", sourceId, JsonUtil.toJsonString(filterFormDataList), JsonUtil.toJsonString(returnFields)); // Map columnMap = Maps.newHashMap(); // for (Field declaredField : SalaryFormulaTaxRateDTO.class.getDeclaredFields()) { @@ -257,12 +257,12 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic // } // // @Override -// public Map findSourceName(String Module, List idList, Map extendParam, SimpleEmployee employee) { +// public Map findSourceName(String Module, List idList, Map extendParam, DataCollectionEmployee employee) { // return null; // } // //// @Override -//// public List getFieldData(String dataId, List fieldIds, SimpleEmployee employee) { +//// public List getFieldData(String dataId, List fieldIds, DataCollectionEmployee employee) { //// return null; //// } // diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 11bb3bd78..9ffd25384 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -1129,8 +1129,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // return excelSheetData; // } // List employeeIds = SalaryEntityUtil.properties(salaryCheckResultRecords, SalaryCheckResultRecordPO::getEmployeeId, Collectors.toList()); -// List simpleEmployees = hrmCommonEmployeeService.getEmployeeByIds(employeeIds); -// Map simpleEmployeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, SimpleEmployee::getEmployeeId, SimpleEmployee::getUsername); +// List simpleEmployees = hrmCommonEmployeeService.getEmployeeByIds(employeeIds); +// Map simpleEmployeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername); // List expressFormulas = getSalaryFormulaService(user).listExpressFormula(Collections.singleton(checkResult.getFormulaId())); // Map formulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula); // for (SalaryCheckResultRecordPO salaryCheckResultRecord : salaryCheckResultRecords) { diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 01bfb5162..d2672d07c 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1014,13 +1014,13 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // // // 获取所有人员信息 // List ids = enableSendList.stream().map(e->Long.valueOf(e.get("employeeId").toString())).collect(Collectors.toList()); -// List allEmployees = hrmCommonEmployeeService.getEmployeeByIds(ids, currentTenantKey); +// List allEmployees = hrmCommonEmployeeService.getEmployeeByIds(ids, currentTenantKey); // List listDTOS = JSONArray.parseArray(salaryTemplate.getSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); // Optional optionalEmployeeInformation = listDTOS.stream().filter(e -> SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).findFirst(); // SalaryTemplateSalaryItemSetListDTO employeeInformation = optionalEmployeeInformation.orElse(null); // Map employeeField = SalaryAcctResultBO.buildEmployeeFieldName(); // enableSendList.forEach(e -> { -// Optional optionalSimpleEmployee = allEmployees.stream().filter(f->f.getEmployeeId().equals(Long.valueOf(e.get("employeeId").toString()))).findFirst(); +// Optional optionalSimpleEmployee = allEmployees.stream().filter(f->f.getEmployeeId().equals(Long.valueOf(e.get("employeeId").toString()))).findFirst(); // if (optionalSimpleEmployee.isPresent()) { // buildEmployeeInfo(employeeInformation, optionalSimpleEmployee.get(), e.get("taxAgent").toString(), employeeField); // } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationDetailServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationDetailServiceImpl.java index 1bf1bc94c..ec95ac03b 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationDetailServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationDetailServiceImpl.java @@ -111,7 +111,7 @@ public class TaxDeclarationDetailServiceImpl extends Service implements TaxDecla List taxDeclarationDetailPOS = listByTaxDeclarationIdAndEmployeeIds(queryParam.getTaxDeclarationId(), employeeIdPage); // 查询人员 List simpleEmployees = getSalaryEmployeeService().listByIds(employeeIdPage); - // List simpleEmployees = hrmCommonEmployeeService.getEmployeeByIds(employeeIdPage.getRecords(), tenantKey); + // List simpleEmployees = hrmCommonEmployeeService.getEmployeeByIds(employeeIdPage.getRecords(), tenantKey); // 转换成列表dto TaxDeclarationBO.buildDetailListDTO(queryParam.getTaxDeclarationId(), dtoPage, taxDeclarationDetailPOS, simpleEmployees); } diff --git a/src/com/engine/salary/util/SalaryI18nUtil.java b/src/com/engine/salary/util/SalaryI18nUtil.java index a28a7124d..f7d9272ce 100644 --- a/src/com/engine/salary/util/SalaryI18nUtil.java +++ b/src/com/engine/salary/util/SalaryI18nUtil.java @@ -32,7 +32,7 @@ public class SalaryI18nUtil { // */ // public static String getI18nLabel(String tenantKey, Long employeeId, int labelId, String defaultLabel) { // int languageId = I18nLanguageUtil.getLangId(employeeId); -// return SystemEnv.getHtmlLabelName(labelId, languageId, tenantKey, defaultLabel); +// return SalaryI18nUtil.getI18nLabel(labelId, languageId, tenantKey, defaultLabel); // } // // /** @@ -43,8 +43,8 @@ public class SalaryI18nUtil { // * @param defaultLabel 默认中文 // * @return // */ -// public static String getI18nLabel(SimpleEmployee simpleEmployee, int labelId, String defaultLabel) { +// public static String getI18nLabel(DataCollectionEmployee simpleEmployee, int labelId, String defaultLabel) { // int languageId = I18nLanguageUtil.getLangId(simpleEmployee.getEmployeeId()); -// return SystemEnv.getHtmlLabelName(labelId, languageId, simpleEmployee.getTenantKey(), defaultLabel); +// return SalaryI18nUtil.getI18nLabel(labelId, languageId, simpleEmployee.getTenantKey(), defaultLabel); // } } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 51319b339..c1916b13f 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -606,7 +606,7 @@ public class SalaryAcctController { // @ApiOperation("校验异常导出") // @WeaPermission // public WeaResult> exportCheckResult(@RequestBody @Validated SalaryCheckResultExportParam exportParam) { -// SimpleEmployee simpleEmployee = UserContext.getCurrentUser(); +// DataCollectionEmployee simpleEmployee = UserContext.getCurrentUser(); // String tenantKey = TenantContext.getCurrentTenantKey(); // String eteamsId = TenantRpcContext.getEteamsId(); // Map map = salaryAcctExcelWrapper.exportCheckResult(exportParam, simpleEmployee, tenantKey, eteamsId); @@ -617,7 +617,7 @@ public class SalaryAcctController { // @ApiOperation("校验异常明细导出") // @WeaPermission // public WeaResult> exportCheckResultDetail(@RequestParam(value = "checkResultId") Long checkResultId) { -// SimpleEmployee simpleEmployee = UserContext.getCurrentUser(); +// DataCollectionEmployee simpleEmployee = UserContext.getCurrentUser(); // String tenantKey = TenantContext.getCurrentTenantKey(); // String eteamsId = TenantRpcContext.getEteamsId(); // Map map = salaryAcctExcelWrapper.exportCheckResultDetail(checkResultId, simpleEmployee, tenantKey, eteamsId); diff --git a/src/com/engine/salary/wrapper/OtherDeductionWrapper.java b/src/com/engine/salary/wrapper/OtherDeductionWrapper.java index 8270743ba..2494e6f45 100644 --- a/src/com/engine/salary/wrapper/OtherDeductionWrapper.java +++ b/src/com/engine/salary/wrapper/OtherDeductionWrapper.java @@ -108,7 +108,7 @@ public class OtherDeductionWrapper extends Service { // // //日期范围选项 // List dateOptions = new ArrayList(); -// dateOptions.add(new SearchConditionOption("6", SystemEnv.getHtmlLabelName(32530, user.getLanguage()), true));//指定日期范围(必须为6) +// dateOptions.add(new SearchConditionOption("6", SalaryI18nUtil.getI18nLabel(32530, user.getLanguage()), true));//指定日期范围(必须为6) // SearchConditionItem hiredate = conditionFactory.createCondition(ConditionType.RANGEPICKER, 18648, new String[]{"hiredate", "hiredate"}); // hiredate.setInputType("rangepicker"); // hiredate.setFormat("yyyy-MM-dd"); diff --git a/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java index a7fee0472..6c2db9bd7 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java @@ -102,7 +102,7 @@ public class SalaryAcctExcelWrapper extends Service { // * @return // */ // public Map exportCheckResult(SalaryCheckResultExportParam exportParam, -// SimpleEmployee simpleEmployee, String tenantKey, String eteamsId) { +// DataCollectionEmployee simpleEmployee, String tenantKey, String eteamsId) { // ExcelExportParam excelExportParam = new ExcelExportParam() // .setModule(EntityType.hrsa.name()) // .setFunction("salaryCheckResultHandler"); @@ -131,7 +131,7 @@ public class SalaryAcctExcelWrapper extends Service { // * @return // */ // public Map exportCheckResultDetail(Long checkResultId, -// SimpleEmployee simpleEmployee, String tenantKey, String eteamsId) { +// DataCollectionEmployee simpleEmployee, String tenantKey, String eteamsId) { // ExcelExportParam excelExportParam = new ExcelExportParam() // .setModule(EntityType.hrsa.name()) // .setFunction("salaryCheckResultDetailHandler"); diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 1b4a210fd..4ddaf69b5 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -263,7 +263,7 @@ public class SalaryAcctResultWrapper extends Service { * @param simpleEmployee 当前登陆人员 * @param tenantKey 租户key */ -// public void check(SalaryAcctCheckParam checkParam, SimpleEmployee simpleEmployee, String tenantKey) { +// public void check(SalaryAcctCheckParam checkParam, DataCollectionEmployee simpleEmployee, String tenantKey) { // // 检查是否正在核算中 // SalaryAcctProgressDTO salaryAcctProgressDTO = salaryAcctProgressService.getProgress("" + checkParam.getSalaryAcctRecordId(), simpleEmployee.getEmployeeId(), tenantKey); // if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { From 34f33d21d8f233b83d09b0729b9391c4e7a6361d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 19 Apr 2023 13:35:35 +0800 Subject: [PATCH 023/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/component/SalaryWeaTable.java | 4 +- .../formlua/core/exception/ErrorType.java | 39 +- .../formlua/entity/parameter/DataType.java | 17 +- .../entity/standard/FormulaFilterData.java | 8 +- .../entity/standard/execute/ExclDataType.java | 12 + .../entity/standard/execute/ExclFixField.java | 68 + .../entity/standard/execute/FixFieldType.java | 11 + .../formlua/func/compare/Compareutils.java | 612 ++++----- .../formlua/func/compare/GreaterOperator.java | 2 +- .../formlua/func/compare/LessEqOperator.java | 2 +- .../formlua/func/compare/LessOperator.java | 2 +- .../formlua/func/compare/NotEqueOperator.java | 2 +- .../formlua/func/compare/WOperatorDiv.java | 97 +- .../func/date/DateTimeTestServiceImpl.java | 1208 ----------------- .../func/find/FindFuncsServiceImpl.java | 381 +++--- .../func/find/FindFuncsTestServiceImpl.java | 166 --- .../formlua/func/logic/LogicService.java | 29 +- .../formlua/func/logic/LogicServiceImpl.java | 8 +- .../salary/formlua/func/logic/LogicUtils.java | 1 - .../func/math/MathFuncsServiceImpl.java | 475 ++++--- .../func/math/MathFuncsServiceTestImpl.java | 486 ------- .../string/StringFormulaServiceTestImpl.java | 555 -------- .../engine/salary/formlua/util/DateUtil.java | 2 +- .../salary/formlua/util/ExcelParamUtil.java | 447 +++--- .../formlua/util/ExcelStandardUtil.java | 980 ++++++------- .../salary/formlua/util/ExecuteTest.java | 47 - .../engine/salary/formlua/util/TestUtil.java | 403 ------ .../remote/attend/cmd/GetKQReportCmd.java | 22 +- 28 files changed, 1653 insertions(+), 4433 deletions(-) create mode 100644 src/com/engine/salary/formlua/entity/standard/execute/ExclDataType.java create mode 100644 src/com/engine/salary/formlua/entity/standard/execute/ExclFixField.java create mode 100644 src/com/engine/salary/formlua/entity/standard/execute/FixFieldType.java delete mode 100644 src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java delete mode 100644 src/com/engine/salary/formlua/func/find/FindFuncsTestServiceImpl.java delete mode 100644 src/com/engine/salary/formlua/func/math/MathFuncsServiceTestImpl.java delete mode 100644 src/com/engine/salary/formlua/func/string/StringFormulaServiceTestImpl.java delete mode 100644 src/com/engine/salary/formlua/util/ExecuteTest.java delete mode 100644 src/com/engine/salary/formlua/util/TestUtil.java diff --git a/src/com/engine/salary/component/SalaryWeaTable.java b/src/com/engine/salary/component/SalaryWeaTable.java index 98110f7ce..b4e41a76c 100644 --- a/src/com/engine/salary/component/SalaryWeaTable.java +++ b/src/com/engine/salary/component/SalaryWeaTable.java @@ -56,7 +56,7 @@ public class SalaryWeaTable extends WeaTable { Arrays.stream(operates).forEach(o -> { String text = o.text(); int labelId = o.labelId(); - String htmlLabelName = SalaryI18nUtil.getI18nLabel(labelId, user.getLanguage()); + String htmlLabelName = SystemEnv.getHtmlLabelName(labelId, user.getLanguage()); if (StringUtils.isNotBlank(htmlLabelName)) { text = htmlLabelName; } @@ -86,7 +86,7 @@ public class SalaryWeaTable extends WeaTable { SalaryTableColumn columnAnn = f.getAnnotation(SalaryTableColumn.class); String text = columnAnn.text(); int labelId = columnAnn.labelId(); - String htmlLabelName = SalaryI18nUtil.getI18nLabel(labelId, user.getLanguage()); + String htmlLabelName = SystemEnv.getHtmlLabelName(labelId, user.getLanguage()); if (StringUtils.isNotBlank(htmlLabelName)) { text = htmlLabelName; } diff --git a/src/com/engine/salary/formlua/core/exception/ErrorType.java b/src/com/engine/salary/formlua/core/exception/ErrorType.java index 58f97671a..c165c1964 100644 --- a/src/com/engine/salary/formlua/core/exception/ErrorType.java +++ b/src/com/engine/salary/formlua/core/exception/ErrorType.java @@ -4,66 +4,67 @@ import com.engine.salary.util.SalaryI18nUtil; public enum ErrorType { /** - *函数参数不能为空 + * 函数参数不能为空 */ - NOT_NULL(SalaryI18nUtil.getI18nLabel(91326,"函数参数不能为空")), + NOT_NULL(SalaryI18nUtil.getI18nLabel(91326, "函数参数不能为空")), /** * 参数不能为空 */ - VAR_NOT_NULL(SalaryI18nUtil.getI18nLabel(32804,"参数不能为空")), + VAR_NOT_NULL(SalaryI18nUtil.getI18nLabel(32804, "参数不能为空")), /** - *函数参数错误,参数类型需为数字字段 + * 函数参数错误,参数类型需为数字字段 */ - MUST_NUM(SalaryI18nUtil.getI18nLabel(91327,"函数参数错误,参数类型需为数字字段")), + MUST_NUM(SalaryI18nUtil.getI18nLabel(91327, "函数参数错误,参数类型需为数字字段")), /** - *函数参数类型错误,参数需为表格 + * 函数参数类型错误,参数需为表格 */ - MUST_FORM(SalaryI18nUtil.getI18nLabel(91330,"函数参数类型错误,参数需为表格")), + MUST_FORM(SalaryI18nUtil.getI18nLabel(91330, "函数参数类型错误,参数需为表格")), /** * */ - MUST_FORM_FIELD(SalaryI18nUtil.getI18nLabel(91331,"函数参数错误,参数类型需为表格字段")), - CANT_FORM_FIELD(SalaryI18nUtil.getI18nLabel(91427,"比较操作符参数不能是表格字段")), + MUST_FORM_FIELD(SalaryI18nUtil.getI18nLabel(91331, "函数参数错误,参数类型需为表格字段")), + CANT_FORM_FIELD(SalaryI18nUtil.getI18nLabel(91427, "比较操作符参数不能是表格字段")), /** * */ - CND_NOT_NULL(SalaryI18nUtil.getI18nLabel(11575,"条件不能为空")), + CND_NOT_NULL(SalaryI18nUtil.getI18nLabel(11575, "条件不能为空")), /** * */ - MIN_VAR_COUNT(SalaryI18nUtil.getI18nLabel(91332,"函数的最少参数个数")), + MIN_VAR_COUNT(SalaryI18nUtil.getI18nLabel(91332, "函数的最少参数个数")), /** * */ - MAX_VAR_COUNT(SalaryI18nUtil.getI18nLabel(91333,"函数的最多参数个数")), + MAX_VAR_COUNT(SalaryI18nUtil.getI18nLabel(91333, "函数的最多参数个数")), /** * */ - CANNOT_HAVE_VAR(SalaryI18nUtil.getI18nLabel(91334,"函数不能有参数")), + CANNOT_HAVE_VAR(SalaryI18nUtil.getI18nLabel(91334, "函数不能有参数")), /** * */ - RETURN_TYPE_DIFF(SalaryI18nUtil.getI18nLabel(91335,"函数多个条件的返回值必须一致")), + RETURN_TYPE_DIFF(SalaryI18nUtil.getI18nLabel(91335, "函数多个条件的返回值必须一致")), /** * */ - VAR_COUNT_MUST_Odd(SalaryI18nUtil.getI18nLabel(91336,"函数最后一个参数需为默认返回值")), + VAR_COUNT_MUST_Odd(SalaryI18nUtil.getI18nLabel(91336, "函数最后一个参数需为默认返回值")), /** * */ - VAR_TYPE_WRONG(SalaryI18nUtil.getI18nLabel(91337,"函数参数类型错误")), + VAR_TYPE_WRONG(SalaryI18nUtil.getI18nLabel(91337, "函数参数类型错误")), /** * */ - VAR_MUST_HAVE_DATE(SalaryI18nUtil.getI18nLabel(91338,"函数日期参数必须包含年月日")), + VAR_MUST_HAVE_DATE(SalaryI18nUtil.getI18nLabel(91338, "函数日期参数必须包含年月日")), /** * */ - VAR_TYPE_MUST_BE(SalaryI18nUtil.getI18nLabel(91339,"函数参数类型错误,参数类型需为")), + VAR_TYPE_MUST_BE(SalaryI18nUtil.getI18nLabel(91339, "函数参数类型错误,参数类型需为")), /** * */ - CANNOT_FIND_TEN(SalaryI18nUtil.getI18nLabel(91361,"函数未能获取到租户")); + CANNOT_FIND_TEN(SalaryI18nUtil.getI18nLabel(91361, "函数未能获取到租户")); + ErrorType(String name) { } } diff --git a/src/com/engine/salary/formlua/entity/parameter/DataType.java b/src/com/engine/salary/formlua/entity/parameter/DataType.java index 275e7d8f3..f049136a6 100644 --- a/src/com/engine/salary/formlua/entity/parameter/DataType.java +++ b/src/com/engine/salary/formlua/entity/parameter/DataType.java @@ -1,6 +1,7 @@ package com.engine.salary.formlua.entity.parameter; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.formlua.entity.standard.FormulaFilterData; import java.io.Serializable; import java.util.ArrayList; @@ -79,7 +80,7 @@ public class DataType implements Serializable { /** * 高级搜索条件,由函数的逻辑操作符和逻辑函数构建,模块不需要处理 */ -// List formulaFilterDataList=null; + List formulaFilterDataList=null; private List subLogic=new ArrayList<>(); public static boolean checkType(String dataTypeL,String dataTypeR){ if(returnType(dataTypeL).equalsIgnoreCase(dataTypeR)){ @@ -268,11 +269,11 @@ public class DataType implements Serializable { this.subFormData = subFormData; } -// public List getFormulaFilterDataList() { -// return formulaFilterDataList; -// } -// -// public void setFormulaFilterDataList(List formulaFilterDataList) { -// this.formulaFilterDataList = formulaFilterDataList; -// } + public List getFormulaFilterDataList() { + return formulaFilterDataList; + } + + public void setFormulaFilterDataList(List formulaFilterDataList) { + this.formulaFilterDataList = formulaFilterDataList; + } } diff --git a/src/com/engine/salary/formlua/entity/standard/FormulaFilterData.java b/src/com/engine/salary/formlua/entity/standard/FormulaFilterData.java index 06531e13f..a27498278 100644 --- a/src/com/engine/salary/formlua/entity/standard/FormulaFilterData.java +++ b/src/com/engine/salary/formlua/entity/standard/FormulaFilterData.java @@ -1,9 +1,5 @@ package com.engine.salary.formlua.entity.standard; -import com.weaver.common.form.stat.FilterFormData; -import com.weaver.common.form.stat.domain.search.FilterFormDataIds; -import com.weaver.teams.domain.entity.BaseEntity; - import java.io.Serializable; import java.util.List; @@ -56,7 +52,7 @@ public class FormulaFilterData implements Serializable { * 选项条件的值 */ private List ids; - private List children; +// private List children; private List contents; private List idObjects; private String dateType; @@ -75,7 +71,7 @@ public class FormulaFilterData implements Serializable { private List selectIds; private String format; private boolean isFixed; - private List filterFormDataIdsList; +// private List filterFormDataIdsList; public String getFieldId() { return fieldId; diff --git a/src/com/engine/salary/formlua/entity/standard/execute/ExclDataType.java b/src/com/engine/salary/formlua/entity/standard/execute/ExclDataType.java new file mode 100644 index 000000000..a249eb261 --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/execute/ExclDataType.java @@ -0,0 +1,12 @@ +package com.engine.salary.formlua.entity.standard.execute; + +/** + * @author 罗威 + */ + +public enum ExclDataType { + text("文本类型"),integral("整数类型"),decimal("小数类型"),datasource("数据源或选项类型"),bool("布尔类型"); + + ExclDataType(String name) { + } +} diff --git a/src/com/engine/salary/formlua/entity/standard/execute/ExclFixField.java b/src/com/engine/salary/formlua/entity/standard/execute/ExclFixField.java new file mode 100644 index 000000000..5b34bf6fd --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/execute/ExclFixField.java @@ -0,0 +1,68 @@ +package com.engine.salary.formlua.entity.standard.execute; + +/** + * 固定字段标准类 + * @author 罗威 + */ +public class ExclFixField { + /** + * 固定字段或系统字段的类属性名 + */ + private String properName; + /** + * 数据类型 + */ + private ExclDataType exclDataType; + /** + * 固定字段或系统字段的值 + */ + private Object value; + /** + * 所属来源数据的ID + */ + private String sourceId; + /** + * 所属模块 + */ + private String module; + + public String getProperName() { + return properName; + } + + public void setProperName(String properName) { + this.properName = properName; + } + + public ExclDataType getExclDataType() { + return exclDataType; + } + + public void setExclDataType(ExclDataType exclDataType) { + this.exclDataType = exclDataType; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + public String getSourceId() { + return sourceId; + } + + public void setSourceId(String sourceId) { + this.sourceId = sourceId; + } + + public String getModule() { + return module; + } + + public void setModule(String module) { + this.module = module; + } +} diff --git a/src/com/engine/salary/formlua/entity/standard/execute/FixFieldType.java b/src/com/engine/salary/formlua/entity/standard/execute/FixFieldType.java new file mode 100644 index 000000000..fcfcca5ee --- /dev/null +++ b/src/com/engine/salary/formlua/entity/standard/execute/FixFieldType.java @@ -0,0 +1,11 @@ +package com.engine.salary.formlua.entity.standard.execute; + +/** + * 固定字段分类 + */ +public enum FixFieldType { + Text("文本型"),Num("数字型"),Relate("关联型"),Select("选项型"),Employee("人员"),Department("部门"); + + FixFieldType(String name) { + } +} diff --git a/src/com/engine/salary/formlua/func/compare/Compareutils.java b/src/com/engine/salary/formlua/func/compare/Compareutils.java index 7c38fe2d0..086817cfa 100644 --- a/src/com/engine/salary/formlua/func/compare/Compareutils.java +++ b/src/com/engine/salary/formlua/func/compare/Compareutils.java @@ -1,310 +1,310 @@ -package com.engine.salary.formlua.func.compare; - -import com.alibaba.fastjson.JSON; -import com.engine.salary.formlua.entity.parameter.DataType; -import com.engine.salary.formlua.entity.standard.FormulaFilterData; -import com.weaver.common.form.component.base.ComponentConfig; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.common.form.excel.validator.Validator; -import com.weaver.common.form.metadata.field.FormField; -import com.weaver.common.form.stat.FilterFormData; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; - -/** - * 逻辑操作符的条件构建工具类 - */ -public class Compareutils { - protected static final Logger logger = LoggerFactory.getLogger(Compareutils.class); - - /** - * 构建不等于操作符的搜索条件 - * - * @param dataType - * @param obj1 - * @param obj2 - * @throws Exception - */ - public static void buildNotEqFilterParam(DataType dataType, Object obj1, Object obj2) throws Exception { - List filterFormDataList = new ArrayList<>(); - FormulaFilterData filterData = new FormulaFilterData(); - String content = null; - try { - if (obj1 instanceof DataType) { - DataType dataType1 = (DataType) obj1; - if (StringUtils.isEmpty(dataType1.getComponentKey())) { - dataType1.setComponentKey(dataType1.getDataType()); - } - if (obj2 instanceof DataType) { -// content = ((DataType) obj2).getContent()+""; - DataType paramDataType = (DataType) obj2; - if (paramDataType == null || paramDataType.getContent() == null) { - content = ""; - } else { - content = paramDataType.getContent() + ""; - } - } else { - content = obj2 + ""; - } - if (content != null) { - String componentKey = dataType1.getComponentKey(); - filterData.setFieldId(dataType1.getFieldId()); - if (dataType1.getSubFormId() != null) { - filterData.setSubFormId(dataType1.getSubFormId() + ""); - } - filterData.setComponentKey(componentKey); - if (StringUtils.isEmpty(content)) { -// filterData.setTerm(FilterFormData.TERM_NOT_NULL); - } else { -// //选项控件 -// if (ComponentConfig.isOptionComponent(componentKey)) { -// filterData.setTerm(FilterFormData.TERM_NOT_EQ); -// List ids = new ArrayList<>(); -// String[] idsArray = content.split(","); -// for (String idStr : idsArray) { -// if (StringUtils.isNotBlank(idStr)) { -// ids.add(idStr); -// } -// } -// filterData.setIds(ids); -// //其他 -// } else { -// filterData.setTerm(FilterFormData.TERM_NOT_EQ); -// filterData.setContent(content); -//// if(ComponentConfig.isNumberComponent(dataType1.getComponentKey()) || dataType1.getComponentKey().equalsIgnoreCase(DataType.NUMBER)){ -//// if(StringUtils.isEmpty(content)){ -//// filterData.setContent("0"); +//package com.engine.salary.formlua.func.compare; +// +//import com.alibaba.fastjson.JSON; +//import com.engine.salary.formlua.entity.parameter.DataType; +//import com.engine.salary.formlua.entity.standard.FormulaFilterData; +//import com.weaver.common.form.component.base.ComponentConfig; +//import com.weaver.common.form.component.base.ComponentType; +//import com.weaver.common.form.excel.validator.Validator; +//import com.weaver.common.form.metadata.field.FormField; +//import com.weaver.common.form.stat.FilterFormData; +//import org.apache.commons.lang3.StringUtils; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * 逻辑操作符的条件构建工具类 +// */ +//public class Compareutils { +// protected static final Logger logger = LoggerFactory.getLogger(Compareutils.class); +// +// /** +// * 构建不等于操作符的搜索条件 +// * +// * @param dataType +// * @param obj1 +// * @param obj2 +// * @throws Exception +// */ +// public static void buildNotEqFilterParam(DataType dataType, Object obj1, Object obj2) throws Exception { +// List filterFormDataList = new ArrayList<>(); +// FormulaFilterData filterData = new FormulaFilterData(); +// String content = null; +// try { +// if (obj1 instanceof DataType) { +// DataType dataType1 = (DataType) obj1; +// if (StringUtils.isEmpty(dataType1.getComponentKey())) { +// dataType1.setComponentKey(dataType1.getDataType()); +// } +// if (obj2 instanceof DataType) { +//// content = ((DataType) obj2).getContent()+""; +// DataType paramDataType = (DataType) obj2; +// if (paramDataType == null || paramDataType.getContent() == null) { +// content = ""; +// } else { +// content = paramDataType.getContent() + ""; +// } +// } else { +// content = obj2 + ""; +// } +// if (content != null) { +// String componentKey = dataType1.getComponentKey(); +// filterData.setFieldId(dataType1.getFieldId()); +// if (dataType1.getSubFormId() != null) { +// filterData.setSubFormId(dataType1.getSubFormId() + ""); +// } +// filterData.setComponentKey(componentKey); +// if (StringUtils.isEmpty(content)) { +//// filterData.setTerm(FilterFormData.TERM_NOT_NULL); +// } else { +//// //选项控件 +//// if (ComponentConfig.isOptionComponent(componentKey)) { +//// filterData.setTerm(FilterFormData.TERM_NOT_EQ); +//// List ids = new ArrayList<>(); +//// String[] idsArray = content.split(","); +//// for (String idStr : idsArray) { +//// if (StringUtils.isNotBlank(idStr)) { +//// ids.add(idStr); //// } //// } +//// filterData.setIds(ids); +//// //其他 +//// } else { +//// filterData.setTerm(FilterFormData.TERM_NOT_EQ); +//// filterData.setContent(content); +////// if(ComponentConfig.isNumberComponent(dataType1.getComponentKey()) || dataType1.getComponentKey().equalsIgnoreCase(DataType.NUMBER)){ +////// if(StringUtils.isEmpty(content)){ +////// filterData.setContent("0"); +////// } +////// } +//// } +// } +// } +// filterFormDataList.add(filterData); +//// dataType.setFormulaFilterDataList(filterFormDataList); +// dataType.setComponentKey(dataType1.getComponentKey()); +// dataType.setSubFormId(dataType1.getSubFormId()); +// } +// } catch (Exception e) { +// logger.error("err", e); +// } +// +// } +// +// /** +// * 构建大于、小于、大于等于、小于等于的搜索条件 +// * +// * @param dataType +// * @param name +// * @param obj1 +// * @param obj2 +// */ +// public static void buildLessMoreFilterParam(DataType dataType, String name, Object obj1, Object obj2) { +// List filterFormDataList = new ArrayList<>(); +// FormulaFilterData filterData = new FormulaFilterData(); +// try { +// logger.info(name + "执行结果:" + JSON.toJSONString(dataType)); +// if (obj1 instanceof DataType) { +// DataType dataType1 = (DataType) obj1; +// if (StringUtils.isEmpty(dataType1.getComponentKey())) { +// dataType1.setComponentKey(dataType1.getDataType()); +// } +// String content = null; +// if (obj2 instanceof DataType) { +//// content = ((DataType) obj2).getContent()+""; +// DataType paramDataType = (DataType) obj2; +// if (paramDataType == null || paramDataType.getContent() == null) { +// content = ""; +// } else { +// content = paramDataType.getContent() + ""; +// } +// } else { +// content = obj2 + ""; +// } +// if (content != null) { +// String componentKey = dataType1.getComponentKey(); +// if (ComponentConfig.isNumberComponent(componentKey) +// || componentKey.equals(ComponentType.DateComponent.toString()) +// || componentKey.equals(ComponentType.TimeComponent.toString()) +// || dataType1.getComponentKey().equalsIgnoreCase(DataType.STRING) +// || dataType1.getComponentKey().equalsIgnoreCase(DataType.NUMBER) +// || dataType1.getComponentKey().equalsIgnoreCase(DataType.STRING) +// || dataType1.getComponentKey().equalsIgnoreCase(DataType.BOOL)) { +// +// filterData.setFieldId(dataType1.getFieldId() + ""); +// if (dataType1.getSubFormId() != null) { +// filterData.setSubFormId(dataType1.getSubFormId() + ""); // } - } - } - filterFormDataList.add(filterData); +// filterData.setComponentKey(componentKey); +// switch (name) { +// case ">=": +// filterData.setTerm(FilterFormData.TERM_GE); +// break; +// case ">": +// filterData.setTerm(FilterFormData.TERM_GT); +// break; +// case "<=": +// filterData.setTerm(FilterFormData.TERM_LE); +// break; +// case "<": +// filterData.setTerm(FilterFormData.TERM_LT); +// break; +// default: +// break; +// } +// filterData.setContent(content); +// } +// } +// filterFormDataList.add(filterData); // dataType.setFormulaFilterDataList(filterFormDataList); - dataType.setComponentKey(dataType1.getComponentKey()); - dataType.setSubFormId(dataType1.getSubFormId()); - } - } catch (Exception e) { - logger.error("err", e); - } - - } - - /** - * 构建大于、小于、大于等于、小于等于的搜索条件 - * - * @param dataType - * @param name - * @param obj1 - * @param obj2 - */ - public static void buildLessMoreFilterParam(DataType dataType, String name, Object obj1, Object obj2) { - List filterFormDataList = new ArrayList<>(); - FormulaFilterData filterData = new FormulaFilterData(); - try { - logger.info(name + "执行结果:" + JSON.toJSONString(dataType)); - if (obj1 instanceof DataType) { - DataType dataType1 = (DataType) obj1; - if (StringUtils.isEmpty(dataType1.getComponentKey())) { - dataType1.setComponentKey(dataType1.getDataType()); - } - String content = null; - if (obj2 instanceof DataType) { -// content = ((DataType) obj2).getContent()+""; - DataType paramDataType = (DataType) obj2; - if (paramDataType == null || paramDataType.getContent() == null) { - content = ""; - } else { - content = paramDataType.getContent() + ""; - } - } else { - content = obj2 + ""; - } - if (content != null) { - String componentKey = dataType1.getComponentKey(); - if (ComponentConfig.isNumberComponent(componentKey) - || componentKey.equals(ComponentType.DateComponent.toString()) - || componentKey.equals(ComponentType.TimeComponent.toString()) - || dataType1.getComponentKey().equalsIgnoreCase(DataType.STRING) - || dataType1.getComponentKey().equalsIgnoreCase(DataType.NUMBER) - || dataType1.getComponentKey().equalsIgnoreCase(DataType.STRING) - || dataType1.getComponentKey().equalsIgnoreCase(DataType.BOOL)) { - - filterData.setFieldId(dataType1.getFieldId() + ""); - if (dataType1.getSubFormId() != null) { - filterData.setSubFormId(dataType1.getSubFormId() + ""); - } - filterData.setComponentKey(componentKey); - switch (name) { - case ">=": - filterData.setTerm(FilterFormData.TERM_GE); - break; - case ">": - filterData.setTerm(FilterFormData.TERM_GT); - break; - case "<=": - filterData.setTerm(FilterFormData.TERM_LE); - break; - case "<": - filterData.setTerm(FilterFormData.TERM_LT); - break; - default: - break; - } - filterData.setContent(content); - } - } - filterFormDataList.add(filterData); - dataType.setFormulaFilterDataList(filterFormDataList); - dataType.setComponentKey(dataType1.getComponentKey()); - dataType.setSubFormId(dataType1.getSubFormId()); - } - } catch (Exception e) { - logger.error("err", e); - } - - } - - /** - * 校验大于、小于、小于等于、大于等于操作符的入参 - * - * @param name - * @param obj1 - * @param obj2 - * @return - */ - public static boolean checkLessMoreParam(String name, Object obj1, Object obj2) { - if (obj1 instanceof FormField) { - String componentKey = ((FormField) obj1).getComponentKey(); - if (ComponentConfig.isNumberComponent(componentKey)) { - if (obj2 instanceof Number) { - return true; - } else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) { - return true; - } else { - throw new RuntimeException("筛选条件[" + name + "]:数字控件右边必须是数字"); - } - } - if (componentKey.equals(ComponentType.DateComponent.toString())) { - if (obj2 instanceof String && Validator.isDate((String) obj2)) { - return true; - } else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { - return true; - } else { - throw new RuntimeException("筛选条件[" + name + "]:日期控件右边必须是日期字符串"); - } - - } - if (componentKey.equals(ComponentType.TimeComponent.toString())) { - if (obj2 instanceof String && Validator.isTime((String) obj2)) { - return true; - } else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { - return true; - } else { - throw new RuntimeException("筛选条件[" + name + "]:时间控件右边必须是时间字符串"); - } - } - } - throw new RuntimeException("筛选条件[" + name + "]:左边必须是数字控件或时间控件"); - } - - /** - * 校验等于号的入参 - * - * @param obj1 - * @param obj2 - * @return - */ - public static boolean checkEqParam(Object obj1, Object obj2) { - if (obj1 instanceof DataType) { - String componentKey = ((FormField) obj1).getComponentKey(); - if (ComponentConfig.isNumberComponent(componentKey)) { - if (obj2 instanceof DataType) { - if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) { - return true; - } else { - throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); - } - } else if (StringUtils.isEmpty(obj2 + "") || Validator.isFloat(obj2 + "")) { - return true; - } else { - throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); - } - } else if (ComponentConfig.isOptionComponent(componentKey)) { - if (StringUtils.isEmpty(obj2 + "") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { - return true; - } else { - throw new RuntimeException("筛选条件[=]:选项控件右边必须是选项"); - } - } else { - if (StringUtils.isEmpty(obj2 + "") || obj2 instanceof String || obj2 instanceof Character) { - return true; - } else if (obj2 instanceof DataType) { - if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { - return true; - } else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { - return true; - } else { - throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); - } - } else { - throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); - } - } - } - throw new RuntimeException("筛选条件[=]:左边必须是表单控件"); - } - - /** - * 校验不等于号的入参 - * - * @param obj1 - * @param obj2 - * @return - */ - public static boolean checkNotEqParam(Object obj1, Object obj2) { - if (obj1 instanceof FormField) { - String componentKey = ((FormField) obj1).getComponentKey(); - if (ComponentConfig.isNumberComponent(componentKey)) { - if (obj2 instanceof DataType) { - if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) { - return true; - } else { - throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); - } - } else if (StringUtils.isEmpty(obj2 + "") || Validator.isFloat(obj2 + "")) { - return true; - } else { - throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); - } - } else if (ComponentConfig.isOptionComponent(componentKey)) { - if (StringUtils.isEmpty(obj2 + "") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { - return true; - } else { - throw new RuntimeException("筛选条件[!=]:选项控件右边必须是选项"); - } - } else { - if (StringUtils.isEmpty(obj2 + "") || obj2 instanceof String || obj2 instanceof Character) { - return true; - } else if (obj2 instanceof DataType) { - if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { - return true; - } else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { - return true; - } else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { - return true; - } else { - throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); - } - } else { - throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); - } - } - } - throw new RuntimeException("筛选条件[!=]:左边必须是表单控件"); - } -} +// dataType.setComponentKey(dataType1.getComponentKey()); +// dataType.setSubFormId(dataType1.getSubFormId()); +// } +// } catch (Exception e) { +// logger.error("err", e); +// } +// +// } +// +// /** +// * 校验大于、小于、小于等于、大于等于操作符的入参 +// * +// * @param name +// * @param obj1 +// * @param obj2 +// * @return +// */ +// public static boolean checkLessMoreParam(String name, Object obj1, Object obj2) { +// if (obj1 instanceof FormField) { +// String componentKey = ((FormField) obj1).getComponentKey(); +// if (ComponentConfig.isNumberComponent(componentKey)) { +// if (obj2 instanceof Number) { +// return true; +// } else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[" + name + "]:数字控件右边必须是数字"); +// } +// } +// if (componentKey.equals(ComponentType.DateComponent.toString())) { +// if (obj2 instanceof String && Validator.isDate((String) obj2)) { +// return true; +// } else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[" + name + "]:日期控件右边必须是日期字符串"); +// } +// +// } +// if (componentKey.equals(ComponentType.TimeComponent.toString())) { +// if (obj2 instanceof String && Validator.isTime((String) obj2)) { +// return true; +// } else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[" + name + "]:时间控件右边必须是时间字符串"); +// } +// } +// } +// throw new RuntimeException("筛选条件[" + name + "]:左边必须是数字控件或时间控件"); +// } +// +// /** +// * 校验等于号的入参 +// * +// * @param obj1 +// * @param obj2 +// * @return +// */ +// public static boolean checkEqParam(Object obj1, Object obj2) { +// if (obj1 instanceof DataType) { +// String componentKey = ((FormField) obj1).getComponentKey(); +// if (ComponentConfig.isNumberComponent(componentKey)) { +// if (obj2 instanceof DataType) { +// if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); +// } +// } else if (StringUtils.isEmpty(obj2 + "") || Validator.isFloat(obj2 + "")) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字"); +// } +// } else if (ComponentConfig.isOptionComponent(componentKey)) { +// if (StringUtils.isEmpty(obj2 + "") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[=]:选项控件右边必须是选项"); +// } +// } else { +// if (StringUtils.isEmpty(obj2 + "") || obj2 instanceof String || obj2 instanceof Character) { +// return true; +// } else if (obj2 instanceof DataType) { +// if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { +// return true; +// } else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); +// } +// } else { +// throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符"); +// } +// } +// } +// throw new RuntimeException("筛选条件[=]:左边必须是表单控件"); +// } +// +// /** +// * 校验不等于号的入参 +// * +// * @param obj1 +// * @param obj2 +// * @return +// */ +// public static boolean checkNotEqParam(Object obj1, Object obj2) { +// if (obj1 instanceof FormField) { +// String componentKey = ((FormField) obj1).getComponentKey(); +// if (ComponentConfig.isNumberComponent(componentKey)) { +// if (obj2 instanceof DataType) { +// if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); +// } +// } else if (StringUtils.isEmpty(obj2 + "") || Validator.isFloat(obj2 + "")) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字"); +// } +// } else if (ComponentConfig.isOptionComponent(componentKey)) { +// if (StringUtils.isEmpty(obj2 + "") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[!=]:选项控件右边必须是选项"); +// } +// } else { +// if (StringUtils.isEmpty(obj2 + "") || obj2 instanceof String || obj2 instanceof Character) { +// return true; +// } else if (obj2 instanceof DataType) { +// if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { +// return true; +// } else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { +// return true; +// } else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) { +// return true; +// } else { +// throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); +// } +// } else { +// throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符"); +// } +// } +// } +// throw new RuntimeException("筛选条件[!=]:左边必须是表单控件"); +// } +//} diff --git a/src/com/engine/salary/formlua/func/compare/GreaterOperator.java b/src/com/engine/salary/formlua/func/compare/GreaterOperator.java index ba9f3050b..21df856fc 100644 --- a/src/com/engine/salary/formlua/func/compare/GreaterOperator.java +++ b/src/com/engine/salary/formlua/func/compare/GreaterOperator.java @@ -91,7 +91,7 @@ public class GreaterOperator extends OperatorEqualsLessMore { logger.error("err", e); result.setContent(false); } - Compareutils.buildLessMoreFilterParam(result, this.name, op1, op2); +// Compareutils.buildLessMoreFilterParam(result, this.name, op1, op2); return result; } diff --git a/src/com/engine/salary/formlua/func/compare/LessEqOperator.java b/src/com/engine/salary/formlua/func/compare/LessEqOperator.java index 13e0815d6..46ddcc38c 100644 --- a/src/com/engine/salary/formlua/func/compare/LessEqOperator.java +++ b/src/com/engine/salary/formlua/func/compare/LessEqOperator.java @@ -89,7 +89,7 @@ public class LessEqOperator extends OperatorEqualsLessMore { logger.error("err",e); result.setContent(false); } - Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); +// Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); return result; } diff --git a/src/com/engine/salary/formlua/func/compare/LessOperator.java b/src/com/engine/salary/formlua/func/compare/LessOperator.java index 5d5348889..ffe6b6b0c 100644 --- a/src/com/engine/salary/formlua/func/compare/LessOperator.java +++ b/src/com/engine/salary/formlua/func/compare/LessOperator.java @@ -89,7 +89,7 @@ public class LessOperator extends OperatorEqualsLessMore { logger.error("err",e); result.setContent(false); } - Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); +// Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); return result; } diff --git a/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java b/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java index 5b34a14bf..188e4812e 100644 --- a/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java +++ b/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java @@ -88,7 +88,7 @@ public class NotEqueOperator extends OperatorEqualsLessMore { logger.error("err", e); result.setContent(false); } - Compareutils.buildNotEqFilterParam(result, op1, op2); +// Compareutils.buildNotEqFilterParam(result, op1, op2); return result; } diff --git a/src/com/engine/salary/formlua/func/compare/WOperatorDiv.java b/src/com/engine/salary/formlua/func/compare/WOperatorDiv.java index 85b8c8be4..d4d612bf8 100644 --- a/src/com/engine/salary/formlua/func/compare/WOperatorDiv.java +++ b/src/com/engine/salary/formlua/func/compare/WOperatorDiv.java @@ -1,9 +1,9 @@ package com.engine.salary.formlua.func.compare; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.util.ExcelParamUtil; import com.ql.util.express.instruction.op.OperatorMultiDiv; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.excel.formula.util.ExcelParamUtil; -import com.weaver.teams.util.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,50 +17,51 @@ import java.util.List; * @date: */ public class WOperatorDiv extends OperatorMultiDiv { - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Override - public Object executeInner(Object[] list) throws Exception { - DataType result=new DataType(); - result.setDataType(DataType.NUMBER); - Object[] newList=new Object[2]; -// IgnoreParamFilter.checkNumberOper(list,"/"); - Object firstParam= ExcelParamUtil.getParamContent(list[0],""); - Object secondParam=ExcelParamUtil.getParamContent(list[1],""); - if(StringUtils.isEmpty(firstParam+"") || StringUtils.isEmpty(secondParam+"")){ - result.setContent(0); - return result; - }else if(firstParam.toString().equalsIgnoreCase("0") || secondParam.toString().equalsIgnoreCase("0")){ - result.setContent(0); - return result; - } - if(firstParam instanceof Object[] || secondParam instanceof Object[]){ - try { - List operList= CommonOper.operDivMultiList(firstParam,secondParam,"/"); - Object[] results=new Object[operList.size()]; - for (int i=0;i operList = CommonOper.operDivMultiList(firstParam, secondParam, "/"); + Object[] results = new Object[operList.size()]; + for (int i = 0; i < operList.size(); i++) { + Object[] excuteArray = operList.get(i); + results[i] = super.executeInner(excuteArray); + } + return results; + } catch (Exception e) { + logger.error("err", e); + return 0; + } + } + newList[0] = firstParam; + newList[1] = secondParam; + try { + Object r = super.executeInner(newList); + logger.info("乘法运算:" + r.toString()); + result.setContent(new BigDecimal(r + "")); + } catch (Exception e) { + logger.info("除法计算异常返回0:" + e.getMessage()); + result.setContent(0); + } + return result; + } + + public WOperatorDiv(String name) { + super(name); + } } diff --git a/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java b/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java deleted file mode 100644 index bbdc37dec..000000000 --- a/src/com/engine/salary/formlua/func/date/DateTimeTestServiceImpl.java +++ /dev/null @@ -1,1208 +0,0 @@ -package com.engine.salary.formlua.func.date; - -import com.alibaba.fastjson.JSONObject; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.excel.formula.entity.parameter.DateAndString; -import com.weaver.excel.formula.entity.parameter.FuncNames; -import com.weaver.excel.formula.util.*; -import com.weaver.teams.domain.user.DataCollectionEmployee; -import com.weaver.teams.util.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -@Service("dateTimeTestService") -public class DateTimeTestServiceImpl implements DateTimeService { - protected final Logger logger = LoggerFactory.getLogger(getClass()); - private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - private String format="yyyy-MM-dd HH:mm:ss"; - private Calendar calendar=Calendar.getInstance(); - - /** - * 返回当前日期时间 - * @return - */ - @Override - public DataType now(Object... objects) { - int number= IgnoreParamFilter.getSetFuncNumber(FuncNames.NOW.toString()); - if(objects.length>0){ - throw new RuntimeException("NOW函数不能有参数"); - } - formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String nowStr=formatter.format(new Date()); - return new DataType(DataType.STRING,nowStr); - } - - /** - * 返回当前日期 - * @return - */ - @Override - public DataType today(Object... objects) { - int number=IgnoreParamFilter.getSetFuncNumber(FuncNames.TODAY.toString()); - if(objects.length>0){ - throw new RuntimeException("TODAY函数不能有参数"); - } - formatter=new SimpleDateFormat("yyyy-MM-dd"); - String dateStr=formatter.format(new Date()); - return new DataType(DataType.STRING,dateStr); - } - - /** - * 格式化时间日期 - * @param objects - * @return - */ - @Override - public DataType dateFormat(Object... objects) { - Class[] typeObjects=new Class[]{DateAndString.class,String.class}; - String func="DATEFORMAT"; - IgnoreParamFilter.commonFilter(func,2,2,typeObjects,objects); - Object result=objects[0]; - String dateStr=""; - Object p1=objects[0]; - Object p2=objects[1]; - if(ExcelParamUtil.checkIsNull(p1,p2)){ - throw new RuntimeException("日期格式化函数参数不能为空"); - } - if(p1 instanceof DataType){ - DataType dataType=(DataType) p1; - if(dataType.getDataType().equalsIgnoreCase(DataType.STRING) || dataType.getDataType().equalsIgnoreCase(DataType.DATE)){ - dateStr="2020-09-08 12:00"; - }else{ - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - number-=1; - throw new RuntimeException(func+"函数格式错误"); - } - - }else { - if(p1 instanceof Date){ - dateStr=formatter.format(p1); - }else { - dateStr=p1.toString(); - } - } - String formatStr=(ExcelParamUtil.getParamContent(p2,"string")!=null?ExcelParamUtil.getParamContent(p2,"string"):"").toString().replaceAll("D","d"); - try { - String formatterStr= DateUtil.buildFormat(dateStr); - formatter=new SimpleDateFormat(formatterStr); - Date sourceDate=formatter.parse(dateStr); - formatter= new SimpleDateFormat(formatStr); - dateStr=formatter.format(sourceDate); - result=dateStr; - } catch (ParseException e) { - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - number-=1; - JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数格式错误"); - throw new RuntimeException(errorJson.getString("msg")); - } - return new DataType(DataType.STRING,result); - } - - /** - * 两个日期加减 - * @param - * @param - * @return - */ - @Override - public DataType dateDiff(Object... objects){ - Class[] typeObjects=new Class[]{DateAndString.class,DateAndString.class,String.class}; - IgnoreParamFilter.commonFilter("DATEDIFF",2,3,typeObjects,objects); - Long secondsL=new Long(60*60*1000);//计算日期时间间距的单位,默认为小时 - - Long nd = buildSecondsFmt("D"); - Long nh = buildSecondsFmt("H"); - Long nm = buildSecondsFmt("I"); - Long ns = buildSecondsFmt("S"); - - - Double result=new Double(0); - String type="D"; - String sContent=DateUtil.getContent(objects[0],formatter); - String eContent=DateUtil.getContent(objects[1],formatter); - if(ExcelParamUtil.checkIsNull(sContent,eContent,ExcelParamUtil.CHECKLEVEL_STRING)){ - return new DataType(DataType.NUMBER,0); - } - Date startDate=null; - Date endDate=null; - - format= DateUtil.buildFormat(sContent); - startDate=formateDateStr(sContent,format); - format=DateUtil.buildFormat(eContent); - endDate=formateDateStr(eContent,format); - if(startDate==null||endDate==null){ - return new DataType(DataType.NUMBER,0); - } - Calendar cal1 = Calendar.getInstance(); - cal1.setTime(startDate); - //当前时间 - Calendar cal2 = Calendar.getInstance(); - cal2.setTime(endDate); - - - long diff = cal2.getTime().getTime() - cal1.getTime().getTime(); - - if(objects.length==3){ - type=ExcelParamUtil.getParamContent(objects[2],"string")!=null?ExcelParamUtil.getParamContent(objects[2],"string").toString():""; - secondsL=buildSecondsFmt(type); - } - Double time=new Double(0); - boolean checkType=true; - switch (type){ - case "Y": - time= getTime(startDate, endDate)/(nd.doubleValue())/365.0; - break; - case "M": - Long monthR=getByField(cal1, cal2, Calendar.YEAR)*12 + getByField(cal1, cal2, Calendar.MONTH); - time= monthR.doubleValue(); - break; - case "D": - double dayR=getTime(startDate, endDate)/(nd.doubleValue()); - time= dayR; - break; - case "H": - double hourH=getTime(startDate, endDate)/(nh.doubleValue()); - time= hourH; - break; - case "I": - double minuR= getTime(startDate, endDate)/(nm.doubleValue()); - time=minuR; - break; - case "S": - double seconR=getTime(startDate, endDate)/ns.doubleValue(); - time= seconR; - break; - default: - checkType=false; - break; - } - if(!checkType){ - String func="DATEDIFF"; - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson= ErrorUtil.buildError(func,number-1,number-1,func+"函数第3个参数不正确"); - throw new RuntimeException(errorJson.getString("msg")); - } - BigDecimal b = new BigDecimal(time); - double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - result=f1; - return new DataType(DataType.NUMBER,result); - } - - /** - * 日期加减天数 - * @param objects - * @return - */ - @Override - public DataType dateAdd(Object... objects) { - Class[] typeObjects=new Class[]{DateAndString.class,Integer.class,String.class}; - IgnoreParamFilter.commonFilter("DATEADD",2,3,typeObjects,objects); - - String type="D"; - if(objects.length==3){ - type=objects[2].toString(); - } - - Object tcontent=DateUtil.getContent(objects[0],formatter); - Double numD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[1],"")!=null?ExcelParamUtil.getParamContent(objects[1],"").toString():""); - - int num=numD.intValue(); - if(ExcelParamUtil.checkIsNull(tcontent,numD,type,ExcelParamUtil.CHECKLEVEL_STRING)){ - throw new RuntimeException("日期加减函数的参数不能为空"); - } - Object result=""; - - try { - Date date=null; - if(tcontent instanceof String || tcontent instanceof Character){ - format=DateUtil.buildFormat(tcontent.toString()); - if(null==format){ - throw new RuntimeException("日期加减函数的格式化参数不能为空"); - } - date=formateDateStr(tcontent.toString(),format); - }else { - date=(Date)tcontent; - } - Calendar cal = Calendar.getInstance(); - cal.setTime(date); - boolean checkType=true; - switch (type){ - case "Y": - cal.add(Calendar.YEAR,num); - break; - case "M": - cal.add(Calendar.MONTH,num); - break; - case "D": - cal.add(Calendar.DAY_OF_MONTH,num); - break; - case "H": - cal.add(Calendar.HOUR_OF_DAY,num); - break; - case "I": - cal.add(Calendar.MINUTE,num); - break; - case "S": - cal.add(Calendar.SECOND,num); - break; - default: - checkType=false; - break; - } - if(!checkType){ - String func="DATEADD"; - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson= ErrorUtil.buildError(func,number-1,number-1,func+"函数第3个参数不正确"); - throw new RuntimeException(errorJson.getString("msg")); - } - Date newDate=cal.getTime(); - String nDate=formateDateStr(newDate,format); - result=nDate; - - } catch (ParseException e) { - logger.error("err",e); - } - return new DataType(DataType.STRING,result); - } - - /** - * 返回年份 - * @param objects - * @return - */ - @Override - public DataType year(Object... objects) { - Object reuslt=new Object(); - Class[] typeObjects=new Class[]{DateAndString.class}; - IgnoreParamFilter.commonFilter("YEAR",1,1,typeObjects,objects); - Object obj=objects[0]; - Object date=DateUtil.getContent(obj,formatter); - if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ - return new DataType(DataType.NUMBER,0); - } - int year=0; - try { - year=getDateTimeValue(date,"Y","YEAR"); - reuslt=year; - } catch (ParseException e) { - logger.error("err",e); - } - - return new DataType(DataType.NUMBER,reuslt); - } - - /** - * 返回是今年第几月 - * @param objects - * @return - */ - @Override - public DataType month(Object... objects) { - - Object reuslt=new Object(); - Class[] typeObjects=new Class[]{DateAndString.class}; - IgnoreParamFilter.commonFilter("MONTH",1,1,typeObjects,objects); - Object obj=objects[0]; - Object date=DateUtil.getContent(obj,formatter); - if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ - return new DataType(DataType.NUMBER,0); - } - boolean isDate=checkDateString(date!=null?date.toString():""); - if(!isDate){ - return new DataType(DataType.NUMBER,0); - } - int month=0; - try { - month=getDateTimeValue(date,"M","MONTH"); - reuslt=month+1; - } catch (ParseException e) { - logger.error("err",e); - } - - return new DataType(DataType.NUMBER,reuslt); - } - - /** - * 返回日期是本月几号 - * @param objects - * @return - */ - @Override - public DataType day(Object... objects) { - Object reuslt=new Object(); - Class[] typeObjects=new Class[]{DateAndString.class}; - IgnoreParamFilter.commonFilter("DAY",1,1,typeObjects,objects); - Object obj=objects[0]; - Object date=DateUtil.getContent(obj,formatter); - if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ - return new DataType(DataType.NUMBER,0); - } - int day=0; - try { - day=getDateTimeValue(date,"D","DAY"); - reuslt=day; - } catch (ParseException e) { - logger.error("err",e); - } - - return new DataType(DataType.NUMBER,reuslt); - - } - - /** - * 返回时钟位置 - * @param objects - * @return - */ - @Override - public DataType hour(Object... objects) { - - Object reuslt=new Object(); - Class[] typeObjects=new Class[]{DateAndString.class}; - IgnoreParamFilter.commonFilter("HOUR",1,1,typeObjects,objects); - Object obj=objects[0]; - Object date=DateUtil.getContent(obj,formatter); - if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ - return new DataType(DataType.NUMBER,0); - } - Integer hour=0; - try { - hour=getDateTimeValue(date,"H","HOUR"); - reuslt=hour; - } catch (ParseException e) { - logger.error("err",e); - } - - return new DataType(DataType.NUMBER,reuslt); - - } - - /** - * 返回分钟位置 - * @param objects - * @return - */ - @Override - public DataType minute(Object... objects) { - Object reuslt=new Object(); - Class[] typeObjects=new Class[]{DateAndString.class}; - IgnoreParamFilter.commonFilter("MINUTE",1,1,typeObjects,objects); - Object obj=objects[0]; - Object date=DateUtil.getContent(obj,formatter); - if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ - return new DataType(DataType.NUMBER,0); - } - int minute=0; - try { - minute=getDateTimeValue(date,"I","MINUTE"); - - reuslt=minute; - } catch (ParseException e) { - logger.error("err",e); - } - - return new DataType(DataType.NUMBER,reuslt); - } - - /*** - * 返回秒钟位置 - * @param objects - * @return - */ - @Override - public DataType seconds(Object... objects) { - Object reuslt=new Object(); - Class[] typeObjects=new Class[]{DateAndString.class}; - IgnoreParamFilter.commonFilter("SECOND",1,1,typeObjects,objects); - Object obj=objects[0]; - Object date=DateUtil.getContent(obj,formatter); - if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ - return new DataType(DataType.NUMBER,0); - } - int seconds=0; - try { - seconds=getDateTimeValue(date,"S","SECOND"); - reuslt=seconds; - } catch (ParseException e) { - logger.error("err",e); - } - - return new DataType(DataType.NUMBER,reuslt); - - } - - /** - * 计算是本月的第几周 - * @param objects - * @return - */ - @Override - public DataType weekNum(Object... objects) { - Class[] typeObjects=new Class[]{DateAndString.class}; - IgnoreParamFilter.commonFilter("WEEKNUM",1,1,typeObjects,objects); - Object obj=objects[0]; - Object date=DateUtil.getContent(obj,formatter); - if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ - return new DataType(DataType.NUMBER,0); - } - int weekNum=0; - try { - //在JDK中可能会把前一年末尾的几天判定为下一年的第一周 - weekNum=getDateTimeValue(date,"WM","WEEKNUM"); - - } catch (ParseException e) { - logger.error("err",e); - } - return new DataType(DataType.NUMBER,weekNum); - } - - /** - * 判断是周几,因为周几是从周天的0开始算,所以返回数据需要减1 - * @param objects - * @return - */ - @Override - public DataType weekDay(Object... objects) { - Class[] typeObjects=new Class[]{DateAndString.class}; - IgnoreParamFilter.commonFilter("WEEKDAY",1,1,typeObjects,objects); - Object obj=objects[0]; - Object date=DateUtil.getContent(obj,formatter); - if(ExcelParamUtil.checkIsNull(date,ExcelParamUtil.CHECKLEVEL_STRING)){ - return new DataType(DataType.NUMBER,0); - } - int weekDay=0; - try { - weekDay=getDateTimeValue(date,"DW","WEEKDAY"); - } catch (ParseException e) { - logger.error("err",e); - } - - return new DataType(DataType.NUMBER,weekDay>0?(weekDay-1):weekDay); - } - - @Override - public DataType dayOfMonth(Object... objects) { - String dayType=""; - if(objects!=null && objects.length>0 && objects[0]!=null){ - dayType=objects[0].toString(); - } - - // 获取当前年份、月份、日期 - Calendar cale = Calendar.getInstance(); - // 获取当月第一天和最后一天 - SimpleDateFormat formatTemp = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - String firstday="", lastday=""; - String date=""; - switch (dayType.toLowerCase()){ - case "first": - // 获取当前月的第一天 - cale = Calendar.getInstance(); - cale.add(Calendar.MONTH, 0); - cale.set(Calendar.DAY_OF_MONTH, 1); - cale.set(Calendar.HOUR_OF_DAY,0); - cale.set(Calendar.MINUTE,0); - firstday = formatTemp.format(cale.getTime()); - date=firstday; - break; - case "last": - // 获取当前月的最后一天 - cale = Calendar.getInstance(); - cale.add(Calendar.MONTH, 1); - cale.set(Calendar.DAY_OF_MONTH, 0); - cale.set(Calendar.HOUR_OF_DAY,0); - cale.set(Calendar.MINUTE,0); - lastday = formatTemp.format(cale.getTime()); - date=lastday; - break; - default: - // 获取指定的某一天 - if(dayType==null || dayType.trim().equalsIgnoreCase("")){ - dayType="0"; - } - cale = Calendar.getInstance(); - cale.add(Calendar.MONTH, 1); - cale.set(Calendar.HOUR_OF_DAY,0); - cale.set(Calendar.MINUTE,0); - cale.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dayType)); - lastday = formatTemp.format(cale.getTime()); - date=lastday; - break; - } - logger.info("firstday:"+firstday+" lastday:"+lastday); - return new DataType(DataType.STRING,date); - } - - @Override - public DataType monthOfYear(Object... objects) { - String dayType=""; - if(objects!=null && objects.length>0 && objects[0]!=null){ - dayType=objects[0].toString(); - } - if(dayType==null || dayType.equalsIgnoreCase("")){ - dayType="0"; - } - int month=Integer.parseInt(dayType); - if(month>0){ - month-=1; - } - SimpleDateFormat dayFormatTemp = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat formatTemp = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - Calendar cale = Calendar.getInstance(); - cale.set(cale.get(Calendar.YEAR),month,1); - - String lastday = formatTemp.format(cale.getTime()); - System.out.println(lastday); - return new DataType(DataType.STRING,lastday); - } - - @Override - public DataType timeOfDay(Object... objects) { - String dayType=""; - if(objects!=null && objects.length>0 && objects[0]!=null){ - dayType=objects[0].toString(); - } - - SimpleDateFormat dayFormatTemp = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat formatTemp = new SimpleDateFormat("HH:mm"); - Calendar cale = Calendar.getInstance(); - try { - cale.setTime(dayFormatTemp.parse("2021-01-17 13:22")); - } catch (ParseException e) { - logger.error("err",e); - } - cale.set(Calendar.HOUR_OF_DAY,Integer.parseInt(dayType)); - cale.set(Calendar.MINUTE,0); - String lastday = formatTemp.format(cale.getTime()); - return new DataType(DataType.STRING,lastday); - } - - @Override - public DataType eoMonth(Object... objects) { - //校验 - Class[] typeObjects = new Class[]{DateAndString.class, Integer.class}; - IgnoreParamFilter.commonFilter("EOMONTH",1,2, typeObjects, objects); - - //获取日期和加减参数 - Object dateObj = objects[0]; - Object dateContent = dateObj != null ? DateUtil.getContent(dateObj, formatter):null; - - //不支持变量 - if(objects.length > 1 && objects[1] instanceof DataType){ - throw new RuntimeException("EOMONTH函数第二个参数只能是常量"); - } - - Object tempObj = objects.length > 1 ? objects[1]:null; - Object numObj = tempObj != null && ExcelParamUtil.getParamContent(tempObj,"") != null ? ExcelParamUtil.getParamContent(tempObj,"").toString():null; - - int num = 0; - if(numObj != null){ - try{ - num = Integer.parseInt(numObj+""); - }catch (Exception e){ - throw new RuntimeException("EOMONTH函数第二个参数只能是整数"); - } - } - if(ExcelParamUtil.checkIsNull(dateContent, ExcelParamUtil.CHECKLEVEL_STRING)) throw new RuntimeException("日期参数不能为空"); - - Date date=null; - try { - if(dateContent instanceof String || dateContent instanceof Character){ - format = DateUtil.buildFormat(dateContent.toString()); - SimpleDateFormat sdf = new SimpleDateFormat(format); - date = sdf.parse(dateContent.toString()); - }else { - date = (Date)dateContent; - } - } catch (Exception e) { - throw new RuntimeException("EOMONTH函数参数类型错误"); - } - - //在传入日期上进行月份加减操作,并设置为当月第一天 - Calendar cal = Calendar.getInstance(); - cal.setTime(date); - cal.add(Calendar.MONTH, num); - cal.set(Calendar.DAY_OF_MONTH, 1); - - //取该月最后一天 - cal.add(Calendar.MONTH,1); - cal.add(Calendar.DAY_OF_MONTH,-1); - - Date newDate = cal.getTime(); - Object rtnStr = null; - try { - rtnStr = formateDateStr(newDate,format); - } catch (ParseException e) { - logger.error("err",e); - } - return new DataType(DataType.STRING,rtnStr); - } - - @Override - public DataType workdayIntl(Object... objects) { - //校验 - String func = "NETWORKDAYSPI"; - IgnoreParamFilter.commonFilter(func,3,3, null, objects); - - //获取开始日期 - Object startObj = objects[0]; - Object startDateObj = startObj != null ? DateUtil.getContent(startObj, formatter):null; - - Date startDate = null; - if(startDateObj != null){ - if(startDateObj instanceof String || startDateObj instanceof Character){ - format = DateUtil.buildFormat(startDateObj.toString()); - - if(StringUtils.isEmpty(format)) { - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数开始时间格式错误"); - throw new RuntimeException(errorJson.getString("msg")); - } - startDate = formateDateStr(startDateObj.toString(), format); - }else { - startDate = (Date)startDateObj; - } - } - - //结束日期 - Object endObj = objects[1]; - Object endDateObj = endObj != null ? DateUtil.getContent(endObj, formatter):null; - - Date endDate = null; - if(endDateObj != null){ - - if(endDateObj instanceof String || endDateObj instanceof Character){ - format = DateUtil.buildFormat(endDateObj.toString()); - if(StringUtils.isEmpty(format)) { - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数结束时间格式错误"); - throw new RuntimeException(errorJson.getString("msg")); - } - endDate = formateDateStr(endDateObj.toString(), format); - }else { - endDate = (Date)startDateObj; - } - } - - //人员参数 - Object employeeObj = objects[2]; - if(!IgnoreParamFilter.isEmployee(employeeObj)) throw new RuntimeException(func+"函数第三个参数必须是人员参数"); - - String empIdStr = employeeObj != null ? ((DataType)employeeObj).getContent()+"" : null; - DataCollectionEmployee currEmp = employeeObj != null ? ((DataType)employeeObj).getEmployee() : null; - String tenantKey = currEmp != null ? currEmp.getTenantKey() : null; - - if(ExcelParamUtil.checkIsNull(startDate, endDate, empIdStr, ExcelParamUtil.CHECKLEVEL_STRING)){ - throw new RuntimeException(func+"函数参数不能为空"); - } - - if(StringUtils.isEmpty(tenantKey)){ - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数未能获取到租户"); - throw new RuntimeException(errorJson.getString("msg")); - } - return new DataType(DataType.NUMBER, 1); - } - - @Override - public DataType maxDate(Object... objects) { - if(objects == null || objects.length == 0){ - throw new RuntimeException("MAXDATE函数的参数不能为空"); - } - Object dateObj = null; - Date date = null; - - for(int i=0; i0){ - throw new RuntimeException("CURRYEAR函数不允许有参数"); - } - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date()); - int year=cal.get(Calendar.YEAR); - return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); - } - - @Override - public DataType currMonth(Object... objects) { - if(objects.length>0){ - throw new RuntimeException("CURRMONTH函数不允许有参数"); - } - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date()); - int year=cal.get(Calendar.MONTH)+1; - return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); - } - - @Override - public DataType currDay(Object... objects) { - if(objects.length>0){ - throw new RuntimeException("CURRDAY函数不允许有参数"); - } - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date()); - int year=cal.get(Calendar.DAY_OF_MONTH); - return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); - } - - @Override - public DataType currWeek(Object... objects) { - if(objects.length>0){ - throw new RuntimeException("CURRWEEK函数不允许有参数"); - } - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date()); - int year=cal.get(Calendar.WEEK_OF_MONTH); - return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); - } - - @Override - public DataType currHour(Object... objects) { - if(objects.length>0){ - throw new RuntimeException("CURRHOUR函数不允许有参数"); - } - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date()); - int year=cal.get(Calendar.HOUR_OF_DAY); - return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); - } - - @Override - public DataType currMinute(Object... objects) { - if(objects.length>0){ - throw new RuntimeException("CURRMINUTE函数不允许有参数"); - } - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date()); - int year=cal.get(Calendar.MINUTE); - return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); - } - - @Override - public DataType currSecond(Object... objects) { - if(objects.length>0){ - throw new RuntimeException("CURRSECOND函数不允许有参数"); - } - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date()); - int year=cal.get(Calendar.SECOND); - return new DataType(DataType.NUMBER,year, ComponentType.NumberComponent.toString()); - } - - /*******以下为日期函数的一些公共逻辑********/ - - - - - /** - * 获取日期时间的单位值,指定类型为Type,默认为 'D' 天数 - * @param date - * @param type - * @return - * @throws ParseException - */ - public Integer getDateTimeValue(Object date,String type,String func) throws ParseException { - int result=0; - try { - boolean isTime=false; - Date fDate=null; - if(date instanceof String){ - boolean isDate=checkDateString(date!=null?date.toString():""); - if(!isDate){ - return 0; - } - format=DateUtil.buildFormat(date.toString(),type); - if(format==null){ - format=DateUtil.buildFormat(date.toString()); - } - fDate=formateDateStr(date.toString(),format); - if(date.toString().indexOf(":")>0&&date.toString().indexOf("-")<0){ - isTime=true; - if(!type.equals("H")&&!type.equals("I")&&!type.equals("S")){ - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数参数错误"); - throw new RuntimeException(errorJson.getString("msg")); - } - } - }else { - fDate=(Date)date; - } - - int calendarType=0; - switch (type){ - case "Y": - calendarType=Calendar.YEAR; - break; - case "M": - calendarType=Calendar.MONTH; - break; - case "D": - calendarType=Calendar.DAY_OF_MONTH; - break; - case "H": - if(isTime){ - return Integer.parseInt(date.toString().split(":")[0]); - } - calendarType=Calendar.HOUR_OF_DAY; - break; - case "I": - if(isTime){ - return Integer.parseInt(date.toString().split(":")[1]); - } - calendarType=Calendar.MINUTE; - break; - case "S": - if(isTime){ - return Integer.parseInt(date.toString().split(":")[2]); - } - calendarType=Calendar.SECOND; - break; - case "WM": - calendarType=Calendar.WEEK_OF_YEAR; - long startTime1 = fDate.getTime(); - Calendar calendar = Calendar.getInstance(); - calendar.setFirstDayOfWeek(Calendar.SUNDAY);//设置星期一为一周开始的第一天 - calendar.setMinimalDaysInFirstWeek(4);//可以不用设置 - calendar.setTimeInMillis(startTime1);//获得当前的时间戳 - int weekOfYear = calendar.get(calendarType);//获得当前日期属于今年的第几周 - result=weekOfYear; - logger.info("当前是第"+result+"周"); - return result; - case "DW": - calendarType=Calendar.DAY_OF_WEEK; - break; - default: - calendarType=Calendar.HOUR_OF_DAY; - break; - } - calendar.setTime(fDate); - result=calendar.get(calendarType); - } catch (RuntimeException e) { - logger.error("err",e); - result=0; - } - return result; - } - /** - * 格式化日期时间 - * @param dateStr 日期时间原字符串 - * @param format 格式 - * @return - * @throws ParseException - */ - private Date formateDateStr(String dateStr,String format){ - SimpleDateFormat sdf = new SimpleDateFormat(format); - Date ndate= null; - try { - ndate = sdf.parse(dateStr); - } catch (ParseException e) { - logger.error("err",e); - } - return ndate; - } - - /** - * 格式日期时间为字符串 - * @param date - * @param format - * @return - * @throws ParseException - */ - private String formateDateStr(Date date,String format) throws ParseException { - SimpleDateFormat sdf = new SimpleDateFormat(format); - String ndate=sdf.format(date); - return ndate; - } - - - - - /** - * 判断时间间距的单位类型 - * @param type - * @return - */ - private Long buildSecondsFmt(String type){ - Long secondsL=null; - switch (type){ - case "Y": - secondsL=new Long(365*24*60*60*1000); - break; - case "M": - secondsL=new Long(30*24*60*60*1000); - break; - case "D": - secondsL=new Long(24*60*60*1000); - break; - case "H": - secondsL=new Long(60*60*1000); - break; - case "I": - secondsL=new Long(60*1000); - break; - case "S": - secondsL=new Long(1000); - break; - default: - secondsL=new Long(60*60*1000); - break; - } - return secondsL; - } - - static Calendar calendar2=Calendar.getInstance(); - public static SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - static String format2="yyyy-MM-dd HH:mm:ss"; - - - - public static Integer getDateTimeValue2(Object date,String type,String func) throws ParseException { - int result=0; - boolean isTime=false; - Date fDate=null; - if(date instanceof String){ - format2=DateUtil.buildFormat(date.toString()); - fDate=formateDateStr2(date.toString(),format2); - if(date.toString().indexOf(":")>0&&date.toString().indexOf("-")<0){ - isTime=true; - if(!type.equals("H")&&!type.equals("I")&&!type.equals("S")){ - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson=ErrorUtil.buildError(func,number,number,func+"函数参数错误"); - throw new RuntimeException(errorJson.getString("msg")); - } - } - }else { - fDate=(Date)date; - } - - int calendarType=0; - switch (type){ - case "Y": - calendarType=Calendar.YEAR; - break; - case "M": - calendarType=Calendar.MONTH; - break; - case "D": - calendarType=Calendar.DAY_OF_MONTH; - break; - case "H": - if(isTime){ - return Integer.parseInt(date.toString().split(":")[0]); - } - calendarType=Calendar.HOUR_OF_DAY; - break; - case "I": - if(isTime){ - return Integer.parseInt(date.toString().split(":")[1]); - } - calendarType=Calendar.MINUTE; - break; - case "S": - if(isTime){ - return Integer.parseInt(date.toString().split(":")[2]); - } - calendarType=Calendar.SECOND; - break; - case "WM": - calendarType=Calendar.WEEK_OF_MONTH; - break; - case "DW": - calendarType=Calendar.DAY_OF_WEEK; - break; - default: - calendarType=Calendar.HOUR_OF_DAY; - break; - } - calendar2.setTime(fDate); - result=calendar2.get(calendarType); - return result; - } - - private static Date formateDateStr2(String dateStr,String format) throws ParseException { - SimpleDateFormat sdf = new SimpleDateFormat(format); - Date ndate= null; - ndate = sdf.parse(dateStr); - return ndate; - } - private boolean checkDateString(String dateString){ - List datafList=new ArrayList(); - datafList.add("yyyyMMddHHmmss"); - datafList.add("yyyyMMdd"); - datafList.add("yyyyMMddHHmm"); - datafList.add("HH:mm"); - datafList.add("HH:mm:ss"); - if(RegularUtil.isNumber(dateString)){ - return false; - } - boolean r=false; - for(String s:datafList){ - SimpleDateFormat sdf = new SimpleDateFormat(s); - - Date ndate= null; - try { - ndate = sdf.parse(dateString); - r=true; - break; - } catch (ParseException e) { - logger.info(e.getMessage()); - r=false; - } - } - if(r){ - if(RegularUtil.isNumber(dateString)){ - r=false; - } - } - return r; - } - - - public static double getBetween(String beginTime, String endTime, String returnPattern) throws ParseException{ - - String format= DateUtil.buildFormat(beginTime); - SimpleDateFormat sdf = new SimpleDateFormat(format); - Date beginDate =sdf.parse(beginTime); - - format=DateUtil.buildFormat(endTime); - sdf = new SimpleDateFormat(format); - Date endDate =sdf.parse(endTime); - - Calendar beginCalendar = Calendar.getInstance(); - Calendar endCalendar = Calendar.getInstance(); - beginCalendar.setTime(beginDate); - endCalendar.setTime(endDate); - - double resutl; - switch (returnPattern) { - case "Y": - resutl= getTime(beginDate, endDate)/(24*60*60*1000)/365.0; - break; - case "M": - resutl= getByField(beginCalendar, endCalendar, Calendar.YEAR)*12 + getByField(beginCalendar, endCalendar, Calendar.MONTH); - break; - case "D": - resutl= getTime(beginDate, endDate)/(24*60*60*1000); - break; - case "H": - Long nd=new Long(60*60*1000); - resutl= getTime(beginDate, endDate)/(nd.doubleValue()); - break; - case "I": - resutl= getTime(beginDate, endDate)/(60*1000); - break; - case "S": - resutl= getTime(beginDate, endDate)/1000; - break; - default: - resutl= new Long(0); - break; - } - return resutl; - } - - - - private static Long getByField(Calendar beginCalendar, Calendar endCalendar, int calendarField){ - int r=endCalendar.get(calendarField) - beginCalendar.get(calendarField); - return new Long(r); - } - - private static long getTime(Date beginDate, Date endDate){ - return endDate.getTime() - beginDate.getTime(); - } - - -} diff --git a/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java b/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java index 7164fe9fd..8cc816f77 100644 --- a/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java +++ b/src/com/engine/salary/formlua/func/find/FindFuncsServiceImpl.java @@ -1,193 +1,188 @@ -package com.engine.salary.formlua.func.find; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.weaver.excel.formula.core.rpc.ExcelDubboInvoker; -import com.weaver.excel.formula.core.rpc.RpcMethod; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.excel.formula.entity.parameter.FuncNames; -import com.weaver.excel.formula.entity.parameter.standard.FormulaFilterData; -import com.weaver.excel.formula.util.ErrorUtil; -import com.weaver.excel.formula.util.ExcelParamUtil; -import com.weaver.excel.formula.util.IgnoreParamFilter; -import com.weaver.teams.domain.user.DataCollectionEmployee; -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.compress.utils.Lists; -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.lang.reflect.Array; -import java.lang.reflect.InvocationTargetException; -import java.util.List; -import java.util.Map; - -@Service("findFuncsService") -public class FindFuncsServiceImpl implements FindFuncsService{ - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - private ExcelDubboInvoker excelDubboInvoker; - - @Override - public Object chooseOne(Object... objects) { - DataType chooseResult=new DataType(); - if(objects != null && objects.length>=2){ - List dataList= ExcelParamUtil.getParamContent(objects); - Object firstData=dataList.get(0); - for (int i=1;i filterDatas = conditionObj != null ? conditionObj.getFormulaFilterDataList(): Lists.newArrayList(); - DataCollectionEmployee user = formObj.getEmployee(); - - Object[] params = {formId, filterDatas, user}; - return excelDubboInvoker.invokeCommonDubbo(DataType.class,formObj.getModule()+"", RpcMethod.choose, params); - } - - @Override - public DataType match(Object... objects) { - //参数校验 - String func = FuncNames.MATCH.toString(); - IgnoreParamFilter.commonFilter(func,2,2, null, objects); - - Object valueObj = objects[0]; - Object[] arrayObj = null; - - //将第二个参数转数组 - try{ - arrayObj = (Object[]) objects[1]; - }catch (Exception e){ - Integer number = IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第二个参数必须是数组类型"); - throw new RuntimeException(errorJson.getString("msg")); - } - - //所在下标 - int index = ArrayUtils.indexOf(arrayObj, valueObj); - return new DataType(DataType.NUMBER, index); - } - - @Override - public Object vlookups(Object... objects) { - //参数校验 - String func = FuncNames.VLOOKUPS.toString(); - IgnoreParamFilter.commonFilter(func,3,3, null, objects); - - DataType formObj = (DataType)objects[0]; - DataType conditionObj = objects[1] != null ? (DataType)objects[1] : null; - //拿出返回数据 - Object returnObjs=objects[2]; - //初始化数组 - DataType[] rtnCols = null; - //判断是否是数组 - if(returnObjs!=null && returnObjs.getClass().isArray()){ - logger.info("执行器查找函数返回数据为DataType数组"+JSON.toJSONString(returnObjs)); - //获取数组长度 - int len= Array.getLength(returnObjs); - rtnCols=new DataType[len]; - //遍历并转换数据后放入rtnCols - for(int i=0;i fieldIds = Lists.newArrayList(); - if(ArrayUtils.isNotEmpty(rtnCols)){ - for (DataType item : rtnCols) { - if(item != null && StringUtils.isNotEmpty(item.getFieldId())) fieldIds.add(item.getFieldId()); - } - } - - Long formId = formObj.getFormId(); - List filterDatas = conditionObj != null ? conditionObj.getFormulaFilterDataList() : Lists.newArrayList(); - DataCollectionEmployee user = formObj.getEmployee(); - - Object[] params = {formId+"", filterDatas, fieldIds, null,user}; - - DataType[] dataTypes=new DataType[1]; - Object dubboResult=excelDubboInvoker.invokeCommonDubbo(List.class,formObj.getModule()+"", RpcMethod.vlookups, params); - logger.info("返回结果:"+JSON.toJSONString(dubboResult)); - - if(dubboResult!=null && dubboResult instanceof List){ - try { - List resultObjectList=(List)dubboResult; - dataTypes=new DataType[resultObjectList.size()]; - for(int i =0;i classa=Class.forName(map.get("class").toString()) ; - Object typeObject=classa.newInstance(); - BeanUtils.populate(typeObject,map); - if(typeObject instanceof DataType){ - dataTypes[i]=(DataType) typeObject; - } - }else if(resultParam instanceof DataType){ - dataTypes[i]=(DataType) resultParam; - }else{ - logger.info("Dubbo接口返回异常数据类型:"+resultParam.getClass().getName()); - } - } - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } catch (InstantiationException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - }catch (Exception e){ - e.printStackTrace(); - } - }else{ - DataType nomalData=new DataType(DataType.NUMBER, 0); - dataTypes[0]=nomalData; - } - return dataTypes.length==1?dataTypes[0]:dataTypes; - } -} +//package com.engine.salary.formlua.func.find; +// +//import com.alibaba.fastjson.JSON; +//import com.alibaba.fastjson.JSONObject; +//import com.engine.salary.entity.datacollection.DataCollectionEmployee; +//import com.engine.salary.formlua.entity.parameter.DataType; +//import com.engine.salary.formlua.entity.parameter.FuncNames; +//import com.engine.salary.formlua.entity.standard.FormulaFilterData; +//import com.engine.salary.formlua.util.ErrorUtil; +//import com.engine.salary.formlua.util.ExcelParamUtil; +//import com.engine.salary.formlua.util.IgnoreParamFilter; +//import com.weaver.excel.formula.core.rpc.RpcMethod; +//import org.apache.commons.beanutils.BeanUtils; +//import org.apache.commons.compress.utils.Lists; +//import org.apache.commons.lang.ArrayUtils; +//import org.apache.commons.lang.StringUtils; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import java.lang.reflect.Array; +//import java.lang.reflect.InvocationTargetException; +//import java.util.List; +//import java.util.Map; +// +//public class FindFuncsServiceImpl implements FindFuncsService{ +// protected final Logger logger = LoggerFactory.getLogger(this.getClass()); +// private ExcelDubboInvoker excelDubboInvoker; +// +// @Override +// public Object chooseOne(Object... objects) { +// DataType chooseResult=new DataType(); +// if(objects != null && objects.length>=2){ +// List dataList= ExcelParamUtil.getParamContent(objects); +// Object firstData=dataList.get(0); +// for (int i=1;i filterDatas = conditionObj != null ? conditionObj.getFormulaFilterDataList(): Lists.newArrayList(); +// DataCollectionEmployee user = formObj.getEmployee(); +// +// Object[] params = {formId, filterDatas, user}; +// return excelDubboInvoker.invokeCommonDubbo(DataType.class,formObj.getModule()+"", RpcMethod.choose, params); +// } +// +// @Override +// public DataType match(Object... objects) { +// //参数校验 +// String func = FuncNames.MATCH.toString(); +// IgnoreParamFilter.commonFilter(func,2,2, null, objects); +// +// Object valueObj = objects[0]; +// Object[] arrayObj = null; +// +// //将第二个参数转数组 +// try{ +// arrayObj = (Object[]) objects[1]; +// }catch (Exception e){ +// Integer number = IgnoreParamFilter.getSetFuncNumber(func); +// JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第二个参数必须是数组类型"); +// throw new RuntimeException(errorJson.getString("msg")); +// } +// +// //所在下标 +// int index = ArrayUtils.indexOf(arrayObj, valueObj); +// return new DataType(DataType.NUMBER, index); +// } +// +// @Override +// public Object vlookups(Object... objects) { +// //参数校验 +// String func = FuncNames.VLOOKUPS.toString(); +// IgnoreParamFilter.commonFilter(func,3,3, null, objects); +// +// DataType formObj = (DataType)objects[0]; +// DataType conditionObj = objects[1] != null ? (DataType)objects[1] : null; +// //拿出返回数据 +// Object returnObjs=objects[2]; +// //初始化数组 +// DataType[] rtnCols = null; +// //判断是否是数组 +// if(returnObjs!=null && returnObjs.getClass().isArray()){ +// logger.info("执行器查找函数返回数据为DataType数组"+JSON.toJSONString(returnObjs)); +// //获取数组长度 +// int len= Array.getLength(returnObjs); +// rtnCols=new DataType[len]; +// //遍历并转换数据后放入rtnCols +// for(int i=0;i fieldIds = Lists.newArrayList(); +// if(!ArrayUtils.isEmpty(rtnCols)){ +// for (DataType item : rtnCols) { +// if(item != null && StringUtils.isNotEmpty(item.getFieldId())) fieldIds.add(item.getFieldId()); +// } +// } +// +// Long formId = formObj.getFormId(); +// List filterDatas = conditionObj != null ? conditionObj.getFormulaFilterDataList() : Lists.newArrayList(); +// DataCollectionEmployee user = formObj.getEmployee(); +// +// Object[] params = {formId+"", filterDatas, fieldIds, null,user}; +// +// DataType[] dataTypes=new DataType[1]; +// Object dubboResult=excelDubboInvoker.invokeCommonDubbo(List.class,formObj.getModule()+"", RpcMethod.vlookups, params); +// logger.info("返回结果:"+JSON.toJSONString(dubboResult)); +// +// if(dubboResult!=null && dubboResult instanceof List){ +// try { +// List resultObjectList=(List)dubboResult; +// dataTypes=new DataType[resultObjectList.size()]; +// for(int i =0;i classa=Class.forName(map.get("class").toString()) ; +// Object typeObject=classa.newInstance(); +// BeanUtils.populate(typeObject,map); +// if(typeObject instanceof DataType){ +// dataTypes[i]=(DataType) typeObject; +// } +// }else if(resultParam instanceof DataType){ +// dataTypes[i]=(DataType) resultParam; +// }else{ +// logger.info("Dubbo接口返回异常数据类型:"+resultParam.getClass().getName()); +// } +// } +// } catch (ClassNotFoundException e) { +// e.printStackTrace(); +// } catch (InstantiationException e) { +// e.printStackTrace(); +// } catch (IllegalAccessException e) { +// e.printStackTrace(); +// } catch (InvocationTargetException e) { +// e.printStackTrace(); +// }catch (Exception e){ +// e.printStackTrace(); +// } +// }else{ +// DataType nomalData=new DataType(DataType.NUMBER, 0); +// dataTypes[0]=nomalData; +// } +// return dataTypes.length==1?dataTypes[0]:dataTypes; +// } +//} diff --git a/src/com/engine/salary/formlua/func/find/FindFuncsTestServiceImpl.java b/src/com/engine/salary/formlua/func/find/FindFuncsTestServiceImpl.java deleted file mode 100644 index 4afb2fc0b..000000000 --- a/src/com/engine/salary/formlua/func/find/FindFuncsTestServiceImpl.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.engine.salary.formlua.func.find; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.engine.salary.formlua.entity.parameter.DataType; -import com.engine.salary.formlua.entity.parameter.FuncNames; -import com.engine.salary.formlua.util.ErrorUtil; -import com.engine.salary.formlua.util.ExcelParamUtil; -import com.engine.salary.formlua.util.IgnoreParamFilter; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.compress.utils.Lists; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; - - -public class FindFuncsTestServiceImpl implements FindFuncsService{ - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Override - public Object chooseOne(Object... objects) { - - if(objects==null || objects.length<2){ - throw new RuntimeException("CHOOSE函数的参数不能少于两个"); - } - DataType dataType=new DataType(); - boolean checkResult= IgnoreParamFilter.checkType(objects); - if(checkResult){ - int indexData=0; - Object firstObj=objects[0]; - try { - if(firstObj !=null){ - Double doubleValue=null; - if(firstObj instanceof DataType){ - DataType indexDataType=(DataType)firstObj; - if(ExcelParamUtil.findDataType(indexDataType.getDataType()).equalsIgnoreCase(DataType.NUMBER)){ - if(indexDataType.getContent()!=null){ - doubleValue=Double.parseDouble(indexDataType.getContent()+""); - } - } - }else{ - doubleValue=Double.parseDouble(firstObj+""); - } - indexData=doubleValue.intValue(); - }else{ - throw new RuntimeException("CHOOSE函数第一个参数不能为空"); - } - - } catch (NumberFormatException e) { - logger.error("err",e); - } - List dataList=ExcelParamUtil.getParamContent(objects); - if(indexData>=dataList.size()){ - indexData=dataList.size()-1; - } - Object resultObj=dataList.get(indexData); - if(resultObj!=null){ - if(resultObj instanceof DataType){ - dataType=(DataType)resultObj; - }else { - String type=ExcelParamUtil.getParamType(resultObj.getClass().getName()); - dataType.setDataType(type); - dataType.setContent(resultObj); - } - } - }else { - throw new RuntimeException("CHOOSE函数的参数类型不一致"); - } - logger.info("CHOOSE校验执行结果:"+ JSON.toJSONString(dataType)); - return dataType; - } - - @Override - public Object choose(Object... objects) { - //参数校验 - String func = FuncNames.CHOOSE.toString(); - IgnoreParamFilter.commonFilter(func,2,2, null, objects); - - //参数类型校验 - if(!(objects[0] instanceof DataType) || !DataType.FORM.equals(((DataType)objects[0]).getDataType())){ - Integer number = IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第一个参数必须是来源表"); - throw new RuntimeException(errorJson.getString("msg")); - } - - //第二个参数校验 - List conditionList = ExcelParamUtil.getParamContent(objects[1]); - if(CollectionUtils.isEmpty(conditionList)){ - Integer number = IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第二个参数返回值必须是boolean类型"); - throw new RuntimeException(errorJson.getString("msg")); - } - - DataType data = new DataType(DataType.NUMBER, 1); - List rtnList = Lists.newArrayList(); - rtnList.add(data); - return rtnList; - } - - @Override - public DataType match(Object... objects) { - //参数校验 - String func = FuncNames.MATCH.toString(); - IgnoreParamFilter.commonFilter(func,2,2, null, objects); - - Object valueObj = objects[0]; - List arrayList = ExcelParamUtil.getParamContent(objects[1]); - - if(valueObj instanceof DataType){ - valueObj = ((DataType) valueObj).getContent(); - } - - //将第二个参数转数组 - if(CollectionUtils.isEmpty(arrayList)){ - Integer number = IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第二个参数必须是数组类型"); - throw new RuntimeException(errorJson.getString("msg")); - } - - //所在下标 - int index = arrayList.indexOf(valueObj); - return new DataType(DataType.NUMBER, index); - } - - @Override - public Object vlookups(Object... objects) { - //参数校验 - String func = FuncNames.VLOOKUPS.toString(); - IgnoreParamFilter.commonFilter(func,3,3, null, objects); - - List conditionList = ExcelParamUtil.getParamContent(objects[1]); - DataType conditionObj=new DataType(); - if(conditionList!=null && conditionList.size()>1){ - conditionObj=(DataType) conditionList.get(0); - } - List rtnCols = ExcelParamUtil.getParamContent(objects[2]); - - //参数类型校验 -// if(!(objects[0] instanceof DataType) || !DataType.FORM.equals(((DataType)objects[0]).getDataType())){ -// Integer number = IgnoreParamFilter.getSetFuncNumber(func); -// JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第一个参数必须是数据源"); -// throw new RuntimeException(errorJson.getString("msg")); -// } - if(CollectionUtils.isEmpty(conditionList)){ - Integer number = IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第二个参数返回值必须是boolean类型"); - throw new RuntimeException(errorJson.getString("msg")); - } - if(conditionObj!=null && conditionObj.getSubLogic()!=null && conditionObj.getSubLogic().size()>1){ - throw new RuntimeException("VLOOKUPS函数的第二组参数不能嵌套使用逻辑函数(AND、OR)"); - } - if (CollectionUtils.isEmpty(rtnCols)){ - Integer number = IgnoreParamFilter.getSetFuncNumber(func); - JSONObject errorJson = ErrorUtil.buildError(func,number,number,func+"函数第三个参数返回值必须是集合类型"); - throw new RuntimeException(errorJson.getString("msg")); - } - - DataType data = new DataType(DataType.NUMBER, 1); -// List rtnList = Lists.newArrayList(); -// rtnList.add(data); - //函数中,涉及到集合,只解析数组类型,List识别不了 - DataType[] dataTypes=new DataType[1]; - dataTypes[0]=data; - return dataTypes.length==1?dataTypes[0]:dataTypes; - } -} diff --git a/src/com/engine/salary/formlua/func/logic/LogicService.java b/src/com/engine/salary/formlua/func/logic/LogicService.java index 722608ab3..d3811bfdb 100644 --- a/src/com/engine/salary/formlua/func/logic/LogicService.java +++ b/src/com/engine/salary/formlua/func/logic/LogicService.java @@ -4,14 +4,23 @@ import com.engine.salary.formlua.entity.parameter.DataType; public interface LogicService { - public DataType not(Object... object); - public DataType isEmpty(Object... objs); - public DataType isTrue(Object... objs); - public DataType isFalse(Object... objs); - public DataType and(Object... objs); - public DataType or(Object... objs); - public DataType likeFunc(Object... objects); - public DataType ifs(Object... objects); - public DataType find(Object... objects); - public DataType switchs(Object... objects); + public DataType not(Object... object); + + public DataType isEmpty(Object... objs); + + public DataType isTrue(Object... objs); + + public DataType isFalse(Object... objs); + + public DataType and(Object... objs); + + public DataType or(Object... objs); + + public DataType likeFunc(Object... objects); + + public DataType ifs(Object... objects); + + public DataType find(Object... objects); + + public DataType switchs(Object... objects); } diff --git a/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java index d8a9b1a81..0d0cb89a6 100644 --- a/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java +++ b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java @@ -2,10 +2,10 @@ package com.engine.salary.formlua.func.logic; import com.alibaba.fastjson.JSONObject; import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.entity.parameter.FuncNames; +import com.engine.salary.formlua.util.ErrorUtil; +import com.engine.salary.formlua.util.ExcelParamUtil; import com.engine.salary.formlua.util.IgnoreParamFilter; -import com.weaver.excel.formula.entity.parameter.FuncNames; -import com.weaver.excel.formula.util.ErrorUtil; -import com.weaver.excel.formula.util.ExcelParamUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -242,7 +242,7 @@ public class LogicServiceImpl implements LogicService { 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函数条件必须为真假值"); + 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; diff --git a/src/com/engine/salary/formlua/func/logic/LogicUtils.java b/src/com/engine/salary/formlua/func/logic/LogicUtils.java index 0768e9b12..e1fc796f3 100644 --- a/src/com/engine/salary/formlua/func/logic/LogicUtils.java +++ b/src/com/engine/salary/formlua/func/logic/LogicUtils.java @@ -2,7 +2,6 @@ package com.engine.salary.formlua.func.logic; import com.engine.salary.formlua.entity.parameter.DataType; import com.engine.salary.formlua.entity.standard.FormulaFilterData; -import com.weaver.common.form.stat.FilterFormData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/com/engine/salary/formlua/func/math/MathFuncsServiceImpl.java b/src/com/engine/salary/formlua/func/math/MathFuncsServiceImpl.java index f5a4362b3..22027195d 100644 --- a/src/com/engine/salary/formlua/func/math/MathFuncsServiceImpl.java +++ b/src/com/engine/salary/formlua/func/math/MathFuncsServiceImpl.java @@ -1,14 +1,12 @@ package com.engine.salary.formlua.func.math; import com.alibaba.fastjson.JSONObject; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.excel.formula.entity.parameter.FuncNames; -import com.weaver.excel.formula.util.ErrorUtil; -import com.weaver.excel.formula.util.ExcelParamUtil; -import com.weaver.excel.formula.util.IgnoreParamFilter; -import com.weaver.excel.formula.util.RegularUtil; -import org.springframework.stereotype.Service; +import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.entity.parameter.FuncNames; +import com.engine.salary.formlua.util.ErrorUtil; +import com.engine.salary.formlua.util.ExcelParamUtil; +import com.engine.salary.formlua.util.IgnoreParamFilter; +import com.engine.salary.formlua.util.RegularUtil; import java.math.BigDecimal; import java.util.ArrayList; @@ -16,16 +14,15 @@ import java.util.Collections; import java.util.List; import java.util.Random; -@Service("mathFuncsService") public class MathFuncsServiceImpl implements MathFuncsService { - private final String randomNumber="NUM"; - private final String randomChar="CHAR"; - private final String randomNumANDChar="FIX"; + private final String randomNumber = "NUM"; + private final String randomChar = "CHAR"; + private final String randomNumANDChar = "FIX"; @Override public DataType roundUp(Object... objects) { - Integer errorNumber= IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUNDUP.getName()); - Object number=null; + Integer errorNumber = IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUNDUP.getName()); + Object number = null; Object object = objects[0]; //小数位 @@ -33,50 +30,50 @@ public class MathFuncsServiceImpl implements MathFuncsService { Object numDigitsObj = null; //获取小数点位数参数 - if(objects != null && objects.length > 1) { + if (objects != null && objects.length > 1) { numDigitsObj = objects[1]; - if(numDigitsObj != null && numDigitsObj instanceof DataType){ - numDigitsObj = ExcelParamUtil.getParamContent(numDigitsObj,""); + if (numDigitsObj != null && numDigitsObj instanceof DataType) { + numDigitsObj = ExcelParamUtil.getParamContent(numDigitsObj, ""); } } //整数校验 - if(numDigitsObj != null){ - try{ + if (numDigitsObj != null) { + try { numDigits = (int) numDigitsObj; - }catch (Exception e){ + } catch (Exception e) { throw new RuntimeException("小数点位数必须是整数"); } } - if(object instanceof DataType){ - DataType dataType=(DataType)object; - if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDUP.toString(),errorNumber,errorNumber,"ROUNDUP函数只接受数字参数"); + if (object instanceof DataType) { + DataType dataType = (DataType) object; + if (dataType.getDataType().equalsIgnoreCase(DataType.STRING) || dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.ROUNDUP.toString(), errorNumber, errorNumber, "ROUNDUP函数只接受数字参数"); throw new RuntimeException(errorJson.getString("msg")); } - number=dataType.getContent(); - }else{ + number = dataType.getContent(); + } else { BigDecimal db = new BigDecimal(object.toString()); - number=db; + number = db; } - if(!RegularUtil.isNumber(number)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDUP.toString(),errorNumber,errorNumber,"ROUNDUP函数只接受数字参数"); + if (!RegularUtil.isNumber(number)) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.ROUNDUP.toString(), errorNumber, errorNumber, "ROUNDUP函数只接受数字参数"); throw new RuntimeException(errorJson.getString("msg")); } - BigDecimal bigDecimal = new BigDecimal(number+""); + BigDecimal bigDecimal = new BigDecimal(number + ""); Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_CEILING).doubleValue(); - if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); - return new DataType(DataType.NUMBER, result, ComponentType.NumberComponent.toString()); + if (numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); + return new DataType(DataType.NUMBER, result, "ComponentType.NumberComponent".toString()); } @Override public DataType roundDown(Object... objects) { - Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUNDDOWN.getName()); - Object number=null; + Integer errorNumber = IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUNDDOWN.getName()); + Object number = null; Object object = objects[0]; //小数位 @@ -84,49 +81,49 @@ public class MathFuncsServiceImpl implements MathFuncsService { Object numDigitsObj = null; //获取小数点位数参数 - if(objects != null && objects.length > 1) { + if (objects != null && objects.length > 1) { numDigitsObj = objects[1]; - if(numDigitsObj != null && numDigitsObj instanceof DataType){ - numDigitsObj = ExcelParamUtil.getParamContent(numDigitsObj,""); + if (numDigitsObj != null && numDigitsObj instanceof DataType) { + numDigitsObj = ExcelParamUtil.getParamContent(numDigitsObj, ""); } } //整数校验 - if(numDigitsObj != null){ - try{ + if (numDigitsObj != null) { + try { numDigits = (int) numDigitsObj; - }catch (Exception e){ + } catch (Exception e) { throw new RuntimeException("小数点位数必须是整数"); } } - if(object instanceof DataType){ - DataType dataType=(DataType)object; - if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ - return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + if (object instanceof DataType) { + DataType dataType = (DataType) object; + if (dataType.getDataType().equalsIgnoreCase(DataType.STRING) || dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)) { + return new DataType(DataType.NUMBER, 0, "ComponentType.NumberComponent".toString()); } - number=dataType.getContent(); - }else{ + number = dataType.getContent(); + } else { BigDecimal db = new BigDecimal(object.toString()); - number=db; + number = db; } - if(!RegularUtil.isNumber(number)){ - return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + if (!RegularUtil.isNumber(number)) { + return new DataType(DataType.NUMBER, 0, "ComponentType.NumberComponent".toString()); } - BigDecimal bigDecimal = new BigDecimal(number+""); + BigDecimal bigDecimal = new BigDecimal(number + ""); Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_FLOOR).doubleValue(); - if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); - return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); + if (numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); + return new DataType(DataType.NUMBER, result, "ComponentType.NumberComponent".toString()); } @Override public DataType round(Object... objects) { - Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUND.getName()); - Object number=null; + Integer errorNumber = IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUND.getName()); + Object number = null; Object object = objects[0]; //小数位 @@ -134,257 +131,257 @@ public class MathFuncsServiceImpl implements MathFuncsService { Object numDigitsObj = null; //获取小数点位数参数 - if(objects != null && objects.length > 1) { + if (objects != null && objects.length > 1) { numDigitsObj = objects[1]; - if(numDigitsObj != null && numDigitsObj instanceof DataType){ - numDigitsObj = ExcelParamUtil.getParamContent(numDigitsObj,""); + if (numDigitsObj != null && numDigitsObj instanceof DataType) { + numDigitsObj = ExcelParamUtil.getParamContent(numDigitsObj, ""); } } //整数校验 - if(numDigitsObj != null){ - try{ + if (numDigitsObj != null) { + try { numDigits = (int) numDigitsObj; - }catch (Exception e){ + } catch (Exception e) { throw new RuntimeException("小数点位数必须是整数"); } } - if(object instanceof DataType){ - DataType dataType=(DataType)object; - if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ - return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + if (object instanceof DataType) { + DataType dataType = (DataType) object; + if (dataType.getDataType().equalsIgnoreCase(DataType.STRING) || dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)) { + return new DataType(DataType.NUMBER, 0, "ComponentType.NumberComponent".toString()); } - number=dataType.getContent(); - }else{ + number = dataType.getContent(); + } else { BigDecimal db = new BigDecimal(object.toString()); - number=db; + number = db; } - if(!RegularUtil.isNumber(number)){ - return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + if (!RegularUtil.isNumber(number)) { + return new DataType(DataType.NUMBER, 0, "ComponentType.NumberComponent".toString()); } - BigDecimal bigDecimal = new BigDecimal(number+""); + BigDecimal bigDecimal = new BigDecimal(number + ""); Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_HALF_UP).doubleValue(); - if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); - return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); + if (numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); + return new DataType(DataType.NUMBER, result, "ComponentType.NumberComponent".toString()); } @Override public DataType aggregation(Object... objects) { - Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.AGGREGATION.getName()); - Double result=0d; - if(objects.length==0||objects.length<2){ - return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); + Integer errorNumber = IgnoreParamFilter.getSetFuncNumber(FuncNames.AGGREGATION.getName()); + Double result = 0d; + if (objects.length == 0 || objects.length < 2) { + return new DataType(DataType.NUMBER, result, "ComponentType.NumberComponent".toString()); } - List dataList=new ArrayList(); - for (int i=0;i dataList = new ArrayList(); + for (int i = 0; i < objects.length - 1; i++) { + boolean isArray = false; String paramType; Object objectData; - if(objects[i] instanceof DataType){ - DataType dataType1=(DataType) objects[i]; - paramType=dataType1.getDataType(); - objectData= ExcelParamUtil.getParamContent(dataType1,"string"); - }else if(objects[i] instanceof Object[]){ - Object[] arrayObjs=(Object[])objects[i]; - String arrayType=null; - objectData=""; - for (Object arrayObj:arrayObjs){ - String lcoalType=""; - if(arrayObj instanceof DataType){ - lcoalType=ExcelParamUtil.getParamType(arrayObj); - objectData+=ExcelParamUtil.getParamContent((DataType)arrayObj,"string")+"#"; - }else{ - lcoalType=ExcelParamUtil.getParamType(arrayObj.getClass().getName()); - objectData+=arrayObj+"#"; + if (objects[i] instanceof DataType) { + DataType dataType1 = (DataType) objects[i]; + paramType = dataType1.getDataType(); + objectData = ExcelParamUtil.getParamContent(dataType1, "string"); + } else if (objects[i] instanceof Object[]) { + Object[] arrayObjs = (Object[]) objects[i]; + String arrayType = null; + objectData = ""; + for (Object arrayObj : arrayObjs) { + String lcoalType = ""; + if (arrayObj instanceof DataType) { + lcoalType = ExcelParamUtil.getParamType(arrayObj); + objectData += ExcelParamUtil.getParamContent((DataType) arrayObj, "string") + "#"; + } else { + lcoalType = ExcelParamUtil.getParamType(arrayObj.getClass().getName()); + objectData += arrayObj + "#"; } - if(arrayType==null){ - arrayType=lcoalType; - }else{ - if(!arrayType.equals(lcoalType)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.AGGREGATION.toString(),errorNumber,errorNumber,"操作符参数类型不一致"); + if (arrayType == null) { + arrayType = lcoalType; + } else { + if (!arrayType.equals(lcoalType)) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.AGGREGATION.toString(), errorNumber, errorNumber, "操作符参数类型不一致"); throw new RuntimeException(errorJson.getString("msg")); } } } - paramType=arrayType; - isArray=true; - }else{ - paramType= ExcelParamUtil.getParamType(objects[i].getClass().getName()); - objectData=objects[i]; + paramType = arrayType; + isArray = true; + } else { + paramType = ExcelParamUtil.getParamType(objects[i].getClass().getName()); + objectData = objects[i]; } - paramType=ExcelParamUtil.checkParamType(paramType); - if(!paramType.equalsIgnoreCase(DataType.NUMBER)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.AGGREGATION.toString(),errorNumber,errorNumber,"统计函数只允许数字"); + paramType = ExcelParamUtil.checkParamType(paramType); + if (!paramType.equalsIgnoreCase(DataType.NUMBER)) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.AGGREGATION.toString(), errorNumber, errorNumber, "统计函数只允许数字"); throw new RuntimeException(errorJson.getString("msg")); } - if(isArray){ - String[] arrayStrs=objectData.toString().split("#"); - for (String arrayStr:arrayStrs){ - Double data=Double.parseDouble(arrayStr); + if (isArray) { + String[] arrayStrs = objectData.toString().split("#"); + for (String arrayStr : arrayStrs) { + Double data = Double.parseDouble(arrayStr); dataList.add(data); } - }else { - Double data=Double.parseDouble(objectData.toString()); + } else { + Double data = Double.parseDouble(objectData.toString()); dataList.add(data); } } - String aggType=objects[objects.length-1].toString().toLowerCase(); + String aggType = objects[objects.length - 1].toString().toLowerCase(); Collections.sort(dataList); - switch (aggType){ + switch (aggType) { case "avg": - for (Double data:dataList){ - result+=data; + for (Double data : dataList) { + result += data; } - result=result/dataList.size(); + result = result / dataList.size(); break; case "max": - result=dataList.get(dataList.size()-1); + result = dataList.get(dataList.size() - 1); break; case "min": - result=dataList.get(0); + result = dataList.get(0); break; default: - JSONObject errorJson= ErrorUtil.buildError(FuncNames.AGGREGATION.toString(),errorNumber,errorNumber,"统计函数需要类型参数"); + JSONObject errorJson = ErrorUtil.buildError(FuncNames.AGGREGATION.toString(), errorNumber, errorNumber, "统计函数需要类型参数"); throw new RuntimeException(errorJson.getString("msg")); } - return new DataType(DataType.NUMBER,result,ComponentType.NumberComponent.toString()); + return new DataType(DataType.NUMBER, result, "ComponentType.NumberComponent".toString()); } @Override public DataType mod(Object... objects) { - Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.MOD.getName()); - if(objects.length!=2){ - return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); + Integer errorNumber = IgnoreParamFilter.getSetFuncNumber(FuncNames.MOD.getName()); + if (objects.length != 2) { + return new DataType(DataType.NUMBER, 0, "ComponentType.NumberComponent".toString()); } - Double doubleOne=0d; - Double doubleTwo=0d; - for (int i=0;i5){ - digitsIntVal=5; + if (RegularUtil.isNumber(numberVal) && RegularUtil.isNumber(digitsVal)) { + Double d = Double.parseDouble(digitsVal.toString()); + int digitsIntVal = d.intValue(); + if (digitsIntVal > 5) { + digitsIntVal = 5; } - BigDecimal b = new BigDecimal(numberVal.toString()); - f1 = b.setScale(digitsIntVal, BigDecimal.ROUND_HALF_UP).doubleValue(); - if(digitsIntVal==0){ - f1=b.intValue(); + BigDecimal b = new BigDecimal(numberVal.toString()); + f1 = b.setScale(digitsIntVal, BigDecimal.ROUND_HALF_UP).doubleValue(); + if (digitsIntVal == 0) { + f1 = b.intValue(); } - }else { - JSONObject errorJson= ErrorUtil.buildError(FuncNames.TRUNC.toString(),errorNumber,errorNumber,"小数点格式化只允许数字"); + } else { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.TRUNC.toString(), errorNumber, errorNumber, "小数点格式化只允许数字"); throw new RuntimeException(errorJson.getString("msg")); } - return new DataType(DataType.NUMBER,f1,ComponentType.NumberComponent.toString()); + return new DataType(DataType.NUMBER, f1, "ComponentType.NumberComponent".toString()); } @Override - public DataType randomNumber(Object length,Object type) { - String value=""; - Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.RANDOMNUMBER.getName()); - Double numberLength=0.0; - Object param=10; - String dataValueType=""; - if(length!=null){ - if(length instanceof DataType){ - DataType dataType=(DataType)length; - dataValueType=ExcelParamUtil.checkParamType(dataType); - param=ExcelParamUtil.getParamContent(length,""); - }else{ - dataValueType=ExcelParamUtil.checkParamType(length); - param=length; + public DataType randomNumber(Object length, Object type) { + String value = ""; + Integer errorNumber = IgnoreParamFilter.getSetFuncNumber(FuncNames.RANDOMNUMBER.getName()); + Double numberLength = 0.0; + Object param = 10; + String dataValueType = ""; + if (length != null) { + if (length instanceof DataType) { + DataType dataType = (DataType) length; + dataValueType = ExcelParamUtil.checkParamType(dataType); + param = ExcelParamUtil.getParamContent(length, ""); + } else { + dataValueType = ExcelParamUtil.checkParamType(length); + param = length; } } //判断length长度数据类型是否合规 - if(!dataValueType.equalsIgnoreCase("number")){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数函数只允许数字参数"); + if (!dataValueType.equalsIgnoreCase("number")) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(), errorNumber, errorNumber, "随机数函数只允许数字参数"); throw new RuntimeException(errorJson.getString("msg")); } //判断用户设置的length是否大于0,生成的随机数长度必须是大于1的 - if(param!=null){ - numberLength=Double.parseDouble(param.toString()); - if(numberLength<=0){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数函数长度必须大于0"); + if (param != null) { + numberLength = Double.parseDouble(param.toString()); + if (numberLength <= 0) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(), errorNumber, errorNumber, "随机数函数长度必须大于0"); throw new RuntimeException(errorJson.getString("msg")); } } - String typeString=randomNumber; - if(type !=null){ - if(type instanceof DataType){ - DataType dataType=(DataType)length; - typeString=ExcelParamUtil.getParamContent(type,"").toString(); - }else{ - typeString=type.toString(); + String typeString = randomNumber; + if (type != null) { + if (type instanceof DataType) { + DataType dataType = (DataType) length; + typeString = ExcelParamUtil.getParamContent(type, "").toString(); + } else { + typeString = type.toString(); } } - switch (typeString){ + switch (typeString) { case randomNumber: - value=randomFunc(numberLength,randomNumber); + value = randomFunc(numberLength, randomNumber); break; case randomChar: - value=randomFunc(numberLength,randomChar); + value = randomFunc(numberLength, randomChar); break; case randomNumANDChar: - value=randomFunc(numberLength,randomNumANDChar); + value = randomFunc(numberLength, randomNumANDChar); break; default: - JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数的返回值只允许数字、字符以及数字和字符的混合类型"); + JSONObject errorJson = ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(), errorNumber, errorNumber, "随机数的返回值只允许数字、字符以及数字和字符的混合类型"); throw new RuntimeException(errorJson.getString("msg")); } - return new DataType(DataType.NUMBER,value,ComponentType.NumberComponent.toString()); + return new DataType(DataType.NUMBER, value, "ComponentType.NumberComponent".toString()); } @Override @@ -394,70 +391,70 @@ public class MathFuncsServiceImpl implements MathFuncsService { @Override public DataType isInt(Object... objects) { - boolean isInt=false; - if(objects[0] instanceof DataType){ - DataType dataType=(DataType)objects[0]; - isInt=RegularUtil.isInteger(dataType.getContent()); - }else{ - isInt=RegularUtil.isInteger(objects[0]); + boolean isInt = false; + if (objects[0] instanceof DataType) { + DataType dataType = (DataType) objects[0]; + isInt = RegularUtil.isInteger(dataType.getContent()); + } else { + isInt = RegularUtil.isInteger(objects[0]); } - return new DataType(DataType.BOOL,isInt); + return new DataType(DataType.BOOL, isInt); } @Override public DataType isNumber(Object... objects) { - boolean isInt=false; - if(objects[0] instanceof DataType){ - DataType dataType=(DataType)objects[0]; - isInt=RegularUtil.isNumber(dataType.getContent()); - }else{ - isInt=RegularUtil.isNumber(objects[0]); + boolean isInt = false; + if (objects[0] instanceof DataType) { + DataType dataType = (DataType) objects[0]; + isInt = RegularUtil.isNumber(dataType.getContent()); + } else { + isInt = RegularUtil.isNumber(objects[0]); } - return new DataType(DataType.BOOL,isInt); + return new DataType(DataType.BOOL, isInt); } - private String randomFunc(Double length,String type){ + private String randomFunc(Double length, String type) { Random r = new Random(); - StringBuffer sbff=new StringBuffer(); + StringBuffer sbff = new StringBuffer(); //数字类型随机数 - if(type.equalsIgnoreCase("number")){ - for (double i=0;i0){ - charloop=(length-1)/2; - numloop=charloop+1; - }else{ - charloop=length/2; - numloop=charloop; + if (length % 2 > 0) { + charloop = (length - 1) / 2; + numloop = charloop + 1; + } else { + charloop = length / 2; + numloop = charloop; } } - for (double i=0;i 1) { - numDigitsObj = objects[1]; - if(numDigitsObj != null && numDigitsObj instanceof DataType) throw new RuntimeException("ROUNDUP函数第二个参数只能是常量"); - } - - //整数校验 - if(numDigitsObj != null){ - try{ - numDigits = (int) numDigitsObj; - }catch (Exception e){ - throw new RuntimeException("小数点位数必须是整数"); - } - } - - if(object instanceof DataType){ - DataType dataType=(DataType)object; - if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDUP.toString(),errorNumber,errorNumber,"ROUNDUP函数只接受数字参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - number=dataType.getContent(); - }else{ - BigDecimal db = new BigDecimal(object.toString()); - number=db; - } - if(!RegularUtil.isNumber(number)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDUP.toString(),errorNumber,errorNumber,"ROUNDUP函数只接受数字参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - - BigDecimal bigDecimal = new BigDecimal(number+""); - Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_CEILING).doubleValue(); - - if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); - return new DataType(DataType.NUMBER, result); - } - - @Override - public DataType roundDown(Object... objects) { - Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUNDDOWN.getName()); - Object number=null; - Object object = objects[0]; - - //小数位 - int numDigits = 0; - Object numDigitsObj = null; - - //获取小数点位数参数 - if(objects != null && objects.length > 1) { - numDigitsObj = objects[1]; - if(numDigitsObj != null && numDigitsObj instanceof DataType) throw new RuntimeException("ROUNDDOWN函数第二个参数只能是常量"); - } - - //整数校验 - if(numDigitsObj != null){ - try{ - numDigits = (int) numDigitsObj; - }catch (Exception e){ - throw new RuntimeException("小数点位数必须是整数"); - } - } - - if(object instanceof DataType){ - DataType dataType=(DataType)object; - if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUNDDOWN.toString(),errorNumber,errorNumber,"ROUNDDOWN函数只接受数字参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - number=dataType.getContent(); - }else{ - BigDecimal db = new BigDecimal(object.toString()); - number=db; - } - - if(!RegularUtil.isNumber(number)){ - return new DataType(DataType.NUMBER, 0,ComponentType.NumberComponent.toString()); - } - - BigDecimal bigDecimal = new BigDecimal(number+""); - Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_FLOOR).doubleValue(); - - if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); - return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); - } - - @Override - public DataType round(Object... objects) { - Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.ROUND.getName()); - Object number=null; - Object object = objects[0]; - - //小数位 - int numDigits = 0; - Object numDigitsObj = null; - - //获取小数点位数参数 - if(objects != null && objects.length > 1) { - numDigitsObj = objects[1]; - if(numDigitsObj != null && numDigitsObj instanceof DataType) throw new RuntimeException("ROUND函数第二个参数只能是常量"); - } - - //整数校验 - if(numDigitsObj != null){ - try{ - numDigits = (int) numDigitsObj; - }catch (Exception e){ - throw new RuntimeException("小数点位数必须是整数"); - } - } - - if(object instanceof DataType){ - DataType dataType=(DataType)object; - if(dataType.getDataType().equalsIgnoreCase(DataType.STRING)||dataType.getDataType().equalsIgnoreCase(DataType.DATE) || dataType.getDataType().equalsIgnoreCase(DataType.OPTION)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUND.toString(),errorNumber,errorNumber,"ROUND函数只接受数字参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - number=dataType.getContent(); - }else{ - BigDecimal db = new BigDecimal(object.toString()); - number=db; - } - - if(!RegularUtil.isNumber(number)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.ROUND.toString(),errorNumber,errorNumber,"ROUND函数只接受数字参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - - BigDecimal bigDecimal = new BigDecimal(number+""); - Double result = bigDecimal.setScale(numDigits, BigDecimal.ROUND_HALF_UP).doubleValue(); - - if(numDigits == 0) return new DataType(DataType.NUMBER, result.intValue()); - return new DataType(DataType.NUMBER, result,ComponentType.NumberComponent.toString()); - } - - @Override - public DataType aggregation(Object... objects) { - Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.AGGREGATION.getName()); - Double result=0d; - if(objects.length==0||objects.length<2){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.AGGREGATION.toString(),errorNumber,errorNumber,"统计函数至少需要两个参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - List dataList=new ArrayList(); - for (int i=0;i5){ - digitsIntVal=5; - } - BigDecimal b = new BigDecimal(numberVal.toString()); - f1 = b.setScale(digitsIntVal, BigDecimal.ROUND_HALF_UP).doubleValue(); - if(digitsIntVal==0){ - f1=b.intValue(); - } - }else { - JSONObject errorJson= ErrorUtil.buildError(FuncNames.TRUNC.toString(),errorNumber,errorNumber,"小数点格式化只允许数字"); - throw new RuntimeException(errorJson.getString("msg")); - } - return new DataType(DataType.NUMBER,f1,ComponentType.NumberComponent.toString()); - } - - @Override - public DataType randomNumber(Object length,Object type) { - String value=""; - Integer errorNumber=IgnoreParamFilter.getSetFuncNumber(FuncNames.RANDOMNUMBER.getName()); - Double numberLength=0.0; - Object param=10; - String dataValueType=""; - if(length!=null){ - if(length instanceof DataType){ - DataType dataType=(DataType)length; - dataValueType=ExcelParamUtil.checkParamType(dataType); - param=ExcelParamUtil.getParamContent(length,""); - }else{ - dataValueType=ExcelParamUtil.checkParamType(length); - param=length; - } - } - //判断length长度数据类型是否合规 - if(!dataValueType.equalsIgnoreCase("number")){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数函数只允许数字参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - //判断用户设置的length是否大于0,生成的随机数长度必须是大于1的 - if(param!=null){ - numberLength=Double.parseDouble(param.toString()); - if(numberLength<=0){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数函数长度必须大于0"); - throw new RuntimeException(errorJson.getString("msg")); - } - } - - String typeString=randomNumber; - if(type !=null){ - if(type instanceof DataType){ - DataType dataType=(DataType)length; - typeString=ExcelParamUtil.getParamContent(type,"").toString(); - }else{ - typeString=type.toString(); - } - } - - switch (typeString){ - case randomNumber: - value=randomFunc(numberLength,randomNumber); - break; - case randomChar: - value=randomFunc(numberLength,randomChar); - break; - case randomNumANDChar: - value=randomFunc(numberLength,randomNumANDChar); - break; - default: - JSONObject errorJson= ErrorUtil.buildError(FuncNames.RANDOMNUMBER.toString(),errorNumber,errorNumber,"随机数的返回值只允许数字、字符以及数字和字符的混合类型"); - throw new RuntimeException(errorJson.getString("msg")); - - } - - return new DataType(DataType.NUMBER,value,ComponentType.NumberComponent.toString()); - } - - @Override - public DataType group(Object... objects) { - return null; - } - - @Override - public DataType isInt(Object... objects) { - if(objects==null || objects.length==0){ - throw new RuntimeException("【ISINT】函数的参数不能为空"); - } - Object paramObj=objects[0]; - String type=""; - Object content; - if(paramObj instanceof DataType){ - DataType paramDataType=(DataType)paramObj; - type=paramDataType.getDataType(); - content=paramDataType.getContent(); - }else{ - type=ExcelParamUtil.getParamType(paramObj.getClass().getName()); - content=paramObj; - } - if(!type.equalsIgnoreCase("String") && !type.equalsIgnoreCase("number")){ - throw new RuntimeException("【ISINT】函数的参数必须为字符或者数字类型"); - } - - return new DataType(DataType.BOOL,true); - } - - @Override - public DataType isNumber(Object... objects) { - if(objects==null || objects.length==0){ - throw new RuntimeException("【ISNUMBER】函数的参数不能为空"); - } - Object paramObj=objects[0]; - String type=""; - Object content; - if(paramObj instanceof DataType){ - DataType paramDataType=(DataType)paramObj; - type=paramDataType.getDataType(); - content=paramDataType.getContent(); - }else{ - type=ExcelParamUtil.getParamType(paramObj.getClass().getName()); - content=paramObj; - } - if(!type.equalsIgnoreCase("String")){ - throw new RuntimeException("【ISNUMBER】函数的参数必须为字符类型"); - } - return new DataType(DataType.BOOL,false); - } - - private String randomFunc(Double length,String type){ - Random r = new Random(); - StringBuffer sbff=new StringBuffer(); - - //数字类型随机数 - if(type.equalsIgnoreCase("number")){ - for (double i=0;i0){ - charloop=(length-1)/2; - numloop=charloop+1; - }else{ - charloop=length/2; - numloop=charloop; - } - } - for (double i=0;i newObjs=new ArrayList<>(); - for (int i=0;i0){ - for(Object object:newObjs){ - newString.append(ExcelParamUtil.getParamContent(object,"string")); - } - } - return new DataType(DataType.STRING,newString.toString(), ComponentType.Text.toString()); - } - - @Override - public DataType text(Object... objs) { - String func="TEXT"; - Integer number=IgnoreParamFilter.getSetFuncNumber(func); - if(null==objs||objs.length>1){ - JSONObject errorJson= ErrorUtil.buildError(func,0,number,func+"函数参数只允许一个参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - Object obj=objs[0]; - if(null==obj){ - JSONObject errorJson= ErrorUtil.buildError(func,0,number,func+"函数参数为空"); - throw new RuntimeException(errorJson.getString("msg")); - } - Object result; - if(obj instanceof DataType){ - DataType dataType=(DataType)obj; - result=ExcelParamUtil.getParamContent(dataType,"string").toString(); - }else { - result=obj.toString(); - } - - return new DataType(DataType.STRING,result,ComponentType.Text.toString()); - } - - @Override - public DataType value(Object... objs) { - Object txt=objs[0]; - Object result; - Class[] typeObjects=new Class[]{}; - - IgnoreParamFilter.commonFilter("VALUE",1,1,typeObjects,objs); - String regEx="[^0-9]"; - Pattern p = Pattern.compile(regEx); - String paramContent=""; - if(ExcelParamUtil.getParamContent(txt,"string")!=null){ - paramContent=ExcelParamUtil.getParamContent(txt,"string")!=null?ExcelParamUtil.getParamContent(txt,"string").toString():""; - } - if(!RegularUtil.isNumber(paramContent)){ - paramContent="0"; - } - Matcher m = p.matcher(paramContent); - String numberStr=m.replaceAll("").trim(); - if(!numberStr.equals("")){ - if(numberStr.length()>19){ - numberStr=numberStr.substring(0,19); - } - Long txtTint=Long.parseLong(numberStr); - result=txtTint; - }else { - result=0; - } - return new DataType(DataType.NUMBER,result,ComponentType.Text.toString()); - } - - @Override - public DataType len(Object... txt) { - Class[] typeObjects=new Class[]{String.class}; - IgnoreParamFilter.commonFilter("LEN",1,1,typeObjects,txt); - int length=ExcelParamUtil.getParamContent(txt[0],"string").toString().length(); - - return new DataType(DataType.NUMBER,length,ComponentType.Text.toString()); - } - - @Override - public DataType search(Object... objects) { - Class[] typeObjects=new Class[]{String.class,String.class,Integer.class}; - int idx=0; - IgnoreParamFilter.commonFilter("SEARCH",2,3,typeObjects,objects); - return new DataType(DataType.NUMBER,0,ComponentType.NumberComponent.toString()); - } - - @Override - public DataType replace(Object... objects) { - Object result; - Class[] typeObjects=new Class[]{String.class,Integer.class,Integer.class,String.class}; - IgnoreParamFilter.commonFilter("REPLACE",4,4,typeObjects,objects); - return new DataType(DataType.STRING,"泛微网络",ComponentType.Text.toString()); - } - - @Override - public DataType repeat(Object... objects) { - Object result; - Class[] typeObjects=new Class[]{String.class,Integer.class}; - IgnoreParamFilter.commonFilter("REPEAT",2,2,typeObjects,objects); - String str=ExcelParamUtil.getParamContent(objects[0],"string").toString(); - Double repeatD=Double.parseDouble(ExcelParamUtil.getParamContent(objects[1],"string").toString()); - int repeat=repeatD.intValue(); - StringBuffer sbf=new StringBuffer(); - for(int i=0;i chars=new ArrayList<>(); - sourceStr=ExcelParamUtil.appendString(fillStr,sourceStr,sourceLength,fillPosition); - } - result=sourceStr; - return new DataType(DataType.STRING,result,ComponentType.Text.toString()); - } - - @Override - public DataType trim(Object... objects) { - Object result; - Class[] typeObjects=new Class[]{String.class}; - IgnoreParamFilter.commonFilter("TRIM",1,1,typeObjects,objects); - - String sourceStr=ExcelParamUtil.getParamContent(objects[0],"string").toString().trim(); - result=sourceStr; - return new DataType(DataType.STRING,result,ComponentType.Text.toString()); - } - - @Override - public DataType left(Object... objects) { - Object result; - Class[] typeObjects=new Class[]{String.class,Integer.class}; - IgnoreParamFilter.commonFilter("LEFT",2,2,typeObjects,objects); - result="泛微"; - return new DataType(DataType.STRING,result,ComponentType.Text.toString()); - } - - @Override - public DataType right(Object... objects) { - Object result; - Class[] typeObjects=new Class[]{String.class,Integer.class}; - IgnoreParamFilter.commonFilter("RIGHT",2,2,typeObjects,objects); - result="泛微"; - return new DataType(DataType.STRING,result,ComponentType.Text.toString()); - } - - @Override - public DataType mid(Object... objects) { - Object result; - Class[] typeObjects=new Class[]{String.class,Integer.class,Integer.class}; - IgnoreParamFilter.commonFilter("MID",3,3,typeObjects,objects); - result="泛微云"; - return new DataType(DataType.STRING,result,ComponentType.Text.toString()); - } - - @Override - public DataType score(Object... objs) { - Object result; - IgnoreParamFilter.checkFraction("SCORE",objs); - DataType fraction=(DataType)objs[0]; - result=fraction.getScore(); - if(result==null){ - result=0; - } - return new DataType(DataType.NUMBER,result,ComponentType.NumberComponent.toString()); - } - - @Override - public DataType idCard(Object... objects) { - Integer number=IgnoreParamFilter.getSetFuncNumber(FuncNames.IDCARD.getName()); - DataType result=new DataType(); - IgnoreParamFilter.checkValiIdCard("IDCARD",objects); - if(objects[0] instanceof DataType){ - DataType dataType=(DataType) objects[0]; - dataType.setContent("43070319900202665X"); - dataType.setText("43070319900202665X"); - } - RegularUtil.validateIDCard(ExcelParamUtil.getParamContent(objects[0],"string").toString()); - String operType=objects[1].toString(); - String idCard=objects[0].toString(); - if(operType.equalsIgnoreCase("BD")){ - result=bd(idCard); - }else if(operType.equalsIgnoreCase("NA")){ - result=nativePlace(idCard); - }else if(operType.equalsIgnoreCase("AGE")){ - result=age(idCard); - }else if(operType.equalsIgnoreCase("GENDER")){ - result=sex(idCard); - }else{ - JSONObject errorJson=ErrorUtil.buildError("IDCARD",number,number,"IDCARD函数参数错误"); - throw new RuntimeException(errorJson.getString("msg")); - } - return result; - } - - - @Override - public DataType sex(String idCard) { - return new DataType(DataType.STRING,"男",ComponentType.Text.toString()); - } - - @Override - public DataType nativePlace(String idCard) { - return new DataType(DataType.STRING,"上海市闵行区浦江",ComponentType.Text.toString()); - } - - @Override - public DataType age(String idCard) { - return new DataType(DataType.NUMBER,18,ComponentType.NumberComponent.toString()); - } - - @Override - public DataType bd(String idCard) { - return new DataType(DataType.STRING,"2020-11-11",ComponentType.Text.toString()); - } - - @Override - public DataType addressAnalysis(Object obj1, Object obj2) { - Integer number=IgnoreParamFilter.getSetFuncNumber(FuncNames.ADDRESS.getName()); - String addressType=ExcelParamUtil.checkParamType(obj1); - String levelType=ExcelParamUtil.checkParamType(obj2); - if(!addressType.equalsIgnoreCase("string") || !levelType.equalsIgnoreCase("string")){ - JSONObject errorJson=ErrorUtil.buildError(FuncNames.ADDRESS.toString(),number,number,"地址解析函数的参数只允许字符类型"); - throw new RuntimeException(errorJson.getString("msg")); - } - String level=""; - if(obj2 instanceof DataType){ - level=ExcelParamUtil.getParamContent(obj2,"").toString(); - }else { - level=obj2.toString(); - } - - String result=""; - switch (level){ - case PROVINCE: - break; - case CITY: - break; - case TOWN: - break; - case ADDR: - break; - default: - JSONObject errorJson=ErrorUtil.buildError(FuncNames.ADDRESS.toString(),number,number,"行政区块只支持省、市、区县"); - throw new RuntimeException(errorJson.getString("msg")); - - } - - return new DataType(DataType.STRING,"上海市",ComponentType.Text.toString()); - } - - @Override - public DataType subString(Object... objects) { - if(objects==null || objects.length!=3){ - throw new RuntimeException("字符截取函数只允许3个参数:源字符、截取开始位置、截取结束位置"); - } - List paramTypeList=new ArrayList<>(); - paramTypeList.add(DataType.STRING); - paramTypeList.add(DataType.NUMBER); - paramTypeList.add(DataType.NUMBER); - List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); - if(errorIdxList!=null && errorIdxList.size()>0){ - String errorMsg=""; - switch (errorIdxList.get(0)){ - case 0: - errorMsg="【SUBSTRING 字符截取函数】的第一个参数只能是字符串"; - break; - case 1: - errorMsg="【SUBSTRING 字符截取函数】的第二个参数只能是数字"; - break; - case 2: - errorMsg="【SUBSTRING 字符截取函数】的第三个参数只能是数字"; - break; - default: - errorMsg="【SUBSTRING 字符截取函数】的参数异常"; - break; - } - throw new RuntimeException(errorMsg); - } - return new DataType(DataType.STRING,"上海市",ComponentType.Text.toString()); - } - - @Override - public DataType substitue(Object... objects) { - if(objects==null || objects.length!=3){ - throw new RuntimeException("字符查找替换函数只允许3个参数:源字符、被替换字符、新字符"); - } - List paramTypeList=new ArrayList<>(); - paramTypeList.add(DataType.STRING); - paramTypeList.add(DataType.STRING); - paramTypeList.add(DataType.STRING); - List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); - if(errorIdxList!=null && errorIdxList.size()>0){ - String errorMsg=""; - switch (errorIdxList.get(0)){ - case 0: - errorMsg="【SUBSTITUE 字符查找替换函数】的第一个参数只能是字符串"; - break; - case 1: - errorMsg="【SUBSTITUE 字符查找替换函数】的第二个参数只能是字符串"; - break; - case 2: - errorMsg="【SUBSTITUE 字符查找替换函数】的第三个参数只能是字符串"; - break; - default: - errorMsg="【SUBSTITUE 字符查找替换函数】的参数异常"; - break; - } - throw new RuntimeException(errorMsg); - } - - return new DataType(DataType.STRING,"上海市",ComponentType.Text.toString()); - } - - @Override - public DataType extract(Object... objects) { - if(objects==null || objects.length!=2){ - throw new RuntimeException("字符提取函数只允许2个参数:源字符、提取类型"); - } - List paramTypeList=new ArrayList<>(); - paramTypeList.add(DataType.STRING); - paramTypeList.add(DataType.STRING); - List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); - if(errorIdxList!=null && errorIdxList.size()>0){ - String errorMsg=""; - switch (errorIdxList.get(0)){ - case 0: - errorMsg="【EXTRACT 字符提取函数】的第一个参数只能是字符串"; - break; - case 1: - errorMsg="【EXTRACT 字符提取函数】的第二个参数只能是字符串"; - break; - default: - errorMsg="【EXTRACT 字符提取函数】的参数异常"; - break; - } - throw new RuntimeException(errorMsg); - } - return new DataType(DataType.STRING,"上海市",ComponentType.Text.toString()); - } - - @Override - public DataType lower(Object... objects) { - if(objects==null || objects.length!=1){ - throw new RuntimeException("字符小写函数只允许1个参数:源字符"); - } - List paramTypeList=new ArrayList<>(); - paramTypeList.add(DataType.STRING); - List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); - if(errorIdxList!=null && errorIdxList.size()>0){ - throw new RuntimeException("【LOWER 字符小写函数】的参数只能是字符串"); - } - return new DataType(DataType.STRING,"abc",ComponentType.Text.toString()); - } - - @Override - public DataType upper(Object... objects) { - if(objects==null || objects.length!=1){ - throw new RuntimeException("字符大写函数只允许1个参数:源字符"); - } - List paramTypeList=new ArrayList<>(); - paramTypeList.add(DataType.STRING); - List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); - if(errorIdxList!=null && errorIdxList.size()>0){ - throw new RuntimeException("【UPPER 字符大写函数】的参数只能是字符串"); - } - return new DataType(DataType.STRING,"ABC",ComponentType.Text.toString()); - } - - @Override - public DataType exact(Object... objects) { - if(objects==null || objects.length!=2){ - throw new RuntimeException("字符比较函数只允许2个参数:字符、字符"); - } - List paramTypeList=new ArrayList<>(); - paramTypeList.add(DataType.STRING); - paramTypeList.add(DataType.STRING); - List errorIdxList=IgnoreParamFilter.checkParamType(objects,paramTypeList); - if(errorIdxList!=null && errorIdxList.size()>0){ - String errorMsg=""; - switch (errorIdxList.get(0)){ - case 0: - errorMsg="【EXACT 字符比较函数】的第一个参数只能是字符串"; - break; - case 1: - errorMsg="【EXACT 字符比较函数】的第二个参数只能是字符串"; - break; - default: - errorMsg="【EXTRACT 字符比较函数】的参数异常"; - break; - } - throw new RuntimeException(errorMsg); - } - return new DataType(DataType.BOOL,true); - } - - @Override - public DataType isString(Object... objects) { - if(objects==null){ - throw new RuntimeException("ISSTRING函数的参数不能为空"); - } - if(objects.length!=1){ - throw new RuntimeException("ISSTRING函数只能有一个参数"); - } - Object object=objects[0]; - String fieldType=""; - DataType resultDataType; - if(object instanceof DataType){ - DataType dataType=(DataType)object; - fieldType= ExcelParamUtil.checkParamType(dataType.getDataType()); - }else { - fieldType= ExcelParamUtil.getParamType(object.getClass().getName()); - } - if(fieldType.equalsIgnoreCase("string")){ - resultDataType=new DataType(DataType.BOOL,true); - }else{ - resultDataType=new DataType(DataType.BOOL,false); - } - return resultDataType; - } - - @Override - public DataType isJson(Object... objects) { - Object object=objects[0]; - String fieldType=""; - DataType resultDataType; - Object content=null; - if(object instanceof DataType){ - DataType dataType=(DataType)object; - content=dataType.getContent(); - fieldType= ExcelParamUtil.checkParamType(dataType.getDataType()); - }else { - fieldType= ExcelParamUtil.getParamType(object.getClass().getName()); - content=object; - } - if(fieldType.equalsIgnoreCase("string")){ - if(content!=null){ - try { - logger.info("isJson函数的JSON字符转换:"+content+""); - resultDataType=new DataType(DataType.BOOL,true); - } catch (Exception e) { - logger.info("err",e); - logger.info("不是正常的JSON字符"); - resultDataType=new DataType(DataType.BOOL,false); - } - }else{ - resultDataType=new DataType(DataType.BOOL,false); - } - }else{ - resultDataType=new DataType(DataType.BOOL,false); - } - return resultDataType; - } - - @Override - public DataType getJSONValue(Object... objects) { - Object object=objects[0]; - String fieldType=""; - DataType resultDataType; - Object content=null; - if(object instanceof DataType){ - DataType dataType=(DataType)object; - content=dataType.getContent(); - fieldType= ExcelParamUtil.checkParamType(dataType.getDataType()); - }else { - fieldType= ExcelParamUtil.getParamType(object.getClass().getName()); - content=object; - } - if(fieldType.equalsIgnoreCase("string")){ - if(content!=null){ - try { - logger.info("isJson函数的JSON字符转换:"+content+""); - resultDataType=new DataType(DataType.STRING,"JSON字符"); - } catch (Exception e) { - logger.info("err",e); - logger.info("不是正常的JSON字符"); - throw new RuntimeException("GETJSONVALUE函数只能接收JSON字符"); - } - }else{ - throw new RuntimeException("GETJSONVALUE函数只能接收JSON字符"); - } - }else{ - throw new RuntimeException("GETJSONVALUE函数只能接收JSON字符"); - } - return resultDataType; - } -} diff --git a/src/com/engine/salary/formlua/util/DateUtil.java b/src/com/engine/salary/formlua/util/DateUtil.java index 9abbdeb30..64e97e2bd 100644 --- a/src/com/engine/salary/formlua/util/DateUtil.java +++ b/src/com/engine/salary/formlua/util/DateUtil.java @@ -1,6 +1,6 @@ package com.engine.salary.formlua.util; -import com.weaver.excel.formula.entity.parameter.DataType; +import com.engine.salary.formlua.entity.parameter.DataType; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.joda.time.DateTime; diff --git a/src/com/engine/salary/formlua/util/ExcelParamUtil.java b/src/com/engine/salary/formlua/util/ExcelParamUtil.java index 8d576c7b5..0e51fe919 100644 --- a/src/com/engine/salary/formlua/util/ExcelParamUtil.java +++ b/src/com/engine/salary/formlua/util/ExcelParamUtil.java @@ -1,15 +1,10 @@ package com.engine.salary.formlua.util; import com.alibaba.fastjson.JSONObject; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.formlua.entity.parameter.DataType; -import com.weaver.common.form.component.base.Component; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.common.form.conditionrule.FixedField; -import com.weaver.common.form.metadata.ModuleSource; -import com.weaver.excel.formula.entity.parameter.*; -import com.weaver.excel.formula.entity.standard.execute.FixFieldType; +import com.engine.salary.formlua.entity.parameter.IllegalList; +import com.engine.salary.formlua.entity.parameter.ParamType; +import com.engine.salary.formlua.entity.standard.execute.FixFieldType; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -306,26 +301,26 @@ public class ExcelParamUtil { } - public static void checkParamArrayDataType(List formulavars) { - for (FormulaVar formulaVar : formulavars) { - if (formulaVar.getComponentKey() != null && !formulaVar.getComponentKey().equals("")) { - String componentKey = formulaVar.getComponentKey(); - Arrays.sort(NUMBERCOMPONENTS); - int searchIdx = Arrays.binarySearch(NUMBERCOMPONENTS, componentKey); - if (searchIdx >= 0) { - formulaVar.setFieldType("Number"); - } - Arrays.sort(ReturnType.CHECK_TYPE); - if (Arrays.binarySearch(ReturnType.CHECK_TYPE, componentKey) >= 0) { - formulaVar.setFieldType("String"); - } - if (formulaVar.getOptionId() != null) { - formulaVar.setFieldType("String"); - } - } - - } - } +// public static void checkParamArrayDataType(List formulavars) { +// for (FormulaVar formulaVar : formulavars) { +// if (formulaVar.getComponentKey() != null && !formulaVar.getComponentKey().equals("")) { +// String componentKey = formulaVar.getComponentKey(); +// Arrays.sort(NUMBERCOMPONENTS); +// int searchIdx = Arrays.binarySearch(NUMBERCOMPONENTS, componentKey); +// if (searchIdx >= 0) { +// formulaVar.setFieldType("Number"); +// } +// Arrays.sort(ReturnType.CHECK_TYPE); +// if (Arrays.binarySearch(ReturnType.CHECK_TYPE, componentKey) >= 0) { +// formulaVar.setFieldType("String"); +// } +// if (formulaVar.getOptionId() != null) { +// formulaVar.setFieldType("String"); +// } +// } +// +// } +// } /** @@ -335,59 +330,59 @@ public class ExcelParamUtil { * @param formulaVars * @return */ - public static String replaceAllParam(String sql, List formulaVars) { - if (null == formulaVars) { - return sql; - } - //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 - String partternStr = "\\{.+?\\}{1}?"; - Pattern pt = Pattern.compile(partternStr); - Matcher matcher = pt.matcher(sql); - - int loop = 0; - //替换逻辑 - while (matcher.find()) { - String matherString = matcher.group(); - //替换特殊字符 - matherString = matherString.replace("{", ""); - matherString = matherString.replace("}", ""); - matherString = matherString.replace("(", "\\("); - matherString = matherString.replace(")", "\\)"); - matherString = matherString.replaceAll("\\+", "\\\\+"); - matherString = matherString.replaceAll("\\-", "\\\\-"); - matherString = matherString.replaceAll("\\*", "\\\\*"); - matherString = matherString.replaceAll("\\/", "\\\\/"); - if (formulaVars != null && loop < formulaVars.size()) { - FormulaVar formulaVar = formulaVars.get(loop); - //如果参数异常,获取Key为空,根据数据中相应的值做判断,判断是什么类型的控件 - if (formulaVar.getKey() == null) { - //表格类型变量替换 - if (formulaVar.getFormId() != null && formulaVar.getFieldId() == null) { - sql = sql.replaceFirst(matherString, formulaVar.getFormId().toString()); - //普通变量的替换 - } else if (formulaVar.getFormId() != null && formulaVar.getFieldId() != null && formulaVar.getOptionId() == null) { - sql = sql.replaceFirst(matherString, formulaVar.getFieldId().toString()); - } else if (formulaVar.getOptionId() != null) { - //选项型变量的替换是用optionID - sql = sql.replaceFirst(matherString, formulaVar.getOptionId().toString()); - } else { - sql = sql.replaceFirst(matherString, formulaVar.getOptionId().toString()); - } - } else { - //普通变量的替换是用Key - sql = sql.replaceFirst(matherString, formulaVar.getKey()); - } - loop++; - } - } - - ExcelParamUtil.findAggParam(sql); - - if (loop != formulaVars.size()) { - throw new RuntimeException("参数列表与执行语句不一致"); - } - return sql; - } +// public static String replaceAllParam(String sql, List formulaVars) { +// if (null == formulaVars) { +// return sql; +// } +// //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 +// String partternStr = "\\{.+?\\}{1}?"; +// Pattern pt = Pattern.compile(partternStr); +// Matcher matcher = pt.matcher(sql); +// +// int loop = 0; +// //替换逻辑 +// while (matcher.find()) { +// String matherString = matcher.group(); +// //替换特殊字符 +// matherString = matherString.replace("{", ""); +// matherString = matherString.replace("}", ""); +// matherString = matherString.replace("(", "\\("); +// matherString = matherString.replace(")", "\\)"); +// matherString = matherString.replaceAll("\\+", "\\\\+"); +// matherString = matherString.replaceAll("\\-", "\\\\-"); +// matherString = matherString.replaceAll("\\*", "\\\\*"); +// matherString = matherString.replaceAll("\\/", "\\\\/"); +// if (formulaVars != null && loop < formulaVars.size()) { +// FormulaVar formulaVar = formulaVars.get(loop); +// //如果参数异常,获取Key为空,根据数据中相应的值做判断,判断是什么类型的控件 +// if (formulaVar.getKey() == null) { +// //表格类型变量替换 +// if (formulaVar.getFormId() != null && formulaVar.getFieldId() == null) { +// sql = sql.replaceFirst(matherString, formulaVar.getFormId().toString()); +// //普通变量的替换 +// } else if (formulaVar.getFormId() != null && formulaVar.getFieldId() != null && formulaVar.getOptionId() == null) { +// sql = sql.replaceFirst(matherString, formulaVar.getFieldId().toString()); +// } else if (formulaVar.getOptionId() != null) { +// //选项型变量的替换是用optionID +// sql = sql.replaceFirst(matherString, formulaVar.getOptionId().toString()); +// } else { +// sql = sql.replaceFirst(matherString, formulaVar.getOptionId().toString()); +// } +// } else { +// //普通变量的替换是用Key +// sql = sql.replaceFirst(matherString, formulaVar.getKey()); +// } +// loop++; +// } +// } +// +// ExcelParamUtil.findAggParam(sql); +// +// if (loop != formulaVars.size()) { +// throw new RuntimeException("参数列表与执行语句不一致"); +// } +// return sql; +// } /** @@ -673,138 +668,138 @@ public class ExcelParamUtil { return typeName; } - /** - * 运行公式时的参数设置 - * - * @param formulavars - * @param expressMap - * @return - */ - public static Map buildParam(List formulavars, Map expressMap) { - checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 - for (FormulaVar formulaVar : formulavars) { - DataType dataType = new DataType(); - String key = null; - if (formulaVar.getFormId() != null && formulaVar.getFieldId() == null) { - key = "form" + formulaVar.getFormId(); - } else if (formulaVar.getFieldId() != null && formulaVar.getOptionId() == null) { - String fieldId = formulaVar.getFieldId().toString(); - key = "field" + fieldId; - dataType.setFieldId(fieldId); - } else if (formulaVar.getOptionId() != null) { - key = "option" + formulaVar.getOptionId(); - dataType.setContent(formulaVar.getOptionId()); - } else { - key = "option" + formulaVar.getOptionId(); - } - - Arrays.sort(funcArray); - int sidx = Arrays.binarySearch(funcArray, key); - if (sidx >= 0) { - throw new RuntimeException("变量名非法"); - } - if (formulaVar.getOptionId() != null) { - dataType.setDataType(DataType.OPTION); - } - if (expressMap.containsKey(key)) { - String newKey = ExcelParamUtil.randomNumber() + "_" + key; - expressMap.put(newKey, dataType); - formulaVar.setKey(newKey); - } else { - expressMap.put(key, dataType); - } - } - - return expressMap; - } - - /*** - * 验证函数时构建参数设置参数值 - * 把FormulaVar类型的参数封装成DataType类型参数 - * @param formulavars 入参类型 - * @param expressMap 返回Map - * @return - */ - public static Map buildLocalParam(List formulavars, Map expressMap, DataCollectionEmployee employee) { - - checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 - for (FormulaVar formulaVar : formulavars) { - DataType dataType = new DataType(); - dataType.setScore(0d); - dataType.setName((null == formulaVar.getName() || formulaVar.getName().equals("")) ? formulaVar.getParent() : formulaVar.getName()); - dataType.setFieldId(formulaVar.getFieldId() != null ? formulaVar.getFieldId().toString() : null); - String key = null; - if (formulaVar.getModule() != null && !formulaVar.getModule().equals("")) { - try { - dataType.setModule(formulaVar.getModule()); - } catch (IllegalArgumentException e) { - logger.error("err", e); - dataType.setModule(formulaVar.getModule()); - } - } - dataType.setFormId(formulaVar.getFormId() != null ? Long.parseLong(formulaVar.getFormId()) : null); - if (formulaVar.getName() != null && formulaVar.getName().equals("当前操作人")) { - key = formulaVar.getKey(); - formulaVar.setContent(employee.getUserId().toString()); - dataType.setContent(formulaVar.getContent()); - dataType.setText(formulaVar.getContent()); - dataType.setDataType(DataType.OPTION); - } else { - if (formulaVar.getFormId() != null && formulaVar.getFieldId() == null && formulaVar.getOptionId() == null) { - key = "form" + formulaVar.getFormId().toString(); - ThreadLocalData threadLocalData = new ThreadLocalData(); - threadLocalData.setEmployee(employee); - threadLocalData.setModuleSource(ModuleSource.biaoge); - ParamContext.get().setValue(formulaVar.getFormId().toString(), threadLocalData); - } else if (formulaVar.getFieldId() != null && formulaVar.getOptionId() == null) { - String fieldId = formulaVar.getFieldId().toString(); - key = "field" + fieldId; - dataType.setFieldId(fieldId); - } else if (formulaVar.getOptionId() != null) { - key = "option" + formulaVar.getOptionId().toString(); - dataType.setContent(formulaVar.getOptionId()); - dataType.setText(formulaVar.getName()); - dataType.setFormId(null); - } else { - key = "option" + formulaVar.getOptionId().toString(); - } - } - - Arrays.sort(funcArray); - int sidx = Arrays.binarySearch(funcArray, key); - if (sidx >= 0) { - throw new RuntimeException("变量名非法"); - } - if (formulaVar.getOptionId() != null) { - dataType.setDataType(DataType.OPTION); - } - - if (StringUtils.isEmpty(dataType.getDataType())) { - String typeKey = null; - if (StringUtils.isNotEmpty(formulaVar.getFieldType())) { - typeKey = formulaVar.getFieldType(); - } else if (StringUtils.isNotEmpty(formulaVar.getType())) { - typeKey = formulaVar.getType(); - } else if (StringUtils.isNotEmpty(formulaVar.getFieldType())) { - typeKey = formulaVar.getFieldType(); - } - dataType.setDataType(ExcelParamUtil.findTestDataType(typeKey)); - } - if (StringUtils.isEmpty(dataType.getComponentKey())) { - dataType.setComponentKey(formulaVar.getComponentKey()); - } - if (expressMap.containsKey(key)) { - String newKey = key + ExcelParamUtil.randomNumber(); - formulaVar.setKey(newKey); - dataType.setAggCndKey(key); - expressMap.put(newKey, dataType); - } else { - expressMap.put(key, dataType); - } - } - - return expressMap; - } +// /** +// * 运行公式时的参数设置 +// * +// * @param formulavars +// * @param expressMap +// * @return +// */ +// public static Map buildParam(List formulavars, Map expressMap) { +// checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 +// for (FormulaVar formulaVar : formulavars) { +// DataType dataType = new DataType(); +// String key = null; +// if (formulaVar.getFormId() != null && formulaVar.getFieldId() == null) { +// key = "form" + formulaVar.getFormId(); +// } else if (formulaVar.getFieldId() != null && formulaVar.getOptionId() == null) { +// String fieldId = formulaVar.getFieldId().toString(); +// key = "field" + fieldId; +// dataType.setFieldId(fieldId); +// } else if (formulaVar.getOptionId() != null) { +// key = "option" + formulaVar.getOptionId(); +// dataType.setContent(formulaVar.getOptionId()); +// } else { +// key = "option" + formulaVar.getOptionId(); +// } +// +// Arrays.sort(funcArray); +// int sidx = Arrays.binarySearch(funcArray, key); +// if (sidx >= 0) { +// throw new RuntimeException("变量名非法"); +// } +// if (formulaVar.getOptionId() != null) { +// dataType.setDataType(DataType.OPTION); +// } +// if (expressMap.containsKey(key)) { +// String newKey = ExcelParamUtil.randomNumber() + "_" + key; +// expressMap.put(newKey, dataType); +// formulaVar.setKey(newKey); +// } else { +// expressMap.put(key, dataType); +// } +// } +// +// return expressMap; +// } +// +// /*** +// * 验证函数时构建参数设置参数值 +// * 把FormulaVar类型的参数封装成DataType类型参数 +// * @param formulavars 入参类型 +// * @param expressMap 返回Map +// * @return +// */ +// public static Map buildLocalParam(List formulavars, Map expressMap, DataCollectionEmployee employee) { +// +// checkParamArrayDataType(formulavars);//检查控件类型,设置相应控件对应的数据类型 +// for (FormulaVar formulaVar : formulavars) { +// DataType dataType = new DataType(); +// dataType.setScore(0d); +// dataType.setName((null == formulaVar.getName() || formulaVar.getName().equals("")) ? formulaVar.getParent() : formulaVar.getName()); +// dataType.setFieldId(formulaVar.getFieldId() != null ? formulaVar.getFieldId().toString() : null); +// String key = null; +// if (formulaVar.getModule() != null && !formulaVar.getModule().equals("")) { +// try { +// dataType.setModule(formulaVar.getModule()); +// } catch (IllegalArgumentException e) { +// logger.error("err", e); +// dataType.setModule(formulaVar.getModule()); +// } +// } +// dataType.setFormId(formulaVar.getFormId() != null ? Long.parseLong(formulaVar.getFormId()) : null); +// if (formulaVar.getName() != null && formulaVar.getName().equals("当前操作人")) { +// key = formulaVar.getKey(); +// formulaVar.setContent(employee.getUserId().toString()); +// dataType.setContent(formulaVar.getContent()); +// dataType.setText(formulaVar.getContent()); +// dataType.setDataType(DataType.OPTION); +// } else { +// if (formulaVar.getFormId() != null && formulaVar.getFieldId() == null && formulaVar.getOptionId() == null) { +// key = "form" + formulaVar.getFormId().toString(); +// ThreadLocalData threadLocalData = new ThreadLocalData(); +// threadLocalData.setEmployee(employee); +// threadLocalData.setModuleSource(ModuleSource.biaoge); +// ParamContext.get().setValue(formulaVar.getFormId().toString(), threadLocalData); +// } else if (formulaVar.getFieldId() != null && formulaVar.getOptionId() == null) { +// String fieldId = formulaVar.getFieldId().toString(); +// key = "field" + fieldId; +// dataType.setFieldId(fieldId); +// } else if (formulaVar.getOptionId() != null) { +// key = "option" + formulaVar.getOptionId().toString(); +// dataType.setContent(formulaVar.getOptionId()); +// dataType.setText(formulaVar.getName()); +// dataType.setFormId(null); +// } else { +// key = "option" + formulaVar.getOptionId().toString(); +// } +// } +// +// Arrays.sort(funcArray); +// int sidx = Arrays.binarySearch(funcArray, key); +// if (sidx >= 0) { +// throw new RuntimeException("变量名非法"); +// } +// if (formulaVar.getOptionId() != null) { +// dataType.setDataType(DataType.OPTION); +// } +// +// if (StringUtils.isEmpty(dataType.getDataType())) { +// String typeKey = null; +// if (StringUtils.isNotEmpty(formulaVar.getFieldType())) { +// typeKey = formulaVar.getFieldType(); +// } else if (StringUtils.isNotEmpty(formulaVar.getType())) { +// typeKey = formulaVar.getType(); +// } else if (StringUtils.isNotEmpty(formulaVar.getFieldType())) { +// typeKey = formulaVar.getFieldType(); +// } +// dataType.setDataType(ExcelParamUtil.findTestDataType(typeKey)); +// } +// if (StringUtils.isEmpty(dataType.getComponentKey())) { +// dataType.setComponentKey(formulaVar.getComponentKey()); +// } +// if (expressMap.containsKey(key)) { +// String newKey = key + ExcelParamUtil.randomNumber(); +// formulaVar.setKey(newKey); +// dataType.setAggCndKey(key); +// expressMap.put(newKey, dataType); +// } else { +// expressMap.put(key, dataType); +// } +// } +// +// return expressMap; +// } /** * 格式化变量为数字 @@ -1037,19 +1032,19 @@ public class ExcelParamUtil { return builder.toString(); } - public static FormulaVar getFixFieldVar(List list, String key) { - FormulaVar formulaVar = new FormulaVar(); - for (FixedField fixedField : list) { - if (fixedField.getKey().equals(key)) { - Component component = (Component) fixedField.getMatchs().get(0); - ComponentType componentType = component.getComponentKey(); - if (componentType.equals(ComponentType.Text)) { - - } - } - } - return formulaVar; - } +// public static FormulaVar getFixFieldVar(List list, String key) { +// FormulaVar formulaVar = new FormulaVar(); +// for (FixedField fixedField : list) { +// if (fixedField.getKey().equals(key)) { +// Component component = (Component) fixedField.getMatchs().get(0); +// ComponentType componentType = component.getComponentKey(); +// if (componentType.equals(ComponentType.Text)) { +// +// } +// } +// } +// return formulaVar; +// } public static String findAggCndStr(String sql, Map paramMap) { String partternStr = "(COUNT|SUM|MIN|MAX|AVG|count|sum|min|max)+\\(+(.)+\\)+"; diff --git a/src/com/engine/salary/formlua/util/ExcelStandardUtil.java b/src/com/engine/salary/formlua/util/ExcelStandardUtil.java index ba3cb6da8..fc6e95fab 100644 --- a/src/com/engine/salary/formlua/util/ExcelStandardUtil.java +++ b/src/com/engine/salary/formlua/util/ExcelStandardUtil.java @@ -1,492 +1,492 @@ -package com.engine.salary.formlua.util; - - -import com.alibaba.fastjson.JSON; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.excel.formula.api.entity.DataOption; -import com.weaver.excel.formula.api.entity.FormulaVar; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.excel.formula.entity.parameter.ParamFactory; -import com.weaver.excel.formula.entity.standard.front.CurrentVar; -import com.weaver.teams.domain.user.DataCollectionEmployee; -import com.weaver.teams.util.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class ExcelStandardUtil { - protected static final Logger logger = LoggerFactory.getLogger(ExcelStandardUtil.class); - - public static Map replaceAllParam(String sql, List localVars,List dataVars, DataCollectionEmployee employee){ - if(null!=localVars){ - for (FormulaVar formulaVar:localVars){ - if(StringUtils.isNotEmpty(formulaVar.getDataId()) && StringUtils.isEmpty(formulaVar.getFormId())){ - formulaVar.setFormId(formulaVar.getDataId()); - } - if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_department")){ - formulaVar.setType("department"); - formulaVar.setComponentKey(ComponentType.Department.toString()); - } - if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_superior")){ - formulaVar.setType("employee"); - formulaVar.setComponentKey(ComponentType.Employee.toString()); - } - } - } - - Map dataMap=new HashMap<>(); - Map paramKeyMap=new HashMap<>(); - //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 - String partternStr="\\{.+?\\}{1}?"; - Pattern pt=Pattern.compile(partternStr); - Matcher matcher=pt.matcher(sql); - - int loop=0; - //替换逻辑 - while (matcher.find()){ - String matherString=matcher.group(); - //替换特殊字符 - matherString=matherString.replace("{",""); - matherString=matherString.replace("}",""); - matherString=matherString.replace("(","\\("); - matherString=matherString.replace(")","\\)"); - matherString=matherString.replaceAll("\\+","\\\\+"); - matherString=matherString.replaceAll("\\-","\\\\-"); - matherString=matherString.replaceAll("\\*","\\\\*"); - matherString=matherString.replaceAll("\\/","\\\\/"); - if(localVars!=null&&loop"+JSON.toJSONString(dataType)); - } - }else{ - String typeKey=localFormulaVar.getProperKey(); - if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ - typeKey=localFormulaVar.getFieldType(); - }else if(StringUtils.isNotEmpty(localFormulaVar.getType())){ - typeKey=localFormulaVar.getType(); - }else if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ - typeKey=localFormulaVar.getFieldType(); - localFormulaVar.setComponentKey(localFormulaVar.getFieldType()); - } - dataType.setDataType(ExcelParamUtil.findDataType(typeKey)); - dataType.setFieldId(localFormulaVar.getFieldId()); - dataType.setFormId(StringUtils.isNotEmpty(localFormulaVar.getFormId())?Long.parseLong(localFormulaVar.getFormId()):null); - try { - dataType.setModule(localFormulaVar.getModule()); - } catch (IllegalArgumentException e) { - logger.error("err",e); - dataType.setModule(localFormulaVar.getModule()); - } - dataType.setContent(""); - if(!paramKeyMap.containsKey(key)){ - paramKeyMap.put(key,dataType); - }else{ - logger.info("存在同名参数:"+key+"-->"+JSON.toJSONString(dataType)); - } - } - } - loop++; - } - } -// if(loop!=localVars.size()){ +//package com.engine.salary.formlua.util; +// +// +//import com.alibaba.fastjson.JSON; +//import com.weaver.common.form.component.base.ComponentType; +//import com.weaver.excel.formula.api.entity.DataOption; +//import com.weaver.excel.formula.api.entity.FormulaVar; +//import com.weaver.excel.formula.entity.parameter.DataType; +//import com.weaver.excel.formula.entity.parameter.ParamFactory; +//import com.weaver.excel.formula.entity.standard.front.CurrentVar; +//import com.weaver.teams.domain.user.DataCollectionEmployee; +//import com.weaver.teams.util.StringUtils; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import java.util.HashMap; +//import java.util.List; +//import java.util.Map; +//import java.util.regex.Matcher; +//import java.util.regex.Pattern; +// +//public class ExcelStandardUtil { +// protected static final Logger logger = LoggerFactory.getLogger(ExcelStandardUtil.class); +// +// public static Map replaceAllParam(String sql, List localVars,List dataVars, DataCollectionEmployee employee){ +// if(null!=localVars){ +// for (FormulaVar formulaVar:localVars){ +// if(StringUtils.isNotEmpty(formulaVar.getDataId()) && StringUtils.isEmpty(formulaVar.getFormId())){ +// formulaVar.setFormId(formulaVar.getDataId()); +// } +// if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_department")){ +// formulaVar.setType("department"); +// formulaVar.setComponentKey(ComponentType.Department.toString()); +// } +// if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_superior")){ +// formulaVar.setType("employee"); +// formulaVar.setComponentKey(ComponentType.Employee.toString()); +// } +// } +// } +// +// Map dataMap=new HashMap<>(); +// Map paramKeyMap=new HashMap<>(); +// //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 +// String partternStr="\\{.+?\\}{1}?"; +// Pattern pt=Pattern.compile(partternStr); +// Matcher matcher=pt.matcher(sql); +// +// int loop=0; +// //替换逻辑 +// while (matcher.find()){ +// String matherString=matcher.group(); +// //替换特殊字符 +// matherString=matherString.replace("{",""); +// matherString=matherString.replace("}",""); +// matherString=matherString.replace("(","\\("); +// matherString=matherString.replace(")","\\)"); +// matherString=matherString.replaceAll("\\+","\\\\+"); +// matherString=matherString.replaceAll("\\-","\\\\-"); +// matherString=matherString.replaceAll("\\*","\\\\*"); +// matherString=matherString.replaceAll("\\/","\\\\/"); +// if(localVars!=null&&loop"+JSON.toJSONString(dataType)); +// } +// }else{ +// String typeKey=localFormulaVar.getProperKey(); +// if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ +// typeKey=localFormulaVar.getFieldType(); +// }else if(StringUtils.isNotEmpty(localFormulaVar.getType())){ +// typeKey=localFormulaVar.getType(); +// }else if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ +// typeKey=localFormulaVar.getFieldType(); +// localFormulaVar.setComponentKey(localFormulaVar.getFieldType()); +// } +// dataType.setDataType(ExcelParamUtil.findDataType(typeKey)); +// dataType.setFieldId(localFormulaVar.getFieldId()); +// dataType.setFormId(StringUtils.isNotEmpty(localFormulaVar.getFormId())?Long.parseLong(localFormulaVar.getFormId()):null); +// try { +// dataType.setModule(localFormulaVar.getModule()); +// } catch (IllegalArgumentException e) { +// logger.error("err",e); +// dataType.setModule(localFormulaVar.getModule()); +// } +// dataType.setContent(""); +// if(!paramKeyMap.containsKey(key)){ +// paramKeyMap.put(key,dataType); +// }else{ +// logger.info("存在同名参数:"+key+"-->"+JSON.toJSONString(dataType)); +// } +// } +// } +// loop++; +// } +// } +//// if(loop!=localVars.size()){ +//// throw new RuntimeException("参数列表与执行语句不一致"); +//// } +// dataMap.put("param",paramKeyMap); +// dataMap.put("sql",sql); +// return dataMap; +// } +// +// public static Map replaceAllParamForTest(String sql, List formulaVars, DataCollectionEmployee employee){ +// if(null==formulaVars){ +// return null; +// } +// for (FormulaVar formulaVar:formulaVars){ +// if(StringUtils.isNotEmpty(formulaVar.getDataId()) && StringUtils.isEmpty(formulaVar.getFormId())){ +// formulaVar.setFormId(formulaVar.getDataId()); +// if(StringUtils.isNotEmpty(formulaVar.getType()) && StringUtils.isEmpty(formulaVar.getComponentKey())){ +// if(formulaVar.getType().equalsIgnoreCase("operator") || formulaVar.getType().equalsIgnoreCase("employee")){ +// formulaVar.setComponentKey(""); +// } +// } +// } +// if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_department")){ +// formulaVar.setType("department"); +// formulaVar.setComponentKey("Department"); +// } +// if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_superior")){ +// formulaVar.setType("employee"); +// formulaVar.setComponentKey("Employee"); +// } +// } +// Map dataMap=new HashMap<>(); +// Map paramKeyMap=new HashMap<>(); +// //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 +// String partternStr="\\{.+?\\}{1}?"; +// Pattern pt=Pattern.compile(partternStr); +// Matcher matcher=pt.matcher(sql); +// +// int loop=0; +// //替换逻辑 +// while (matcher.find()){ +// String matherString=matcher.group(); +// //替换特殊字符 +// matherString=matherString.replace("{",""); +// matherString=matherString.replace("}",""); +// matherString=matherString.replace("(","\\("); +// matherString=matherString.replace(")","\\)"); +// matherString=matherString.replaceAll("\\+","\\\\+"); +// matherString=matherString.replaceAll("\\-","\\\\-"); +// matherString=matherString.replaceAll("\\*","\\\\*"); +// matherString=matherString.replaceAll("\\/","\\\\/"); +// if(formulaVars!=null&&loop replaceAllParamForTest(String sql, List formulaVars, DataCollectionEmployee employee){ - if(null==formulaVars){ - return null; - } - for (FormulaVar formulaVar:formulaVars){ - if(StringUtils.isNotEmpty(formulaVar.getDataId()) && StringUtils.isEmpty(formulaVar.getFormId())){ - formulaVar.setFormId(formulaVar.getDataId()); - if(StringUtils.isNotEmpty(formulaVar.getType()) && StringUtils.isEmpty(formulaVar.getComponentKey())){ - if(formulaVar.getType().equalsIgnoreCase("operator") || formulaVar.getType().equalsIgnoreCase("employee")){ - formulaVar.setComponentKey(""); - } - } - } - if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_department")){ - formulaVar.setType("department"); - formulaVar.setComponentKey("Department"); - } - if(StringUtils.isNotEmpty(formulaVar.getId()) && formulaVar.getId().equalsIgnoreCase("current_superior")){ - formulaVar.setType("employee"); - formulaVar.setComponentKey("Employee"); - } - } - Map dataMap=new HashMap<>(); - Map paramKeyMap=new HashMap<>(); - //正则表达式匹配所有用 { } 括号包起来的变量,然后跟参数列表中的参数一一对应做替换 - String partternStr="\\{.+?\\}{1}?"; - Pattern pt=Pattern.compile(partternStr); - Matcher matcher=pt.matcher(sql); - - int loop=0; - //替换逻辑 - while (matcher.find()){ - String matherString=matcher.group(); - //替换特殊字符 - matherString=matherString.replace("{",""); - matherString=matherString.replace("}",""); - matherString=matherString.replace("(","\\("); - matherString=matherString.replace(")","\\)"); - matherString=matherString.replaceAll("\\+","\\\\+"); - matherString=matherString.replaceAll("\\-","\\\\-"); - matherString=matherString.replaceAll("\\*","\\\\*"); - matherString=matherString.replaceAll("\\/","\\\\/"); - if(formulaVars!=null&&loop dataVars,DataCollectionEmployee employee){ - DataType dataType =new DataType(); - if(localFormulaVar == null){ - return null; - } - - String typeKey=localFormulaVar.getProperKey(); - if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ - typeKey=localFormulaVar.getFieldType(); - }else if(StringUtils.isNotEmpty(localFormulaVar.getType())){ - typeKey=localFormulaVar.getType(); - }else if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ - typeKey=localFormulaVar.getFieldType(); - localFormulaVar.setComponentKey(localFormulaVar.getFieldType()); - } - logger.info(localFormulaVar.getId()+"typeKey=:"+typeKey); - switch (ExcelParamUtil.findDataType(typeKey)){ - case DataType.DATE: - dataType.setDataType(DataType.STRING); - setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"field"); - if(dataType.getContent()==null){ - dataType.setContent(""); - } - break; - case DataType.STRING: - dataType.setDataType(DataType.STRING); - setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"field"); - if(dataType.getContent()==null){ - dataType.setContent(""); - } - break; - case DataType.NUMBER: - dataType.setDataType(DataType.NUMBER); - setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"field"); - break; - case DataType.OPTION: - logger.info("函数构建选项型:"+JSON.toJSONString(localFormulaVar)); - dataType.setDataType(DataType.OPTION); - setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"option"); - if(dataType.getContent() == null){ - dataType.setContent(localFormulaVar.getId()!=null?localFormulaVar.getId():localFormulaVar.getOptionId()); - dataType.setText(dataType.getContent()+""); - } - //当前操作人赋值 - if(localFormulaVar.getId()!=null){ - switch (localFormulaVar.getId()){ - case "current_user": - dataType.setContent(employee.getId()); - dataType.setOptionContent(employee.getName()); - break; - case "current_superior": - dataType.setContent(employee.getSuperiorId()); - break; - case "current_department": - dataType.setContent(employee.getDepartmentId()); - break; - case "current_position": - dataType.setContent(employee.getPositionId()); - break; - default: - break; - } - logger.info("当前操作人赋值完成:"+JSON.toJSONString(dataType)); - } - break; - case DataType.DATASOURCE: - dataType.setDataType(DataType.DATASOURCE); - setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"option"); - break; - default: - logger.info("未匹配到参数类型:"+(JSON.toJSONString(localFormulaVar))); - break; - } - if(StringUtils.isNotEmpty(localFormulaVar.getDataType())){ - dataType.setDataType(localFormulaVar.getDataType()); - } - if(StringUtils.isEmpty(dataType.getComponentKey())){ - if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ - dataType.setComponentKey(localFormulaVar.getFieldType()); - }else if(StringUtils.isNotEmpty(localFormulaVar.getProperKey())){ - dataType.setComponentKey(localFormulaVar.getProperKey()); - }else if(StringUtils.isNotEmpty(localFormulaVar.getComponentKey())){ - dataType.setComponentKey(localFormulaVar.getComponentKey()); - } - } - dataType.setFieldId(localFormulaVar.getFieldId()+""); - dataType.setFormId(localFormulaVar.getFormId()!=null?Long.parseLong(localFormulaVar.getFormId()):null); - dataType.setEmployee(employee); - if(StringUtils.isNotEmpty(localFormulaVar.getModule())){ - try { - dataType.setModule(localFormulaVar.getModule()); - } catch (IllegalArgumentException e) { - logger.error("err",e); - dataType.setModule(localFormulaVar.getModule()); - } - } - dataType.setName(localFormulaVar.getTitle()!=null?localFormulaVar.getTitle():localFormulaVar.getName()); - logger.info("构建值完毕:"+JSON.toJSONString(dataType)); - return dataType; - } - private static void setContent(DataType dataType,String typeKey,String sourceVar,List targetVarList,String type){ - if(sourceVar==null){ - return ; - } - for (FormulaVar loopVar:targetVarList){ - switch (type){ - case "field": - if(sourceVar.equalsIgnoreCase(loopVar.getFieldId())){ - dataType.setContent(loopVar.getContent()!=null?loopVar.getContent():""); - dataType.setText(dataType.getContent()+""); - if(StringUtils.isNotEmpty(loopVar.getsFormId())){ - dataType.setSubFormId(Long.parseLong(loopVar.getsFormId())); - } - dataType.setComponentKey(loopVar.getComponentKey()); - }else{ - dataType.setComponentKey(typeKey); - } - break; - case "form": - if(sourceVar.equalsIgnoreCase(loopVar.getFormId())){ - dataType.setContent(loopVar.getContent()); - } - break; - case "option": - if(sourceVar.equalsIgnoreCase(loopVar.getFieldId())){ - dataType.setContent(loopVar.getContent()); - if(dataType.getContent()==null){ - dataType.setContent(loopVar.getOptionId()); - dataType.setText(loopVar.getOptionId()); - } - //常量 - if(StringUtils.isNotEmpty(loopVar.getOptionContent())){ - dataType.setOptionContent(loopVar.getOptionContent()); - }else if(loopVar.getDataOptionList()!=null && loopVar.getDataOptionList().size()>0){ - String optionContents=""; - List dataOptions=loopVar.getDataOptionList(); - for(DataOption dataOption:dataOptions){ - optionContents+=dataOption.getOptionContent()+","; - } - if(optionContents.lastIndexOf(",")>0){ - optionContents=optionContents.substring(0,optionContents.lastIndexOf(",")); - } - dataType.setOptionContent(optionContents); - }else {//变量 - dataType.setOptionContent(loopVar.getContent()); - } - - dataType.setScore(loopVar.getScore()); - if(StringUtils.isNotEmpty(loopVar.getsFormId())){ - dataType.setSubFormId(Long.parseLong(loopVar.getsFormId())); - } - dataType.setComponentKey(loopVar.getComponentKey()); - } - break; - default: - break; - } - } - } -} +// dataMap.put("param",paramKeyMap); +// dataMap.put("sql",sql); +// logger.info("函数校验参数:"+JSON.toJSONString(dataMap)); +// return dataMap; +// } +// +// private static DataType transFormulaVarToDataTypeTesy(FormulaVar formulaVar,DataCollectionEmployee employee){ +// DataType dataType =new DataType(); +// ParamFactory paramFactory=ParamFactory.getInstance(); +// dataType.setContent(formulaVar.getContent()); +// dataType.setText(formulaVar.getContent()); +// String typeKey=formulaVar.getProperKey(); +// if(StringUtils.isNotEmpty(formulaVar.getFieldType()) && StringUtils.isEmpty(typeKey)){//选项型取值 +// typeKey=formulaVar.getFieldType(); +// }else if(StringUtils.isNotEmpty(formulaVar.getType()) && StringUtils.isEmpty(typeKey)){//当前操作人取值 +// typeKey=formulaVar.getType(); +// }else if(StringUtils.isNotEmpty(formulaVar.getFieldType()) && StringUtils.isEmpty(typeKey)){ +// typeKey=formulaVar.getFieldType(); +// formulaVar.setComponentKey(formulaVar.getFieldType()); +// } +// switch (ExcelParamUtil.findDataType(typeKey)){ +// case DataType.DATE: +// dataType.setContent(paramFactory.getDateTimeValue()); +// dataType.setText(paramFactory.getDateTimeValue()); +// dataType.setDataType(DataType.STRING); +// dataType.setComponentKey("DateComponent"); +// break; +// case DataType.STRING: +// dataType.setContent(paramFactory.getCharValue()); +// dataType.setText(paramFactory.getCharValue()); +// dataType.setDataType(DataType.STRING); +// dataType.setComponentKey("Text"); +// break; +// case DataType.NUMBER: +// dataType.setContent(paramFactory.getDoubleValue()); +// dataType.setText(paramFactory.getDoubleValue()+""); +// dataType.setDataType(DataType.NUMBER); +// dataType.setComponentKey("NumberComponent"); +// break; +// case DataType.OPTION: +// dataType.setContent(paramFactory.getSelectValue()); +// dataType.setText(paramFactory.getSelectValue()); +// dataType.setScore(paramFactory.getDoubleValue()); +// dataType.setDataType(DataType.OPTION); +// +// if(formulaVar.getType()!=null && (formulaVar.getType().equalsIgnoreCase("employee") || formulaVar.getType().equalsIgnoreCase("operator")) || (formulaVar.getProperKey()!=null && formulaVar.getProperKey().equalsIgnoreCase("employee"))){ +// dataType.setContent(employee.getId()); +// dataType.setComponentKey("Employee"); +// if(formulaVar.getId()!=null && formulaVar.getId().equalsIgnoreCase("current_superior")){ +// dataType.setContent(employee.getSuperiorId()); +// } +// }else if(formulaVar.getType()!=null && (formulaVar.getType().equalsIgnoreCase(ComponentType.Department.toString()) || formulaVar.getType().equalsIgnoreCase(ComponentType.Department.toString())) || (formulaVar.getProperKey()!=null && formulaVar.getProperKey().equalsIgnoreCase(ComponentType.Department.toString()))){ +// dataType.setContent(employee.getDepartmentId()); +// dataType.setComponentKey("Department"); +// }else{ +// if(formulaVar.getFieldType()!=null && formulaVar.getFieldType().equalsIgnoreCase("Employee")){ +// formulaVar.setComponentKey("Employee"); +// dataType.setComponentKey("Employee"); +// }else{ +// dataType.setComponentKey("RadioBox"); +// } +// } +// +// break; +// case DataType.DATASOURCE: +// dataType.setContent(paramFactory.getSelectValue()); +// dataType.setText(paramFactory.getSelectValue()); +// dataType.setScore(paramFactory.getDoubleValue()); +// dataType.setDataType(DataType.OPTION); +// dataType.setComponentKey("RadioBox"); +// break; +// default: +// break; +// } +// if(StringUtils.isNotEmpty(formulaVar.getDataType())){ +// dataType.setDataType(formulaVar.getDataType()); +// } +// +// dataType.setFieldId(formulaVar.getFieldId()+""); +// dataType.setFormId(formulaVar.getFormId()!=null?Long.parseLong(formulaVar.getFormId()):null); +// dataType.setEmployee(employee); +// if(StringUtils.isNotEmpty(formulaVar.getModule())){ +// try { +// try { +// dataType.setModule(formulaVar.getModule()); +// } catch (IllegalArgumentException e) { +// logger.error("err",e); +// dataType.setModule(formulaVar.getModule()); +// } +// } catch (IllegalArgumentException e) { +// logger.error("err",e); +// dataType.setModule(formulaVar.getModule()); +// } +// +// } +// dataType.setName(formulaVar.getTitle()); +// if(StringUtils.isEmpty(dataType.getName())){ +// dataType.setName(formulaVar.getName()); +// } +// return dataType; +// } +// +// private static DataType transFormulaVarToDataType(FormulaVar localFormulaVar,List dataVars,DataCollectionEmployee employee){ +// DataType dataType =new DataType(); +// if(localFormulaVar == null){ +// return null; +// } +// +// String typeKey=localFormulaVar.getProperKey(); +// if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ +// typeKey=localFormulaVar.getFieldType(); +// }else if(StringUtils.isNotEmpty(localFormulaVar.getType())){ +// typeKey=localFormulaVar.getType(); +// }else if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ +// typeKey=localFormulaVar.getFieldType(); +// localFormulaVar.setComponentKey(localFormulaVar.getFieldType()); +// } +// logger.info(localFormulaVar.getId()+"typeKey=:"+typeKey); +// switch (ExcelParamUtil.findDataType(typeKey)){ +// case DataType.DATE: +// dataType.setDataType(DataType.STRING); +// setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"field"); +// if(dataType.getContent()==null){ +// dataType.setContent(""); +// } +// break; +// case DataType.STRING: +// dataType.setDataType(DataType.STRING); +// setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"field"); +// if(dataType.getContent()==null){ +// dataType.setContent(""); +// } +// break; +// case DataType.NUMBER: +// dataType.setDataType(DataType.NUMBER); +// setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"field"); +// break; +// case DataType.OPTION: +// logger.info("函数构建选项型:"+JSON.toJSONString(localFormulaVar)); +// dataType.setDataType(DataType.OPTION); +// setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"option"); +// if(dataType.getContent() == null){ +// dataType.setContent(localFormulaVar.getId()!=null?localFormulaVar.getId():localFormulaVar.getOptionId()); +// dataType.setText(dataType.getContent()+""); +// } +// //当前操作人赋值 +// if(localFormulaVar.getId()!=null){ +// switch (localFormulaVar.getId()){ +// case "current_user": +// dataType.setContent(employee.getId()); +// dataType.setOptionContent(employee.getName()); +// break; +// case "current_superior": +// dataType.setContent(employee.getSuperiorId()); +// break; +// case "current_department": +// dataType.setContent(employee.getDepartmentId()); +// break; +// case "current_position": +// dataType.setContent(employee.getPositionId()); +// break; +// default: +// break; +// } +// logger.info("当前操作人赋值完成:"+JSON.toJSONString(dataType)); +// } +// break; +// case DataType.DATASOURCE: +// dataType.setDataType(DataType.DATASOURCE); +// setContent(dataType,typeKey,localFormulaVar.getFieldId(),dataVars,"option"); +// break; +// default: +// logger.info("未匹配到参数类型:"+(JSON.toJSONString(localFormulaVar))); +// break; +// } +// if(StringUtils.isNotEmpty(localFormulaVar.getDataType())){ +// dataType.setDataType(localFormulaVar.getDataType()); +// } +// if(StringUtils.isEmpty(dataType.getComponentKey())){ +// if(StringUtils.isNotEmpty(localFormulaVar.getFieldType())){ +// dataType.setComponentKey(localFormulaVar.getFieldType()); +// }else if(StringUtils.isNotEmpty(localFormulaVar.getProperKey())){ +// dataType.setComponentKey(localFormulaVar.getProperKey()); +// }else if(StringUtils.isNotEmpty(localFormulaVar.getComponentKey())){ +// dataType.setComponentKey(localFormulaVar.getComponentKey()); +// } +// } +// dataType.setFieldId(localFormulaVar.getFieldId()+""); +// dataType.setFormId(localFormulaVar.getFormId()!=null?Long.parseLong(localFormulaVar.getFormId()):null); +// dataType.setEmployee(employee); +// if(StringUtils.isNotEmpty(localFormulaVar.getModule())){ +// try { +// dataType.setModule(localFormulaVar.getModule()); +// } catch (IllegalArgumentException e) { +// logger.error("err",e); +// dataType.setModule(localFormulaVar.getModule()); +// } +// } +// dataType.setName(localFormulaVar.getTitle()!=null?localFormulaVar.getTitle():localFormulaVar.getName()); +// logger.info("构建值完毕:"+JSON.toJSONString(dataType)); +// return dataType; +// } +// private static void setContent(DataType dataType,String typeKey,String sourceVar,List targetVarList,String type){ +// if(sourceVar==null){ +// return ; +// } +// for (FormulaVar loopVar:targetVarList){ +// switch (type){ +// case "field": +// if(sourceVar.equalsIgnoreCase(loopVar.getFieldId())){ +// dataType.setContent(loopVar.getContent()!=null?loopVar.getContent():""); +// dataType.setText(dataType.getContent()+""); +// if(StringUtils.isNotEmpty(loopVar.getsFormId())){ +// dataType.setSubFormId(Long.parseLong(loopVar.getsFormId())); +// } +// dataType.setComponentKey(loopVar.getComponentKey()); +// }else{ +// dataType.setComponentKey(typeKey); +// } +// break; +// case "form": +// if(sourceVar.equalsIgnoreCase(loopVar.getFormId())){ +// dataType.setContent(loopVar.getContent()); +// } +// break; +// case "option": +// if(sourceVar.equalsIgnoreCase(loopVar.getFieldId())){ +// dataType.setContent(loopVar.getContent()); +// if(dataType.getContent()==null){ +// dataType.setContent(loopVar.getOptionId()); +// dataType.setText(loopVar.getOptionId()); +// } +// //常量 +// if(StringUtils.isNotEmpty(loopVar.getOptionContent())){ +// dataType.setOptionContent(loopVar.getOptionContent()); +// }else if(loopVar.getDataOptionList()!=null && loopVar.getDataOptionList().size()>0){ +// String optionContents=""; +// List dataOptions=loopVar.getDataOptionList(); +// for(DataOption dataOption:dataOptions){ +// optionContents+=dataOption.getOptionContent()+","; +// } +// if(optionContents.lastIndexOf(",")>0){ +// optionContents=optionContents.substring(0,optionContents.lastIndexOf(",")); +// } +// dataType.setOptionContent(optionContents); +// }else {//变量 +// dataType.setOptionContent(loopVar.getContent()); +// } +// +// dataType.setScore(loopVar.getScore()); +// if(StringUtils.isNotEmpty(loopVar.getsFormId())){ +// dataType.setSubFormId(Long.parseLong(loopVar.getsFormId())); +// } +// dataType.setComponentKey(loopVar.getComponentKey()); +// } +// break; +// default: +// break; +// } +// } +// } +//} diff --git a/src/com/engine/salary/formlua/util/ExecuteTest.java b/src/com/engine/salary/formlua/util/ExecuteTest.java deleted file mode 100644 index cfd350d6c..000000000 --- a/src/com/engine/salary/formlua/util/ExecuteTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.engine.salary.formlua.util; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.ql.util.express.ExpressRunner; -import com.weaver.excel.formula.api.entity.ExpressFormula; -import com.weaver.excel.formula.api.entity.FormulaVar; -import com.weaver.teams.util.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; - -public class ExecuteTest { - protected static final Logger logger = LoggerFactory.getLogger(ExecuteTest.class); - public static ExpressRunner runner; - - public static void main(String[] args){ - String[] strs=new String[]{"1","2","3"}; - List obj1=new ArrayList<>(); - for (int i =1 ;i localVars=paramArray.toJavaList(FormulaVar.class); - ExcelStandardUtil.replaceAllParam(expressFormula.getFormula(),localVars,null,null); - } - } - } - } -} diff --git a/src/com/engine/salary/formlua/util/TestUtil.java b/src/com/engine/salary/formlua/util/TestUtil.java deleted file mode 100644 index 3e8e39ed2..000000000 --- a/src/com/engine/salary/formlua/util/TestUtil.java +++ /dev/null @@ -1,403 +0,0 @@ -package com.engine.salary.formlua.util; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.ql.util.express.DynamicParamsUtil; -import com.ql.util.express.ExpressRunner; -import com.ql.util.express.IExpressContext; -import com.weaver.common.form.component.base.ComponentType; -import com.weaver.common.form.stat.FilterFormData; -import com.weaver.excel.formula.api.entity.CustomFunc; -import com.weaver.excel.formula.core.QLExpressContext; -import com.weaver.excel.formula.entity.parameter.DataType; -import com.weaver.excel.formula.entity.parameter.FuncNames; -import com.weaver.excel.formula.entity.parameter.standard.FormulaFilterData; -import com.weaver.excel.formula.func.compare.EqOperator; -import com.weaver.excel.formula.func.compare.test.GreaterOperator; -import com.weaver.excel.formula.func.compare.test.LessOperator; -import com.weaver.excel.formula.func.custom.CustomService; -import com.weaver.excel.formula.func.custom.CustomServiceTestImpl; -import com.weaver.excel.formula.func.date.DateTimeService; -import com.weaver.excel.formula.func.date.DateTimeServiceImpl; -import com.weaver.excel.formula.func.extend.ExcelExtendFuncService; -import com.weaver.excel.formula.func.extend.ExcelExtendFuncServiceImpl; -import com.weaver.excel.formula.func.finance.FinanceService; -import com.weaver.excel.formula.func.finance.FinanceServiceImpl; -import com.weaver.excel.formula.func.logic.LogicUtils; -import com.weaver.excel.formula.func.math.MathFuncsService; -import com.weaver.excel.formula.func.math.MathFuncsServiceImpl; -import com.weaver.excel.formula.func.string.StringFormulaService; -import com.weaver.excel.formula.func.string.StringFormulaServiceImpl; -import com.weaver.excel.formula.util.standard.ExcelDataType; -import com.weaver.teams.domain.user.DataCollectionEmployee; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; - -import java.util.*; - -public class TestUtil { - protected static final Logger logger = LoggerFactory.getLogger(TestUtil.class); - @Autowired - ApplicationContext applicationContext; - public void test() throws Exception { - DynamicParamsUtil.supportDynamicParams = true; - ExpressRunner runner = new ExpressRunner(true,false); - initRunner(runner); - Map context=new HashMap<>(); - DataType dataType1=new DataType(); - dataType1.setContent(1); - dataType1.setFieldId("a"); - dataType1.setComponentKey(ComponentType.NumberComponent.toString()); - dataType1.setDataType(DataType.NUMBER); - - DataType dataType2=new DataType(); - dataType2.setFieldId("b"); - dataType2.setComponentKey(ComponentType.NumberComponent.toString()); - dataType2.setContent(2); - dataType2.setDataType(DataType.NUMBER); - - context.put("key111","2345.66"); - context.put("a",dataType1); - context.put("b",dataType2); - context.put("dateA",dataType1); - context.put("dateB",dataType2); - IExpressContext expressContext = new QLExpressContext(context,applicationContext); -// String expressSql="c=10;function add(int a,int b){return a+b+c;};add(a,b);"; -// String expressSql="import com.weaver.excel.formula.util.DateUtil;isdate=DateUtil.isDateComponent('a');System.out.println('是日期吗?'+(isdate?'是':'不是'));"; -// String expressSql="TEST(key111)=TEST(key111)"; - - String expressSql="CUSTOM1(dateA,function1());"; - - String [] varList=runner.getOutVarNames(expressSql); - String [] funcList=runner.getOutFunctionNames(expressSql); -// OperatorBase operatorBase=runner.getFunciton("TEST"); - Object result=runner.execute(expressSql, expressContext, null, false, false); - logger.info("执行结果:"+JSON.toJSONString(result)); - } - - private void initRunner(ExpressRunner runner) throws Exception { - ExcelExtendFuncService excelExtendFuncService=new ExcelExtendFuncServiceImpl("biaoge","TEST"); - ExcelExtendFuncService excelExtendFuncService2=new ExcelExtendFuncServiceImpl("workflow","TEST2"); - //加载自定义脚本函数 - CustomFunc customFunc=new CustomFunc(); - customFunc.setFuncContent("function add(int a,int b){return a+b;};add(a1,b1);"); - customFunc.setFuncName("CUSTOM1"); - customFunc.setFuncTitle("自定义函数1"); - customFunc.setExcelDataType(ExcelDataType.number.toString()); - CustomService customService=new CustomServiceTestImpl(customFunc); - - DateTimeService dateTimeService=new DateTimeServiceImpl(); -// DateTimeService dateTimeService=new DateTimeTestServiceImpl(); - MathFuncsService mathFuncsService=new MathFuncsServiceImpl(); - StringFormulaService stringFormulaService=new StringFormulaServiceImpl(); - FinanceService financeService=new FinanceServiceImpl(); - runner.replaceOperator("=",new EqOperator("=")); - runner.replaceOperator(">",new GreaterOperator(">")); - runner.replaceOperator("<",new LessOperator("<")); - runner.addFunctionOfServiceMethod( "TEST",excelExtendFuncService,"execute",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "TEST2",excelExtendFuncService2,"execute",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "ISINT",mathFuncsService,"isInt",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "ISNUMBER",mathFuncsService,"isNumber",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "ISJSON",stringFormulaService,"isJson",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "GETJSONVALUE",stringFormulaService,"getJSONValue",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "COMPAREDATE",dateTimeService,"compareDate",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "CURRYEAR",dateTimeService,"currYear",new Class[]{},""); - runner.addFunctionOfServiceMethod( "CURRMONTH",dateTimeService,"currMonth",new Class[]{},""); - runner.addFunctionOfServiceMethod( "CURRDAY",dateTimeService,"currDay",new Class[]{},""); - runner.addFunctionOfServiceMethod( "CURRWEEK",dateTimeService,"currWeek",new Class[]{},""); - runner.addFunctionOfServiceMethod( "CURRHOUR",dateTimeService,"currHour",new Class[]{},""); - runner.addFunctionOfServiceMethod( "CURRMINUTE",dateTimeService,"currMinute",new Class[]{},""); - runner.addFunctionOfServiceMethod( "CURRSECOND",dateTimeService,"currSecond",new Class[]{},""); - runner.addFunctionOfServiceMethod( "GETMONEY", financeService,"getMoney",new Class[]{Object[].class},""); - runner.addFunctionOfServiceMethod( "CUSTOM1", customService,"execute",new Class[]{Object[].class},""); - } - - - public static void parseJ(){ - JSONObject queryObj=JSON.parseObject("{\"expressSql\":\"VLOOKUPS({工资薪金税(居民)},AND({薪资项目.当前累计应纳税所得额}>{个税税表.应纳税所得额下限},{薪资项目.当前累计应纳税额}<={个税税表.应纳税所得额上限}),[{个税税表.税率}])\",\"parameters\":[{\"dataId\":\"60000000000000001\",\"title\":\"工资薪金税(居民)\",\"module\":\"hrmsalary\",\"name\":\"工资薪金税(居民)\",\"id\":\"60000000000000001\",\"action\":\"DataSource\"},{\"name\":\"当前累计应纳税所得额\",\"module\":\"hrmsalary\",\"fieldId\":\"1_addUpTaxableIncome\",\"formId\":\"1\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"当前累计应纳税所得额\"},{\"name\":\"应纳税所得额下限\",\"module\":\"hrmsalary\",\"fieldId\":\"10_taxableIncomeLLimit\",\"formId\":\"10\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"应纳税所得额下限\"},{\"name\":\"当前累计应纳税额\",\"module\":\"hrmsalary\",\"fieldId\":\"1_addUpTaxPayable\",\"formId\":\"1\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"当前累计应纳税额\"},{\"name\":\"应纳税所得额上限\",\"module\":\"hrmsalary\",\"fieldId\":\"10_taxableIncomeULimit\",\"formId\":\"10\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"应纳税所得额上限\"},{\"name\":\"税率\",\"module\":\"hrmsalary\",\"fieldId\":\"10_taxRate\",\"formId\":\"10\",\"properKey\":\"number\",\"sFormId\":\"\",\"dataTemplateId\":\"\",\"title\":\"税率\"}],\"returnType\":\"number\",\"validateType\":\"normal\"}"); - JSONArray jsonArray = queryObj.getJSONArray("parameters"); - List dataTypeList=new ArrayList<>(); - - for (Object obj : jsonArray) { - JSONObject jsonObj = (JSONObject) obj; - DataType paramData=new DataType(); - paramData.setComponentKey(DataType.STRING); - paramData.setFieldId(jsonObj.getString("fieldId")); - paramData.setContent("123"); - dataTypeList.add(paramData); - } - - DataType dataType1=dataTypeList.get(1); - DataType dataType2=dataTypeList.get(3); - FormulaFilterData formulaFilterData1=new FormulaFilterData(); - formulaFilterData1.setContent(dataType1.getContent()+""); - formulaFilterData1.setCondition(FilterFormData.TERM_GT); - formulaFilterData1.setFieldId(dataType1.getFieldId()); - formulaFilterData1.setCondition(FormulaFilterData.CONDITION_AND); - - FormulaFilterData formulaFilterData2=new FormulaFilterData(); - formulaFilterData2.setContent(dataType2.getContent()+""); - formulaFilterData2.setCondition(FilterFormData.TERM_GT); - formulaFilterData2.setFieldId(dataType2.getFieldId()); - formulaFilterData2.setCondition(FormulaFilterData.CONDITION_AND); - - - List filterDatas=new ArrayList<>(); - filterDatas.add(formulaFilterData1); - filterDatas.add(formulaFilterData2); - String dataId="60000000000000001"; - String[] cols=new String[]{"10_taxRate"}; - DataCollectionEmployee employee=new DataCollectionEmployee(); - employee.setTenantKey("tm7tozevws"); - employee.setUserId(5113514575963198048L); - employee.setId(3573514574891514361L); - employee.setUsername("顿顿"); - System.out.println(dataId); - System.out.println(JSON.toJSONString(filterDatas)); - System.out.println(JSON.toJSONString(cols)); - System.out.println(JSON.toJSONString(employee)); - } - public static Object executeInner(Object[] list) throws Exception { - DataType result=new DataType(); - result.setDataType(DataType.BOOL); - if(list.length<1||list[1]==null){ - Integer number= IgnoreParamFilter.getSetFuncNumber("IN"); - JSONObject errorJson= ErrorUtil.buildError("IN",number,number,"IN函数至少需要两个参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - List paramList=new ArrayList<>(); - paramList.add(list[0]); - - Object[] objectArray=null; - if(list[1].getClass().isArray()){ - objectArray=(Object[])list[1]; - for (int i=0;i(); - paramList.add(null); - List dataArray=new ArrayList<>(); - if(list[0] instanceof DataType){ - DataType dataType=(DataType)list[0]; - if(dataType.getDataType().equals(DataType.OPTION)){ - if(dataType.getContent()!=null){ - String[] arrys=dataType.getContent().toString().split(","); - for (int i=0;i0 && 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")); - } - - 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]); - } - - } - } - } - } - //如果没有条件符合,返回默认值,最后一个参数为默认值 - 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); - } - - } - private static 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; - } - public static Object chooseOne(Object... objects) { - if(objects==null || objects.length<2){ - throw new RuntimeException("CHOOSE函数的参数不能少于两个"); - } - DataType dataType=new DataType(); - boolean checkResult=IgnoreParamFilter.checkType(objects); - if(checkResult){ - int indexData=0; - Object firstObj=objects[0]; - try { - if(firstObj !=null){ - Double doubleValue=null; - if(firstObj instanceof DataType){ - DataType indexDataType=(DataType)firstObj; - if(ExcelParamUtil.findDataType(indexDataType.getDataType()).equalsIgnoreCase(DataType.NUMBER)){ - if(indexDataType.getContent()!=null){ - doubleValue=Double.parseDouble(indexDataType.getContent()+""); - } - } - }else{ - doubleValue=Double.parseDouble(firstObj+""); - } - indexData=doubleValue.intValue(); - }else{ - throw new RuntimeException("CHOOSE函数第一个参数不能为空"); - } - - } catch (NumberFormatException e) { - logger.error("err",e); - } - List dataList=ExcelParamUtil.getParamContent(objects); - if(indexData>=dataList.size()){ - indexData=dataList.size()-1; - } - Object resultObj=dataList.get(indexData); - if(resultObj!=null){ - if(resultObj instanceof DataType){ - dataType=(DataType)resultObj; - }else { - String type=ExcelParamUtil.getParamType(resultObj.getClass().getName()); - dataType.setDataType(type); - dataType.setContent(resultObj); - } - } - }else { - throw new RuntimeException("CHOOSE函数的参数类型不一致"); - } - logger.info("CHOOSE校验执行结果:"+ JSON.toJSONString(dataType)); - return dataType; - } - private static void testOption(DataType dataType,DataType dataType2){ - //对option的特殊处理,获取option的字符串后根据逗号分割,然后排序数组,数组长度不一致返回false,一致则循环对比直到同样下标的数据不一致返回false,否则为true - String[] firstOptions=new String[]{}; - String[] secondOptions=new String[]{}; - firstOptions= CompareUtil.genArray(dataType,"option"); - secondOptions=CompareUtil.genArray(dataType2,"option"); - Arrays.sort(firstOptions); - Arrays.sort(secondOptions); - - logger.info("比较选项:"+JSON.toJSONString(firstOptions)+"-->"+JSON.toJSONString(secondOptions)); - if(firstOptions.length!=secondOptions.length){ - }else{ - int i=0; - for (;i> { if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0)continue; column = new HashMap(); - column.put("title", SalaryI18nUtil.getI18nLabels(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); + column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); column.put("dataIndex", kqReportFieldComInfo.getFieldname()); column.put("type", kqReportFieldComInfo.getFieldname()); @@ -143,7 +143,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { // } // column = new HashMap(); -// column.put("title", SalaryI18nUtil.getI18nLabel(386476, user.getLanguage())); +// column.put("title", SystemEnv.getHtmlLabelName(386476, user.getLanguage())); // column.put("dataIndex", "kqCalendar"); // column.put("key", "kqCalendar"); // if(childColumns.size()>0) {//跨列width取子列的width @@ -280,7 +280,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { // } // } // } else { - sql = " select " + sql; + sql = " select " + sql; // } Map flowData = kqReportBiz.getFlowData(params,user); rs.execute(sql); @@ -430,7 +430,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { if(DateUtil.compDate(today, date)>0){ data.put(date,""); }else{ - data.put(date,detialDatas.get(id+"|"+date)==null?SalaryI18nUtil.getI18nLabel(26593, user.getLanguage()):detialDatas.get(id+"|"+date)); + data.put(date,detialDatas.get(id+"|"+date)==null?SystemEnv.getHtmlLabelName(26593, user.getLanguage()):detialDatas.get(id+"|"+date)); } cal.setTime(DateUtil.parseToDate(date)); date = DateUtil.getDate(cal.getTime(), 1); @@ -489,7 +489,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { String unitType = Util.null2String(leaveRule.get("unitType")); column = new HashMap(); column.put("title", name); - column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SalaryI18nUtil.getI18nLabel(391, user.getLanguage()):SalaryI18nUtil.getI18nLabel(1925, user.getLanguage())); + column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage())); column.put("width", 65); column.put("dataIndex", id); column.put("key", id); @@ -517,16 +517,16 @@ public class GetKQReportCmd extends AbstractCommonCommand> { String unitTypeName = ""; if(Util.null2String(unitType).length()>0){ if(unitType.equals("1")){ - unitTypeName=SalaryI18nUtil.getI18nLabel(1925, user.getLanguage()); + unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage()); }else if(unitType.equals("2")){ - unitTypeName=SalaryI18nUtil.getI18nLabel(391, user.getLanguage()); + unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage()); }else if(unitType.equals("3")){ - unitTypeName=SalaryI18nUtil.getI18nLabel(18083, user.getLanguage()); + unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage()); } } column.put("unit", unitTypeName); } - column.put("title", SalaryI18nUtil.getI18nLabels(fieldlabel, user.getLanguage())); + column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())); column.put("dataIndex", id); column.put("key", id); column.put("rowSpan", 1); @@ -547,7 +547,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { if(kqReportFieldComInfo.getParentid().equals(parentid)) { if(!kqReportFieldComInfo.getReportType().equals("month"))continue; column = new HashMap(); - column.put("title", SalaryI18nUtil.getI18nLabels(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); + column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth())); column.put("dataIndex", kqReportFieldComInfo.getFieldname()); @@ -579,7 +579,7 @@ public class GetKQReportCmd extends AbstractCommonCommand> { if(!kqReportFieldComInfo.getReportType().equals("month"))continue; if (kqReportFieldComInfo.getFieldname().equals(lsCascadeKey.get(i))){ column = new HashMap(); - column.put("title", SalaryI18nUtil.getI18nLabels(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); + column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth())); column.put("dataIndex", kqReportFieldComInfo.getFieldname()); From 9994ae3df92a1bcf4421cd1a9f4d7cbca41f1bc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 19 Apr 2023 15:22:42 +0800 Subject: [PATCH 024/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formlua/core/AttendanceQlExpress.java | 39 +++++++++++----- .../salary/formlua/core/QLExpressContext.java | 9 ++-- .../func/finance/FinanceServiceTestImpl.java | 45 ------------------- 3 files changed, 32 insertions(+), 61 deletions(-) delete mode 100644 src/com/engine/salary/formlua/func/finance/FinanceServiceTestImpl.java diff --git a/src/com/engine/salary/formlua/core/AttendanceQlExpress.java b/src/com/engine/salary/formlua/core/AttendanceQlExpress.java index 4b7f07d34..07b5c4d9e 100644 --- a/src/com/engine/salary/formlua/core/AttendanceQlExpress.java +++ b/src/com/engine/salary/formlua/core/AttendanceQlExpress.java @@ -6,11 +6,16 @@ import com.engine.salary.formlua.entity.parameter.DataType; import com.engine.salary.formlua.entity.parameter.FuncNames; import com.engine.salary.formlua.func.compare.*; import com.engine.salary.formlua.func.date.DateTimeService; +import com.engine.salary.formlua.func.date.DateTimeServiceImpl; import com.engine.salary.formlua.func.finance.FinanceService; +import com.engine.salary.formlua.func.finance.FinanceServiceImpl; import com.engine.salary.formlua.func.find.FindFuncsService; import com.engine.salary.formlua.func.logic.LogicService; +import com.engine.salary.formlua.func.logic.LogicServiceImpl; import com.engine.salary.formlua.func.math.MathFuncsService; +import com.engine.salary.formlua.func.math.MathFuncsServiceImpl; import com.engine.salary.formlua.func.string.StringFormulaService; +import com.engine.salary.formlua.func.string.StringFormulaServiceImpl; import com.engine.salary.formlua.util.ExcelParamUtil; import com.engine.salary.formlua.util.ExpressRegularUtil; import com.ql.util.express.DynamicParamsUtil; @@ -20,13 +25,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; import java.util.Map; import java.util.regex.PatternSyntaxException; /** * 考勤执行业务类 */ -public class AttendanceQlExpress { +public class AttendanceQlExpress { public static ExpressRunner runner; @@ -39,13 +45,13 @@ public class AttendanceQlExpress { // AggregationFunc aggregationFunc; - LogicService logicService; + LogicService logicService = new LogicServiceImpl(); - DateTimeService dateTimeService; + DateTimeService dateTimeService = new DateTimeServiceImpl(); - StringFormulaService stringFormulaService; + StringFormulaService stringFormulaService = new StringFormulaServiceImpl(); - MathFuncsService mathFuncsService; + MathFuncsService mathFuncsService = new MathFuncsServiceImpl(); FindFuncsService findFuncsService; @@ -53,12 +59,23 @@ public class AttendanceQlExpress { // // private HrmDbService hrmDbService; - private FinanceService financeService; -// private RemoteExcelformulaService remoteExcelformulaService; + private FinanceService financeService = new FinanceServiceImpl(); + // private RemoteExcelformulaService remoteExcelformulaService; private String errorInfo; protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + public static void main(String[] args) throws Exception { + AttendanceQlExpress test = new AttendanceQlExpress(); + + String statement = "IFS(1>1,1,1=1,0,-1)"; + Map context = new HashMap<>(); + context.put("a", 10000); + context.put("b", 2); + Object execute = test.execute(statement, context); + System.out.println(execute); + } + /** * @param statement 执行语句 * @param context 上下文 @@ -218,7 +235,7 @@ public class AttendanceQlExpress { runner.addFunctionOfServiceMethod("DATEFORMAT", dateTimeService, "dateFormat", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("DAYOFMONTH", dateTimeService, "dayOfMonth", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("EOMONTH", dateTimeService, "eoMonth", new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod("NETWORKDAYSPI", dateTimeService, "workdayIntl", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod("NETWORKDAYSPI", dateTimeService, "workdayIntl", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("CURRYEAR", dateTimeService, "currYear", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("CURRMONTH", dateTimeService, "currMonth", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("CURRDAY", dateTimeService, "currDay", new Class[]{Object[].class}, ""); @@ -264,9 +281,9 @@ public class AttendanceQlExpress { runner.addFunctionOfServiceMethod(FuncNames.ISNUMBER.toString(), mathFuncsService, FuncNames.ISNUMBER.getName(), new Class[]{Object[].class}, ""); //查找函数 - runner.addFunctionOfServiceMethod(FuncNames.CHOOSE.toString(), findFuncsService, "chooseOne", new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod(FuncNames.MATCH.toString(), findFuncsService, "match", new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod(FuncNames.VLOOKUPS.toString(), findFuncsService, "vlookups", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.CHOOSE.toString(), findFuncsService, "chooseOne", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.MATCH.toString(), findFuncsService, "match", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod(FuncNames.VLOOKUPS.toString(), findFuncsService, "vlookups", new Class[]{Object[].class}, ""); //数据库函数-hrm // runner.addFunctionOfServiceMethod(FuncNames.GETHRMNAME.toString(), hrmDbService, FuncNames.GETHRMNAME.getName(), new Class[]{Object[].class}, ""); diff --git a/src/com/engine/salary/formlua/core/QLExpressContext.java b/src/com/engine/salary/formlua/core/QLExpressContext.java index d9db4a6ff..4fa77597f 100644 --- a/src/com/engine/salary/formlua/core/QLExpressContext.java +++ b/src/com/engine/salary/formlua/core/QLExpressContext.java @@ -7,13 +7,12 @@ import java.util.Map; @SuppressWarnings("serial") public class QLExpressContext extends HashMap implements - IExpressContext { + IExpressContext { - - public QLExpressContext(Map aProperties) { - super(aProperties); - } + public QLExpressContext(Map aProperties) { + super(aProperties); + } } diff --git a/src/com/engine/salary/formlua/func/finance/FinanceServiceTestImpl.java b/src/com/engine/salary/formlua/func/finance/FinanceServiceTestImpl.java deleted file mode 100644 index ef169dbc5..000000000 --- a/src/com/engine/salary/formlua/func/finance/FinanceServiceTestImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.engine.salary.formlua.func.finance; - -import com.engine.salary.formlua.entity.parameter.DataType; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author - */ -public class FinanceServiceTestImpl implements FinanceService{ - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - String[] cnNums = new String[]{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; - @Override - public DataType getMoney(Object... objects) { - if(objects==null){ - throw new RuntimeException("GETMONEY函数的参数不能为空"); - }else if(objects.length!=1){ - throw new RuntimeException("GETMONEY函数只能允许一个参数"); - } - Object param=objects[0]; - Object content=null; - if(param instanceof DataType){ - DataType dataType=(DataType)param; - content=dataType.getContent(); - }else{ - content=param; - } - if(content!=null && !content.toString().equals("")){ - char[] chars=content.toString().toCharArray(); - String chineseNum=""; - for(char cstr:chars){ - String charstr=String.valueOf(cstr); - if(StringUtils.isNumeric(charstr)){ - int csNum=Integer.parseInt(charstr); - chineseNum+=cnNums[csNum]; - }else if(charstr.equalsIgnoreCase(".")){ - chineseNum+=""; - } - } - logger.info(chineseNum); - } - return null; - } -} From 19d5e979bbf1457b9570fbb0672aa86a2a8f0fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 19 Apr 2023 16:32:27 +0800 Subject: [PATCH 025/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=92=8C=E7=BB=B4=E5=BA=A6=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/wrapper/SalaryStatisticsDimensionWrapper.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java index 50f9bce7d..4327c7d8a 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java @@ -65,7 +65,11 @@ public class SalaryStatisticsDimensionWrapper extends Service { .isDefault(m.getIsDefault()) .build()).collect(Collectors.toList()); } - return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), dtoList, SalaryStatisticsDimensionListDTO.class); + + PageInfo salaryStatisticsDimensionListDTOPageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize()); + salaryStatisticsDimensionListDTOPageInfo.setList(dtoList); + salaryStatisticsDimensionListDTOPageInfo.setTotal(page.getTotal()); + return salaryStatisticsDimensionListDTOPageInfo; } /** From ef171db1287c0af42a9cf4858ac1371f1145f630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 19 Apr 2023 19:28:05 +0800 Subject: [PATCH 026/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ttendanceQlExpress.java => QlExpress.java} | 22 ++---- .../entity/standard/execute/ExclDataType.java | 4 -- .../entity/standard/execute/ExclFixField.java | 1 - .../service/impl/FormulaRunServiceImpl.java | 70 +++++++++++++++---- .../impl/SalaryFormulaServiceImpl.java | 30 ++++---- 5 files changed, 77 insertions(+), 50 deletions(-) rename src/com/engine/salary/formlua/core/{AttendanceQlExpress.java => QlExpress.java} (97%) diff --git a/src/com/engine/salary/formlua/core/AttendanceQlExpress.java b/src/com/engine/salary/formlua/core/QlExpress.java similarity index 97% rename from src/com/engine/salary/formlua/core/AttendanceQlExpress.java rename to src/com/engine/salary/formlua/core/QlExpress.java index 07b5c4d9e..16b716b7c 100644 --- a/src/com/engine/salary/formlua/core/AttendanceQlExpress.java +++ b/src/com/engine/salary/formlua/core/QlExpress.java @@ -25,14 +25,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; import java.util.Map; import java.util.regex.PatternSyntaxException; /** * 考勤执行业务类 */ -public class AttendanceQlExpress { +public class QlExpress { public static ExpressRunner runner; @@ -65,24 +64,12 @@ public class AttendanceQlExpress { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - public static void main(String[] args) throws Exception { - AttendanceQlExpress test = new AttendanceQlExpress(); - - String statement = "IFS(1>1,1,1=1,0,-1)"; - Map context = new HashMap<>(); - context.put("a", 10000); - context.put("b", 2); - Object execute = test.execute(statement, context); - System.out.println(execute); - } - /** * @param statement 执行语句 * @param context 上下文 * @throws Exception */ - public Object execute(String statement, Map context) - throws Exception { + public Object execute(String statement, Map context) { String expressSql = statement; initRunner(runner); DynamicParamsUtil.supportDynamicParams = true; @@ -104,6 +91,7 @@ public class AttendanceQlExpress { if (obj instanceof DataType) { DataType dataType = (DataType) obj; resultObj.put("data", dataType.getContent()); + resultObj.put("dataType", dataType.getDataType()); resultObj.put("boolData", dataType.getContent()); } else { resultObj.put("data", obj); @@ -135,7 +123,7 @@ public class AttendanceQlExpress { JSONObject resultObj = new JSONObject(); resultObj.put("data", ""); - resultObj.put("excute", true); + resultObj.put("excute", false); return resultObj; } try { @@ -146,7 +134,7 @@ public class AttendanceQlExpress { JSONObject resultObj = new JSONObject(); resultObj.put("data", ""); - resultObj.put("excute", true); + resultObj.put("excute", false); return resultObj; } if (!(e instanceof PatternSyntaxException)) { diff --git a/src/com/engine/salary/formlua/entity/standard/execute/ExclDataType.java b/src/com/engine/salary/formlua/entity/standard/execute/ExclDataType.java index a249eb261..f12b32047 100644 --- a/src/com/engine/salary/formlua/entity/standard/execute/ExclDataType.java +++ b/src/com/engine/salary/formlua/entity/standard/execute/ExclDataType.java @@ -1,9 +1,5 @@ package com.engine.salary.formlua.entity.standard.execute; -/** - * @author 罗威 - */ - public enum ExclDataType { text("文本类型"),integral("整数类型"),decimal("小数类型"),datasource("数据源或选项类型"),bool("布尔类型"); diff --git a/src/com/engine/salary/formlua/entity/standard/execute/ExclFixField.java b/src/com/engine/salary/formlua/entity/standard/execute/ExclFixField.java index 5b34bf6fd..4ba17274f 100644 --- a/src/com/engine/salary/formlua/entity/standard/execute/ExclFixField.java +++ b/src/com/engine/salary/formlua/entity/standard/execute/ExclFixField.java @@ -2,7 +2,6 @@ package com.engine.salary.formlua.entity.standard.execute; /** * 固定字段标准类 - * @author 罗威 */ public class ExclFixField { /** diff --git a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java index a4d41d813..ec8cf3bda 100644 --- a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java +++ b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java @@ -1,11 +1,13 @@ package com.engine.salary.service.impl; +import com.alibaba.fastjson.JSONObject; import com.engine.core.impl.Service; import com.engine.salary.encrypt.AESEncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.enums.salaryformula.ReferenceTypeEnum; +import com.engine.salary.formlua.core.QlExpress; import com.engine.salary.formlua.entity.parameter.DataType; import com.engine.salary.service.FormulaRunService; import com.engine.salary.sys.enums.OpenEnum; @@ -22,7 +24,9 @@ import weaver.conn.RecordSetDataSource; import weaver.general.BaseBean; import java.math.BigDecimal; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Slf4j public class FormulaRunServiceImpl extends Service implements FormulaRunService { @@ -35,6 +39,8 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService private final Boolean isLog = "true".equals(baseBean.getPropValue("hrmSalary", "log")); + QlExpress express = new QlExpress(); + @Override public Object run(ExpressFormula expressFormula, List formulaVars, DataCollectionEmployee simpleEmployee) throws Exception { @@ -96,7 +102,7 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService //外部数据源 if (StringUtils.isNotBlank(datasourceId)) { RecordSetDataSource rs = new RecordSetDataSource(datasourceId); - log.error("执行外部sql,{},datasourceId{}", sql,datasourceId); + log.error("执行外部sql,{},datasourceId{}", sql, datasourceId); if (rs.executeSql(sql)) { if (rs.next()) { result = rs.getString(sqlReturnKey); @@ -118,21 +124,59 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService } private Object runFormula(ExpressFormula expressFormula, List formulaVars) throws Exception { + + //是否是自定义函数 + boolean isCustomFunction = true; + + String extendParam = expressFormula.getExtendParam(); + String formulaType; + try { + JsonNode jsonNode = objectMapper.readTree(extendParam); + //返回值配置 + JsonNode isCustomFunctionNode = jsonNode.get("isCustomFunction"); + if (isCustomFunctionNode != null) { + isCustomFunction = StringUtils.equals(isCustomFunctionNode.asText().trim(), "true"); + } + } catch (JsonProcessingException e) { + log.error("express execute fail, sql extendParam parse fail", e); + } + if (isLog) { log.info("FORMULA ExpressFormula {} {}", expressFormula.getFormula(), expressFormula.getFormulaRunScript()); } - DefaultContext context = new DefaultContext(); - formulaVars.forEach(v -> { - if (isLog) { - log.info("FORMULA formulaVar {} - {}", v.getFieldId(), v.getContent()); - } - if (DataType.NUMBER.equals(v.getFieldType()) && NumberUtils.isCreatable(v.getContent())) { - context.put(v.getFieldId(), new BigDecimal(v.getContent())); - } else { - context.put(v.getFieldId(), v.getContent()); - } - }); + String formula = expressFormula.getFormulaRunScript(); - return runner.execute(formula, context, null, true, false); + + if(isCustomFunction){ + DefaultContext context = new DefaultContext(); + formulaVars.forEach(v -> { + if (isLog) { + log.info("FORMULA formulaVar {} - {}", v.getFieldId(), v.getContent()); + } + if (DataType.NUMBER.equals(v.getFieldType()) && NumberUtils.isCreatable(v.getContent())) { + context.put(v.getFieldId(), new BigDecimal(v.getContent())); + } else { + context.put(v.getFieldId(), v.getContent()); + } + }); + return runner.execute(formula, context, null, true, false); + }else{ + Map context = new HashMap<>(); + formulaVars.forEach(v -> { + if (isLog) { + log.info("FORMULA formulaVar {} - {}", v.getFieldId(), v.getContent()); + } + if (DataType.NUMBER.equals(v.getFieldType()) && NumberUtils.isCreatable(v.getContent())) { + context.put(v.getFieldId(), new BigDecimal(v.getContent())); + } else { + context.put(v.getFieldId(), v.getContent()); + } + }); + Object execute = express.execute(formula, context); + if(execute instanceof JSONObject){ + return ((JSONObject) execute).get("data"); + } + return execute; + } } } diff --git a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java index 3b842a167..114c8a754 100644 --- a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java @@ -235,21 +235,21 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe } //验证公式是否可运行 if (ReferenceTypeEnum.parseByValue(param.getReferenceType()) == ReferenceTypeEnum.FORMULA) { - ExpressFormula test = ExpressFormula.builder().formulaRunScript(formulaRunScript).extendParam(param.getExtendParam()).referenceType(param.getReferenceType()).build(); - Object run = null; - try { - run = getFormulaRunService(user).run(test, parameters, DataCollectionEmployee.builder().employeeId((long) user.getUID()).build()); - } catch (Exception e) { - log.error("express execute fail ", e); - throw new SalaryRunTimeException("公式模拟运行出错,请检查公式配置!", e); - } - - if (run != null && StringUtils.isNotBlank(String.valueOf(run)) && returnTypeEnum == ReturnTypeEnum.NUMBER) { - //返回结果不是数字 - if (!NumberUtils.isCreatable(String.valueOf(run))) { - throw new SalaryRunTimeException("返回结果不是数值"); - } - } +// ExpressFormula test = ExpressFormula.builder().formulaRunScript(formulaRunScript).extendParam(param.getExtendParam()).referenceType(param.getReferenceType()).build(); +// Object run = null; +// try { +// run = getFormulaRunService(user).run(test, parameters, DataCollectionEmployee.builder().employeeId((long) user.getUID()).build()); +// } catch (Exception e) { +// log.error("express execute fail ", e); +// throw new SalaryRunTimeException("公式模拟运行出错,请检查公式配置!", e); +// } +// +// if (run != null && StringUtils.isNotBlank(String.valueOf(run)) && returnTypeEnum == ReturnTypeEnum.NUMBER) { +// //返回结果不是数字 +// if (!NumberUtils.isCreatable(String.valueOf(run))) { +// throw new SalaryRunTimeException("返回结果不是数值"); +// } +// } } if (ReferenceTypeEnum.parseByValue(param.getReferenceType()) == ReferenceTypeEnum.SQL) { From 3a555c186667ec3348a0d3f5002ab630685e55a9 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 20 Apr 2023 13:08:58 +0800 Subject: [PATCH 027/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B7=B2=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index 46436a4f0..d34efd87f 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -221,7 +221,7 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic result.put(SalaryFormulaReferenceEnum.SALARY_ITEM.getDefaultLabel(), salaryItem2FormulaVar(SalaryFormulaReferenceEnum.SALARY_ITEM, null)); result.put(SalaryFormulaReferenceEnum.ISSUED.getDefaultLabel(), - salaryItem2FormulaVar(SalaryFormulaReferenceEnum.SALARY_ITEM, null)); + salaryItem2FormulaVar(SalaryFormulaReferenceEnum.ISSUED, null)); result.put(SalaryFormulaReferenceEnum.SALARY_ARCHIVES.getDefaultLabel(), salaryArchives2FormulaVar(SalaryFormulaReferenceEnum.SALARY_ARCHIVES, null)); result.put(SalaryFormulaReferenceEnum.ADD_UP_SITUATION.getDefaultLabel(), From 135530d3b7e67bf6c9e073c561f2e77b3a0d018c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 20 Apr 2023 17:55:37 +0800 Subject: [PATCH 028/245] =?UTF-8?q?=E5=85=A8=E9=87=8F=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/mapper/datacollection/EmployMapper.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index 806a1bf2d..794b1491a 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -172,9 +172,12 @@ c.id as jobtitleId, e.companystartdate as companystartdate, e.mobile as mobile, - e.enddate as dismissdate + e.enddate as dismissdate, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, from hrmresource e left join hrmdepartment d on e.departmentid = d.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id left join hrmjobtitles c on e.jobtitle = c.id where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) From d2b304e6907f600f50759cef30e98204c2a1349f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 20 Apr 2023 18:04:18 +0800 Subject: [PATCH 029/245] =?UTF-8?q?=E5=85=A8=E9=87=8F=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/mapper/datacollection/EmployMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index 794b1491a..5cec7b295 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -174,7 +174,7 @@ e.mobile as mobile, e.enddate as dismissdate, sc.SUBCOMPANYNAME as subcompanyName, - sc.id as subcompanyid, + sc.id as subcompanyid from hrmresource e left join hrmdepartment d on e.departmentid = d.id left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id From 4a9df2276df6abf79e1b427fe881d417a8651a0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 21 Apr 2023 11:25:16 +0800 Subject: [PATCH 030/245] =?UTF-8?q?=E5=88=86=E9=83=A8=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SubCompanyBiz.java | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/com/engine/salary/biz/SubCompanyBiz.java diff --git a/src/com/engine/salary/biz/SubCompanyBiz.java b/src/com/engine/salary/biz/SubCompanyBiz.java new file mode 100644 index 000000000..a8a2a41b6 --- /dev/null +++ b/src/com/engine/salary/biz/SubCompanyBiz.java @@ -0,0 +1,26 @@ +package com.engine.salary.biz; + +import com.engine.salary.entity.hrm.SubCompanyInfo; +import weaver.conn.RecordSet; + +import java.util.ArrayList; +import java.util.List; + +public class SubCompanyBiz { + + public List list() { + List returnList = new ArrayList<>(); + + RecordSet rs = new RecordSet(); + rs.executeQuery("select id, subcompanyname from HrmsubCompany"); + while (rs.next()) { + returnList.add( + SubCompanyInfo.builder() + .id(Long.valueOf(rs.getString(1))) + .name(rs.getString(2)).build() + ); + } + return returnList; + } + +} From ce8ca9cdb89e6abb07a01463bf92bdc43565e994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 21 Apr 2023 13:52:57 +0800 Subject: [PATCH 031/245] =?UTF-8?q?=E5=88=86=E9=83=A8=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SubCompanyBiz.java | 26 ++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/biz/SubCompanyBiz.java b/src/com/engine/salary/biz/SubCompanyBiz.java index a8a2a41b6..2ca3cbd6d 100644 --- a/src/com/engine/salary/biz/SubCompanyBiz.java +++ b/src/com/engine/salary/biz/SubCompanyBiz.java @@ -1,6 +1,7 @@ package com.engine.salary.biz; import com.engine.salary.entity.hrm.SubCompanyInfo; +import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import java.util.ArrayList; @@ -16,11 +17,32 @@ public class SubCompanyBiz { while (rs.next()) { returnList.add( SubCompanyInfo.builder() - .id(Long.valueOf(rs.getString(1))) - .name(rs.getString(2)).build() + .id(Long.valueOf(rs.getString(1))) + .name(rs.getString(2)).build() ); } return returnList; } + /** + * 获取所有上级分部 + * + * @param subId + * @param returnList + * @return + */ + public List getSupSubCompanyLists(String subId, List returnList) { + RecordSet rs = new RecordSet(); + rs.executeSql("select supsubcomid from HrmsubCompany where id=" + subId); + while (rs.next()) { + String supsubcomid = rs.getString(1); + if (!StringUtils.equals(supsubcomid, "0")) { + returnList.add(supsubcomid); + getSupSubCompanyLists(supsubcomid, returnList); + } + } + return returnList; + } + + } From 36863c3695f7762962ee09e49c664e5b840b0610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 23 Apr 2023 10:14:32 +0800 Subject: [PATCH 032/245] =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataCollectionEmployee.java | 2 + .../mapper/datacollection/EmployMapper.xml | 3 +- .../entity/bo/SalaryStatisticsReportBO.java | 6 +- .../entity/param/SubTableDataQueryParam.java | 7 +- .../param/SubTableSearchConditionParam.java | 7 +- .../salary/report/enums/UnitTypeEnum.java | 16 +- .../service/SalaryStatisticsItemService.java | 7 + .../impl/SalaryStatisticsItemServiceImpl.java | 19 +- .../SalaryStatisticsReportServiceImpl.java | 450 +++++++++--------- .../salary/report/util/ReportEnumUtil.java | 11 +- .../web/SalaryStatisticsReportController.java | 61 ++- .../wrapper/SalaryStatisticsItemWrapper.java | 18 +- .../SalaryStatisticsReportWrapper.java | 42 +- 13 files changed, 358 insertions(+), 291 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java index 4be37e92f..e5f56c1f4 100644 --- a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java +++ b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java @@ -94,6 +94,8 @@ public class DataCollectionEmployee { @SalaryFormulaVar(defaultLabel = "出生日期", labelId = 98624, dataType = "string") private String birthday; + private Double workYear; + private String idNo; //是否是系统管理员 diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index 806a1bf2d..d66b81b48 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -22,7 +22,8 @@ e.status as status, e.workcode as workcode, e.companystartdate as companystartdate, - e.mobile as mobile + e.mobile as mobile, + e.workyear as workYear from hrmresource e where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index b7c9a2ab6..61a2a628e 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -767,7 +767,7 @@ public class SalaryStatisticsReportBO { String temp = String.valueOf(kv.get(key)).replace(COMMA, ""); countNow = countNow.add(new BigDecimal(temp)); } - map.put(key, ReportDataUtil.thousandthConvert(unitTypeConvert(countNow, UnitTypeEnum.YUAN.getItem()))); + map.put(key, ReportDataUtil.thousandthConvert(unitTypeConvert(countNow, UnitTypeEnum.YUAN.getValue()))); } // 有占比的话 if (key.contains(K_RATIO)) { @@ -790,13 +790,13 @@ public class SalaryStatisticsReportBO { String countLastValue = Optional.ofNullable(map.get(keyPrefix + K_LAST)).orElse(D_ZERO).toString().replace(COMMA, ""); BigDecimal countLast = new BigDecimal(countLastValue); map.put(keyPrefix + P_M2M_INCREASE, radio(countNow, countLast)); - map.put(keyPrefix + P_M2M_D_VALUE, ReportDataUtil.thousandthConvert(unitTypeConvert(countNow.subtract(countLast), UnitTypeEnum.YUAN.getItem()))); + map.put(keyPrefix + P_M2M_D_VALUE, ReportDataUtil.thousandthConvert(unitTypeConvert(countNow.subtract(countLast), UnitTypeEnum.YUAN.getValue()))); map.put(keyPrefix + P_M2M_LOWER_LIMIT, ""); map.put(keyPrefix + P_M2M_UPPER_LIMIT, ""); String countSameValue = Optional.ofNullable(map.get(keyPrefix + K_SAME)).orElse(D_ZERO).toString().replace(COMMA, ""); BigDecimal countSame = new BigDecimal(countSameValue); map.put(keyPrefix + P_Y2Y_INCREASE, radio(countNow, countSame)); - map.put(keyPrefix + P_Y2Y_D_VALUE, ReportDataUtil.thousandthConvert(unitTypeConvert(countNow.subtract(countSame), UnitTypeEnum.YUAN.getItem()))); + map.put(keyPrefix + P_Y2Y_D_VALUE, ReportDataUtil.thousandthConvert(unitTypeConvert(countNow.subtract(countSame), UnitTypeEnum.YUAN.getValue()))); map.put(keyPrefix + P_Y2Y_LOWER_LIMIT, ""); map.put(keyPrefix + P_Y2Y_UPPER_LIMIT, ""); } diff --git a/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java index 1abf3e2c3..d4eaa5d93 100644 --- a/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java @@ -8,12 +8,7 @@ import lombok.NoArgsConstructor; import java.util.List; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/1 - * @Version: v1.0 - */ + @Data @NoArgsConstructor @AllArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java b/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java index 3bd234ae0..3e53f2203 100644 --- a/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java @@ -10,12 +10,7 @@ import lombok.NoArgsConstructor; import java.util.List; import java.util.Map; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/1 - * @Version: v1.0 - */ + @Data @NoArgsConstructor @AllArgsConstructor diff --git a/src/com/engine/salary/report/enums/UnitTypeEnum.java b/src/com/engine/salary/report/enums/UnitTypeEnum.java index 3e49eb123..f1e008d40 100644 --- a/src/com/engine/salary/report/enums/UnitTypeEnum.java +++ b/src/com/engine/salary/report/enums/UnitTypeEnum.java @@ -1,33 +1,37 @@ package com.engine.salary.report.enums; -public enum UnitTypeEnum { +import com.engine.salary.enums.BaseEnum; + +public enum UnitTypeEnum implements BaseEnum { REN(1, 157087, "人"), YUAN(2, 152739, "元"), QIAN(3, 157088, "千"), BAIWAN(4, 152745, "百万"); - private Integer item; + private Integer value; private Integer labelId; private String defaultValue; UnitTypeEnum(Integer item, Integer labelId, String defaultValue) { - this.item = item; + this.value = item; this.labelId = labelId; this.defaultValue = defaultValue; } - public Integer getItem() { - return item; + @Override + public Integer getValue() { + return value; } public Integer getLabelId() { return labelId; } - public String getDefaultValue() { + @Override + public String getDefaultLabel() { return defaultValue; } } diff --git a/src/com/engine/salary/report/service/SalaryStatisticsItemService.java b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java index d8d66800f..c50786ee6 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsItemService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java @@ -44,4 +44,11 @@ public interface SalaryStatisticsItemService { * @return */ String save(SalaryStatisticsItemSaveParam param); + + /** + * 保存或更新 + * @param salaryStatisticsItemList + */ + void saveOrUpdateBatch(List salaryStatisticsItemList); + } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java index cabb494f0..fb4077258 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java @@ -115,8 +115,8 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt .medianRule(JSON.toJSONString(saveParam.getMedianRule())) .indexValue(max + 1) .statReportId(saveParam.getStatReportId()) - .unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getItem() : saveParam.getUnitType()) - .creator((long)user.getUID()) + .unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getValue() : saveParam.getUnitType()) + .creator((long) user.getUID()) .updateTime(now) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); @@ -139,7 +139,7 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt if (Objects.nonNull(saveParam.getUnitType())) { itemPO.setUnitType(saveParam.getUnitType()); } else { - itemPO.setItemValue(StringUtils.join(saveParam.getItemValue(),",")); + itemPO.setItemValue(StringUtils.join(saveParam.getItemValue(), ",")); itemPO.setCountRule(Objects.nonNull(saveParam.getCountRule()) ? JSON.toJSONString(saveParam.getCountRule()) : ""); itemPO.setSumRule(Objects.nonNull(saveParam.getSumRule()) ? JSON.toJSONString(saveParam.getSumRule()) : ""); itemPO.setAvgRule(Objects.nonNull(saveParam.getAvgRule()) ? JSON.toJSONString(saveParam.getAvgRule()) : ""); @@ -161,4 +161,17 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt } return StringUtils.EMPTY; } + + @Override + public void saveOrUpdateBatch(List salaryStatisticsItemList) { + salaryStatisticsItemList.forEach(po -> { + Long id = po.getId(); + SalaryStatisticsItemPO item = getSalaryStatisticsItemMapper().getById(id); + if (item == null) { + getSalaryStatisticsItemMapper().insertIgnoreNull(item); + } else { + getSalaryStatisticsItemMapper().update(item); + } + }); + } } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 49ebd855b..9689c9120 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.report.service.impl; +import com.alibaba.fastjson.JSON; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; @@ -30,11 +31,16 @@ import com.engine.salary.service.impl.SalaryAcctEmployeeServiceImpl; import com.engine.salary.service.impl.SalaryAcctResultServiceImpl; import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; +import com.engine.salary.util.SalaryAssert; +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 com.google.common.collect.Maps; +import com.google.common.collect.Sets; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -66,19 +72,19 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } private SalaryStatisticsItemService getSalaryStatisticsItemService(User user) { - return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); + return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); } private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { - return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); } private SalaryAcctResultService getSalaryAcctResultService(User user) { - return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } private TaxAgentService getTaxAgentService(User user) { - return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } private SalaryEmployeeService getSalaryEmployeeService(User user) { @@ -183,48 +189,48 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary @Override public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param) { -// SalaryAssert.notNull(param.getId(), SalaryI18nUtil.getI18nLabel(152562, "报表id不能为空")); -// if (Objects.isNull(param.getSalaryStartMonth()) || Objects.isNull(param.getSalaryEndMonth())) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100294, "薪资所属月必传")); -// } -// if ((CollectionUtils.isNotEmpty(param.getTaxAgent()) && param.getTaxAgent().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getIncomeCategory()) && param.getIncomeCategory().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getSubCompany()) && param.getSubCompany().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getGrade()) && param.getGrade().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getPosition()) && param.getPosition().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getStatus()) && param.getStatus().size() > 10) -// || (CollectionUtils.isNotEmpty(param.getEmployee()) && param.getEmployee().size() > 10) -// ) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182014, "统计数据范围条件数量过多")); -// } -// -// SalaryStatisticsReportPO po = getById(param.getId()); -// SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); -// po.setSalaryStartMonth(param.getSalaryStartMonth().atDay(1)); -// po.setSalaryEndMonth(param.getSalaryEndMonth().atDay(1)); -// -// po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); -// po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); -// po.setSubCompanySetting(JSON.toJSONString(param.getSubCompany())); -// po.setDepartSetting(JSON.toJSONString(param.getDepartment())); -// po.setGradeSetting(JSON.toJSONString(param.getGrade())); -// po.setPositionSetting(JSON.toJSONString(param.getPosition())); -// po.setStatusSetting(JSON.toJSONString(param.getStatus())); -// po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); -// po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); -// po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); -// getSalaryStatisticsReportMapper().updateIgnoreNull(po); -// -// // 获取自定义统计项目 -// List salaryStatisticsItemList = getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); -// -// salaryStatisticsItemList.forEach(e -> param.getItems().stream().filter(i -> i.getId().equals(e.getId())).findFirst().ifPresent(salaryStatisticsItem -> { -// e.setUnitType(salaryStatisticsItem.getUnitType()); -// e.setIndexValue(salaryStatisticsItem.getIndexValue()); -// })); -// this.getSalaryStatisticsItemService(user).saveOrUpdateBatch(salaryStatisticsItemList); + SalaryAssert.notNull(param.getId(), SalaryI18nUtil.getI18nLabel(152562, "报表id不能为空")); + if (Objects.isNull(param.getSalaryStartMonth()) || Objects.isNull(param.getSalaryEndMonth())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100294, "薪资所属月必传")); + } + if ((CollectionUtils.isNotEmpty(param.getTaxAgent()) && param.getTaxAgent().size() > 10) + || (CollectionUtils.isNotEmpty(param.getIncomeCategory()) && param.getIncomeCategory().size() > 10) + || (CollectionUtils.isNotEmpty(param.getSubCompany()) && param.getSubCompany().size() > 10) + || (CollectionUtils.isNotEmpty(param.getGrade()) && param.getGrade().size() > 10) + || (CollectionUtils.isNotEmpty(param.getPosition()) && param.getPosition().size() > 10) + || (CollectionUtils.isNotEmpty(param.getStatus()) && param.getStatus().size() > 10) + || (CollectionUtils.isNotEmpty(param.getEmployee()) && param.getEmployee().size() > 10) + ) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182014, "统计数据范围条件数量过多")); + } - // 记录日志 + SalaryStatisticsReportPO po = getById(param.getId()); + SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); + po.setSalaryStartMonth(SalaryDateUtil.localDateToDate(param.getSalaryStartMonth().atDay(1))); + po.setSalaryEndMonth(SalaryDateUtil.localDateToDate(param.getSalaryEndMonth().atDay(1))); + + po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); + po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); + po.setSubCompanySetting(JSON.toJSONString(param.getSubCompany())); + po.setDepartSetting(JSON.toJSONString(param.getDepartment())); + po.setGradeSetting(JSON.toJSONString(param.getGrade())); + po.setPositionSetting(JSON.toJSONString(param.getPosition())); + po.setStatusSetting(JSON.toJSONString(param.getStatus())); + po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); + po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); + po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); + getSalaryStatisticsReportMapper().updateIgnoreNull(po); + + // 获取自定义统计项目 + List salaryStatisticsItemList = getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); + + salaryStatisticsItemList.forEach(e -> param.getItems().stream().filter(i -> i.getId().equals(e.getId())).findFirst().ifPresent(salaryStatisticsItem -> { + e.setUnitType(salaryStatisticsItem.getUnitType()); + e.setIndexValue(salaryStatisticsItem.getIndexValue()); + })); + getSalaryStatisticsItemService(user).saveOrUpdateBatch(salaryStatisticsItemList); + + //记录日志 // LoggerContext loggerContext = new LoggerContext<>(); // loggerContext.setTargetId(String.valueOf(po.getId())); // loggerContext.setTargetName(po.getReportName()); @@ -341,12 +347,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return buildDepartRecords(data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_POSITION: return buildPositionRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_GRADE: - return buildGradeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_GRADE: +// return buildGradeRecords(data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: return buildStatusRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: - return buildTypeRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: +// return buildTypeRecords(data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_EMPLOYEE: return buildEmployeeRecords(param, data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_QUARTER: @@ -355,14 +361,14 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return buildHalfYearRecords(data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_YEAR: return buildYearRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_SEX: - return buildSexRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_SEX: +// return buildSexRecords(data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_JOB_CALL: return buildJobCallRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_SUPERIOR: - return buildSuperiorRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: - return buildMaritalStatusRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_SUPERIOR: +// return buildSuperiorRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: +// return buildMaritalStatusRecords(data, salaryAcctResultValueMap); // case SalaryStatisticsDimensionConstant.DM_EDUCATION: // return buildEducationRecords(data, salaryAcctResultValueMap); // case SalaryStatisticsDimensionConstant.DM_DEGREE: @@ -375,8 +381,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // return buildPoliticsStatusRecords(data, salaryAcctResultValueMap); // case SalaryStatisticsDimensionConstant.DM_AGE: // return buildAgeRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: -// return buildWorkYearRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: + return buildWorkYearRecords(data, salaryAcctResultValueMap); // case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: // return buildCompanyYearRecords(data, salaryAcctResultValueMap); default: @@ -763,98 +769,100 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } private PageInfo> buildEmployeeRecords(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// PageInfo> result = new PageInfo<>(param.getCurrent(), param.getPageSize(), employeeIds.size(), true); -// List> records = new ArrayList<>(); -// -// List pageEmployeeIds = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), employeeIds); -// List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); -// Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); -// Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); -// Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); -// Map employeeByIdMap = hrmCommonEmployeeService.getEmployeeByIds(accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()).stream().collect(Collectors.toMap(SimpleEmployee::getEmployeeId, SimpleEmployee::getUsername)); -// + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List> records = new ArrayList<>(); + + List pageEmployeeIds = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), employeeIds); + List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); + Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); + Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); + Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); + Map employeeByIdMap = getSalaryEmployeeService(user).getEmployeeByIds(accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList())).stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername)); + // List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); // Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); -// -// employeeListMap.forEach((k, v) -> { -// Map temp = new HashMap<>(); + + employeeListMap.forEach((k, v) -> { + Map temp = new HashMap<>(); // temp.put(DM, Objects.nonNull(employeeByIdMap.get(k)) ? employeeByIdMap.get(k) : employeeExtByIdMap.get(k)); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setList(records); -// return result; - return null; + temp.put(DM, employeeByIdMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + PageInfo> result = new PageInfo<>(); + result.setList(records); + result.setTotal(employeeIds.size()); + + return result; } private PageInfo> buildQuarterRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// Set quarterSet = Sets.newHashSet(); -// data.getList().forEach(sa -> quarterSet.add(ReportTimeUtil.getQuarter(sa.getSalaryMonth()))); -// List quarters = Lists.newArrayList(quarterSet).stream().sorted().collect(Collectors.toList()); -// Collections.reverse(quarters); -// -// quarters.forEach(k -> { -// List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(sa.getSalaryMonth()))).collect(Collectors.toList()); -// List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 3)))).collect(Collectors.toList()); -// List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setList(records); + List> records = new ArrayList<>(); + + Set quarterSet = Sets.newHashSet(); + data.getList().forEach(sa -> quarterSet.add(ReportTimeUtil.getQuarter(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))); + List quarters = quarterSet.stream().sorted().collect(Collectors.toList()); + Collections.reverse(quarters); + + quarters.forEach(k -> { + List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 3)))).collect(Collectors.toList()); + List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 12)))).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setList(records); return result; } private PageInfo> buildHalfYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// Set halfYearSet = Sets.newHashSet(); -// data.getList().forEach(sa -> halfYearSet.add(ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))); -// List halfYears = Lists.newArrayList(halfYearSet).stream().sorted().collect(Collectors.toList()); -// Collections.reverse(halfYears); -// -// halfYears.forEach(k -> { -// List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(sa.getSalaryMonth()))).collect(Collectors.toList()); -// List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 6)))).collect(Collectors.toList()); -// List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(sa.getSalaryMonth(), 12)))).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setList(records); + List> records = new ArrayList<>(); + + Set halfYearSet = Sets.newHashSet(); + data.getList().forEach(sa -> halfYearSet.add(ReportTimeUtil.getHalfYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))); + List halfYears = halfYearSet.stream().sorted().collect(Collectors.toList()); + Collections.reverse(halfYears); + + halfYears.forEach(k -> { + List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 6)))).collect(Collectors.toList()); + List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 12)))).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setList(records); return result; } private PageInfo> buildYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// Set yearSet = Sets.newHashSet(); -// data.getList().forEach(sa -> yearSet.add(ReportTimeUtil.getYear(sa.getSalaryMonth()))); -// List years = Lists.newArrayList(yearSet).stream().sorted().collect(Collectors.toList()); -// Collections.reverse(years); -// -// years.forEach(k -> { -// List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); -// List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); -// List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(sa.getSalaryMonth()))).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setList(records); + List> records = new ArrayList<>(); + + Set yearSet = Sets.newHashSet(); + data.getList().forEach(sa -> yearSet.add(ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))); + List years = yearSet.stream().sorted().collect(Collectors.toList()); + Collections.reverse(years); + + years.forEach(k -> { + List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setList(records); return result; } @@ -1037,7 +1045,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); // -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); // if (simpleUserInfoMap.isEmpty()) { // return result; // } @@ -1092,33 +1100,33 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } -// private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { -// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); -// -// List simpleUserInfoList; -// List lastSimpleUserInfoList; -// List sameSimpleUserInfoList; -// Map> map = Maps.newHashMap(); -// try { -// simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(employeeIds, data.getTenantKey()); -// lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(lastEmployeeIds, data.getTenantKey()); -// sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : remoteUserInfoService.querySimpleUserInfoByUserIds(sameEmployeeIds, data.getTenantKey()); -// } catch (Exception e) { -// log.info("获取员工个人信息失败: {}", e.getMessage()); -// return map; -// } -// map.put(NOW_INFO, simpleUserInfoList); -// map.put(LAST_INFO, lastSimpleUserInfoList); -// map.put(SAME_INFO, sameSimpleUserInfoList); -// return map; -// } -// + private Map> getSimpleUserInfoList(SalaryStatisticsReportDataDTO data) { + List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List lastEmployeeIds = data.getLastList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List sameEmployeeIds = data.getSameList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + + List simpleUserInfoList; + List lastSimpleUserInfoList; + List sameSimpleUserInfoList; + Map> map = Maps.newHashMap(); + try { + simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : getSalaryEmployeeService(user).getEmployeeByIds(employeeIds); + lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : getSalaryEmployeeService(user).getEmployeeByIds(lastEmployeeIds); + sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : getSalaryEmployeeService(user).getEmployeeByIds(sameEmployeeIds); + } catch (Exception e) { + log.info("获取员工个人信息失败: {}", e.getMessage()); + return map; + } + map.put(NOW_INFO, simpleUserInfoList); + map.put(LAST_INFO, lastSimpleUserInfoList); + map.put(SAME_INFO, sameSimpleUserInfoList); + return map; + } + // private PageInfo> buildEducationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); // if (simpleUserInfoMap.isEmpty()) { // return result; // } @@ -1176,7 +1184,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // private PageInfo> buildDegreeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); // if (simpleUserInfoMap.isEmpty()) { // return result; // } @@ -1234,7 +1242,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // private PageInfo> buildNationRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); // if (simpleUserInfoMap.isEmpty()) { // return result; // } @@ -1292,7 +1300,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // private PageInfo> buildHouseholdTypeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); // if (simpleUserInfoMap.isEmpty()) { // return result; // } @@ -1350,7 +1358,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // private PageInfo> buildPoliticsStatusRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); // if (simpleUserInfoMap.isEmpty()) { // return result; // } @@ -1408,7 +1416,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // private PageInfo> buildAgeRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); // if (simpleUserInfoMap.isEmpty()) { // return result; // } @@ -1461,67 +1469,67 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // result.setList(records); // return result; // } -// -// private PageInfo> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set workYearSet = new HashSet<>(); -// -// Map empIdWorkYearMap = new HashMap<>(); -// Map lastEmpIdWorkYearMap = new HashMap<>(); -// Map sameEmpIdWorkYearMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (employee.getWorkYear() != null) { -// workYearSet.add(employee.getWorkYear()); -// empIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (employee.getWorkYear() != null) { -// lastEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (employee.getWorkYear() != null) { -// sameEmpIdWorkYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear()); -// } -// }); -// List workYears = Lists.newArrayList(workYearSet); -// workYears = workYears.stream().sorted().collect(Collectors.toList()); -// -// workYears.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// + + private PageInfo> buildWorkYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set workYearSet = new HashSet<>(); + + Map empIdWorkYearMap = new HashMap<>(); + Map lastEmpIdWorkYearMap = new HashMap<>(); + Map sameEmpIdWorkYearMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getWorkYear() != null) { + workYearSet.add(employee.getWorkYear()); + empIdWorkYearMap.put(employee.getEmployeeId(), employee.getWorkYear()); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getWorkYear() != null) { + lastEmpIdWorkYearMap.put(employee.getEmployeeId(), employee.getWorkYear()); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getWorkYear() != null) { + sameEmpIdWorkYearMap.put(employee.getEmployeeId(), employee.getWorkYear()); + } + }); + List workYears = Lists.newArrayList(workYearSet); + workYears = workYears.stream().sorted().collect(Collectors.toList()); + + workYears.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + // private PageInfo> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); // if (simpleUserInfoMap.isEmpty()) { // return result; // } @@ -1623,7 +1631,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // } // // private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); +// Map> simpleUserInfoMap = getSimpleUserInfoList(data); // if (simpleUserInfoMap.isEmpty()) { // return; // } diff --git a/src/com/engine/salary/report/util/ReportEnumUtil.java b/src/com/engine/salary/report/util/ReportEnumUtil.java index 4c3a290bd..5332c7d5e 100644 --- a/src/com/engine/salary/report/util/ReportEnumUtil.java +++ b/src/com/engine/salary/report/util/ReportEnumUtil.java @@ -6,18 +6,13 @@ import com.engine.salary.util.SalaryI18nUtil; import java.util.*; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/1 - * @Version: v1.0 - */ + public class ReportEnumUtil { public static Map unitTypeMap() { Map unitTypeMap = new HashMap<>(); Arrays.stream(UnitTypeEnum.values()).forEach(unitTypeEnum -> { - unitTypeMap.put(unitTypeEnum.getItem(), SalaryI18nUtil.getI18nLabel( unitTypeEnum.getLabelId(), unitTypeEnum.getDefaultValue())); + unitTypeMap.put(unitTypeEnum.getValue(), SalaryI18nUtil.getI18nLabel(unitTypeEnum.getLabelId(), unitTypeEnum.getDefaultLabel())); }); return unitTypeMap; } @@ -27,7 +22,7 @@ public class ReportEnumUtil { Arrays.stream(DimensionEnum.values()).forEach(dimensionEnum -> { Map dimensionMap = new HashMap<>(); dimensionMap.put("id", dimensionEnum.getValue().toString()); - dimensionMap.put("content", SalaryI18nUtil.getI18nLabel( dimensionEnum.getLabelId(), dimensionEnum.getDefaultLabel())); + dimensionMap.put("content", SalaryI18nUtil.getI18nLabel(dimensionEnum.getLabelId(), dimensionEnum.getDefaultLabel())); result.add(dimensionMap); }); return result; diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index ed8a52760..906452801 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; +import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; import com.engine.salary.report.wrapper.SalaryStatisticsReportWrapper; import com.engine.salary.util.ResponseResult; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -20,10 +21,13 @@ import java.util.List; import java.util.Map; /** - * @Description: 薪酬统计报表 - * @Author: wangxiangzhong - * @Date: 2022/12/15 11:40 - */ + * 薪酬统计报表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryStatisticsReportController { private SalaryStatisticsReportWrapper getSalaryStatisticsReportWrapper(User user) { @@ -54,7 +58,7 @@ public class SalaryStatisticsReportController { @Produces(MediaType.APPLICATION_JSON) public String getForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalaryStatisticsReportWrapper(user)::getFrom, id); + return new ResponseResult>(user).run(getSalaryStatisticsReportWrapper(user)::getFrom, id); } /** @@ -85,26 +89,35 @@ public class SalaryStatisticsReportController { return new ResponseResult, Map>(user).run(getSalaryStatisticsReportWrapper(user)::delete, ids); } + /** + * 获取薪酬统计报表查询条件 + * + * @param request + * @param response + * @param id + * @return + */ + @GET + @Path("/getSearchCondition") + @Produces(MediaType.APPLICATION_JSON) + public String getSearchCondition(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsReportWrapper(user)::getSearchCondition, id); + } -// @GetMapping("/getSearchCondition") -// @ApiOperation("获取薪酬统计报表查询条件") -// @WeaPermission(publicPermission = true) -// public WeaResult getSearchCondition(@RequestParam Long id) { -// return WeaResult.success(salaryStatisticsReportWrapper.getSearchCondition(id, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); -// } - -// /** -// * 保存薪酬统计报表查询条件 -// * -// * @param param -// * @return -// */ -// @PostMapping("/saveSearchCondition") -// @ApiOperation("保存薪酬统计报表查询条件") -// @WeaPermission(publicPermission = true) -// public WeaResult saveSearchCondition(@RequestBody SalaryStatisticsSearchConditionSaveParam param) { -// return WeaResult.success(salaryStatisticsReportWrapper.saveSearchCondition(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); -// } + /** + * 保存薪酬统计报表查询条件 + * + * @param param + * @return + */ + @POST + @Path("/saveSearchCondition") + @Produces(MediaType.APPLICATION_JSON) + public String saveSearchCondition(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsSearchConditionSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsReportWrapper(user)::saveSearchCondition, param); + } /** * 获取薪酬统计报表数据 diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java index 044883e2d..10fb01cff 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java @@ -32,11 +32,11 @@ import java.util.stream.Collectors; public class SalaryStatisticsItemWrapper extends Service { private SalaryStatisticsItemService getSalaryStatisticsItemService(User user) { - return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); + return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); } private SalaryItemService getSalaryItemService(User user) { - return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); } /** @@ -82,12 +82,12 @@ public class SalaryStatisticsItemWrapper extends Service { public Map buildRule(SalaryStatisticsItemPO salaryStatisticsItem) { Map weaTable = new HashMap<>(); List list = new ArrayList<>(); - WeaTableColumn ruleName = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(157532, "统计规则"), "ruleName", "20%"); - WeaTableColumn ratio = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(162990, "占比"), "ratio", "10%"); - WeaTableColumn m2m = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(157533, "环比"), "m2m", "10%"); - WeaTableColumn m2mLimit = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(157536, "环比增幅正常区间设置"), "m2mLimit", "25%"); - WeaTableColumn y2y = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(162991, "同比"), "y2y", "10%"); - WeaTableColumn y2yLimit = new WeaTableColumn(SalaryI18nUtil.getI18nLabel(162992, "同比增幅正常区间设置"), "y2yLimit", "25%"); + WeaTableColumn ruleName = new WeaTableColumn("20%", SalaryI18nUtil.getI18nLabel(157532, "统计规则"), "ruleName"); + WeaTableColumn ratio = new WeaTableColumn("10%", SalaryI18nUtil.getI18nLabel(162990, "占比"), "ratio"); + WeaTableColumn m2m = new WeaTableColumn("10%", SalaryI18nUtil.getI18nLabel(157533, "环比"), "m2m"); + WeaTableColumn m2mLimit = new WeaTableColumn("25%", SalaryI18nUtil.getI18nLabel(157536, "环比增幅正常区间设置"), "m2mLimit"); + WeaTableColumn y2y = new WeaTableColumn("10%", SalaryI18nUtil.getI18nLabel(162991, "同比"), "y2y"); + WeaTableColumn y2yLimit = new WeaTableColumn("25%", SalaryI18nUtil.getI18nLabel(162992, "同比增幅正常区间设置"), "y2yLimit"); list.add(ruleName); list.add(ratio); list.add(m2m); @@ -179,7 +179,7 @@ public class SalaryStatisticsItemWrapper extends Service { Map rule = new HashMap<>(); rule.put("id", po.getId().toString()); rule.put("itemName", po.getItemName()); - rule.put("unitType", po.getUnitType() == null ? UnitTypeEnum.YUAN.getItem() : po.getUnitType()); + rule.put("unitType", po.getUnitType() == null ? UnitTypeEnum.YUAN.getValue() : po.getUnitType()); rule.put("itemValue", po.getItemValue()); rule.put("countRule", po.getCountRule()); rule.put("sumRule", po.getSumRule()); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index a0b4d18cc..1a3250681 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -1,5 +1,6 @@ package com.engine.salary.report.wrapper; +import com.alibaba.fastjson.JSONArray; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; @@ -21,9 +22,7 @@ import com.engine.salary.report.service.impl.SalaryStatisticsDimensionServiceImp 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.util.JsonUtil; -import com.engine.salary.util.SalaryEntityUtil; -import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.*; import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; @@ -140,7 +139,42 @@ public class SalaryStatisticsReportWrapper extends Service { public Map delete(Collection ids) { return getSalaryStatisticsReportService(user).delete(ids); } - + + + /** + * 获取统计条件 + * + * @param id + * @return + */ + public Map getSearchCondition(Long id) { + // 高级搜索实例 + Map map =new HashMap<>(); + + if (id != null) { + SalaryStatisticsReportPO po = getSalaryStatisticsReportService(user).getById(id); + SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); + + Map data = new HashMap<>(); + data.put("salaryStartMonth", SalaryDateUtil.localDate2YearMonth(po.getSalaryStartMonth())); + data.put("salaryEndMonth", SalaryDateUtil.localDate2YearMonth(po.getSalaryEndMonth())); + data.put("taxAgent", JSONArray.parseArray(po.getTaxAgentSetting())); + data.put("incomeCategory", JSONArray.parseArray(po.getIncomeCategorySetting())); + data.put("subCompany", JSONArray.parseArray(po.getSubCompanySetting())); + data.put("department", JSONArray.parseArray(po.getDepartSetting())); + data.put("grade", JSONArray.parseArray(po.getGradeSetting())); + data.put("position", JSONArray.parseArray(po.getPositionSetting())); + data.put("status", JSONArray.parseArray(po.getStatusSetting())); + data.put("employee", JSONArray.parseArray(po.getEmployeeSetting())); + data.put("hiredate", JSONArray.parseArray(po.getHiredateSetting())); +// data.put("leavedate", JSONArray.parseArray(po.getLeavedateSetting())); + + map.put("data",data); + } + + return map; + } + public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param) { return this.getSalaryStatisticsReportService(user).saveSearchCondition(param); From d56e9aff8234238dae0b4e95ba0c98b3d5dc649b Mon Sep 17 00:00:00 2001 From: sy Date: Sun, 23 Apr 2023 13:35:17 +0800 Subject: [PATCH 033/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E5=87=BAexcel=E7=9A=84title=E8=A1=8C?= =?UTF-8?q?=E8=83=8C=E6=99=AF=E7=BD=AE=E4=B8=BA=E7=81=B0=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/util/excel/ExcelUtil.java | 8 ++++---- src/com/engine/salary/util/excel/ExcelUtilPlus.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/util/excel/ExcelUtil.java b/src/com/engine/salary/util/excel/ExcelUtil.java index 2aa9775d1..c733129fb 100644 --- a/src/com/engine/salary/util/excel/ExcelUtil.java +++ b/src/com/engine/salary/util/excel/ExcelUtil.java @@ -29,7 +29,7 @@ public class ExcelUtil { titleFont.setFontHeightInPoints((short) 15); titleCellStyle.setFont(titleFont); titleCellStyle.setAlignment(HorizontalAlignment.CENTER); - titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); @@ -78,7 +78,7 @@ public class ExcelUtil { titleFont.setFontHeightInPoints((short) 15); titleCellStyle.setFont(titleFont); titleCellStyle.setAlignment(HorizontalAlignment.CENTER); - titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); @@ -138,7 +138,7 @@ public class ExcelUtil { titleFont.setFontHeightInPoints((short) 15); titleCellStyle.setFont(titleFont); titleCellStyle.setAlignment(HorizontalAlignment.CENTER); - titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); @@ -206,7 +206,7 @@ public class ExcelUtil { titleFont.setFontHeightInPoints((short) 15); titleCellStyle.setFont(titleFont); titleCellStyle.setAlignment(HorizontalAlignment.CENTER); - titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index 0fb1cdab8..f8cb09c79 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -28,7 +28,7 @@ public class ExcelUtilPlus { titleFont.setFontHeightInPoints((short) 15); titleCellStyle.setFont(titleFont); titleCellStyle.setAlignment(HorizontalAlignment.CENTER); - titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); From 413de52d6a5af8b9ce0c7b5f18cf972508283ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 23 Apr 2023 16:27:11 +0800 Subject: [PATCH 034/245] =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E5=B7=A5=E5=85=B7v1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/cache/SalaryCacheKey.java | 6 +- .../salaryacct/SalaryAcctManager.java | 351 ++++++++++++++++++ .../salaryacct/SalaryAcctSupplementParam.java | 34 ++ 3 files changed, 386 insertions(+), 5 deletions(-) create mode 100644 src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java create mode 100644 src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java diff --git a/src/com/engine/salary/cache/SalaryCacheKey.java b/src/com/engine/salary/cache/SalaryCacheKey.java index 549dccd31..76d19ea7d 100644 --- a/src/com/engine/salary/cache/SalaryCacheKey.java +++ b/src/com/engine/salary/cache/SalaryCacheKey.java @@ -1,11 +1,7 @@ package com.engine.salary.cache; /** - * @description: 用于定义本服务内部使用的缓存key - * @author: xiajun - * @modified By: xiajun - * @date: Created in 12/13/21 11:12 AM - * @version:v1.0 + * 用于定义本服务内部使用的缓存key */ public class SalaryCacheKey { diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java new file mode 100644 index 000000000..05f17cb7b --- /dev/null +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java @@ -0,0 +1,351 @@ +package com.engine.salary.maintainer.salaryacct; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculateBO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculatePriorityBO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; +import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultTempPO; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; +import com.engine.salary.entity.salarysob.po.SalarySobAdjustRulePO; +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.exception.SalaryRunTimeException; +import com.engine.salary.mapper.salaryacct.SalaryAcctResultMapper; +import com.engine.salary.service.*; +import com.engine.salary.service.impl.*; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.google.common.collect.Lists; +import com.weaver.util.threadPool.ThreadPoolUtil; +import com.weaver.util.threadPool.constant.ModulePoolEnum; +import com.weaver.util.threadPool.entity.LocalRunnable; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import weaver.hrm.User; + +import java.math.BigDecimal; +import java.util.*; +import java.util.concurrent.BlockingDeque; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.stream.Collectors; + +/** + * 薪资核算维护类 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class SalaryAcctManager extends Service { + private SalaryAcctResultMapper getSalaryAcctResultMapper() { + return MapperProxyFactory.getProxy(SalaryAcctResultMapper.class); + } + + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + + private SalarySobItemService getSalarySobItemService(User user) { + return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); + } + + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + private SalarySobEmpFieldService getSalarySobEmpFieldService(User user) { + return ServiceUtil.getService(SalarySobEmpFieldServiceImpl.class, user); + } + + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + + private SalaryAcctRecordService getSalaryAcctRecordService(User user) { + return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); + } + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + private SalaryFormulaService getSalaryFormulaService(User user) { + return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); + } + + private SalarySobAdjustRuleService getSalarySobAdjustRuleService(User user) { + return ServiceUtil.getService(SalarySobAdjustRuleServiceImpl.class, user); + } + + private SalarySobItemHideService getSalarySobItemHideService(User user) { + return ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user); + } + + private SalaryAcctCalculateService getSalaryAcctCalculateService(User user) { + return ServiceUtil.getService(SalaryAcctCalculateServiceImpl.class, user); + } + + private SalaryAcctProgressService getSalaryAcctProgressService(User user) { + return ServiceUtil.getService(SalaryAcctProgressServiceImpl.class, user); + } + + private DataSourceTransactionManager dataSourceTransactionManager; + + private SalaryAcctResultTempService getSalaryAcctResultTempService(User user) { + return ServiceUtil.getService(SalaryAcctResultTempServiceImpl.class, user); + } +// private LoggerTemplate salaryAcctRecordLoggerTemplate; + + private SIAccountService getSIAccountService(User user) { + return ServiceUtil.getService(SIAccountServiceImpl.class, user); + } + + private AttendQuoteFieldService getAttendQuoteFieldService(User user) { + return ServiceUtil.getService(AttendQuoteFieldServiceImpl.class, user); + } + + private SalaryAcctReportService getSalaryAcctReportService(User user) { + return ServiceUtil.getService(SalaryAcctReportServiceImpl.class, user); + } + + private SalarySobItemGroupService getSalarySobItemGroupService(User user) { + return ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user); + } + + private SalarySobBackItemService getSalarySobBackItemService(User user) { + return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); + } + + + /** + * 补充核算 + * 核算已归档后,需要重新核算某一项 + */ + public void supplementAcctRecord(SalaryAcctSupplementParam param) { + + + } + + /** + * 薪资核算-核算 + * + * @param calculateParam 薪资核算的参数 + */ + public void calculate(SalaryAcctSupplementParam calculateParam) { + log.info("开始核算V1{}", calculateParam); + + //当前登陆人员 + DataCollectionEmployee simpleEmployee = new DataCollectionEmployee(); + simpleEmployee.setEmployeeId((long) user.getUID()); + + // 检查是否正在核算中 + SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId()); + if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { + return; + } + // 初始化进度 + SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO() + .setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")) + .setTitleLabelId(97515L) + .setTotalQuantity(NumberUtils.INTEGER_ONE) + .setCalculatedQuantity(NumberUtils.INTEGER_ZERO) + .setProgress(BigDecimal.ZERO) + .setStatus(true) + .setMessage(StringUtils.EMPTY); + getSalaryAcctProgressService(user).initProgress("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), initProgress); + new Thread() { + public void run() { + calculate(calculateParam, simpleEmployee); + } + }.start(); + + } + + + public void calculate(SalaryAcctSupplementParam calculateParam, DataCollectionEmployee simpleEmployee) { + try { + // 1、查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(calculateParam.getSalaryAcctRecordId()); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + //查询对应账套 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + if (Objects.isNull(salarySobPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资账套不存在或已被删除")); + } + // 2、查询薪资核算记录的薪资周期、考勤周期等 + SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(calculateParam.getSalaryAcctRecordId()); + // 3、查询薪资核算记录所用薪资账套的薪资项目副本 + List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + if (CollectionUtils.isEmpty(salarySobItemPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99151, "当前所用的薪资账套未选择任何薪资项目,无法核算")); + } + // 回算薪资项目 + List salarySobBackItems = Collections.emptyList(); + if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)) { + salarySobBackItems = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + } + // 4、查询当前租户的所有薪资项目 + List salaryItemPOS = getSalaryItemService(user).listAll(); + // 5、查询薪资核算记录所用薪资账套的调薪计薪规则 + List salarySobAdjustRulePOS = getSalarySobAdjustRuleService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 6、查询社保福利的所有字段 + Map welfareColumns = getSIAccountService(user).welfareColumns(); + // 7、查询考勤引用的所有字段 + List attendQuoteFieldListDTOS = getAttendQuoteFieldService(user).listAll(); + + //核算锁定值 + List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); + Map acctResults = new HashMap<>(); + if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { + List acctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); + acctResults = Optional.ofNullable(acctResultPOS) + .orElse(new ArrayList<>()) + .stream() + .filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())) + .collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); + } + + // 8、查询公式详情 + Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); + formulaIds.addAll(SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId)); + formulaIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getFormulaId)); + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); + // 本次运算的回算薪资项目所涉及的变量 + Set issuedFieldIds = new HashSet<>(); + // 9、计算薪资项目的运算优先级 + List> salarySobItemsWithPriority = SalaryAcctCalculatePriorityBO.calculatePriority(salarySobItemPOS, salaryItemPOS, expressFormulas, salarySobBackItems, issuedFieldIds); + // 10、根据id查询其他合并计税的薪资核算记录 + List otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAcctRecordPO.getId()); + // 11、查询本次核算人员 + List salaryAcctEmployeePOS; + if (CollectionUtils.isEmpty(calculateParam.getIds())) { + salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordPO.getId()); + } else { + salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByIds(calculateParam.getIds()); + } + if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(103378, "薪资核算人员不能为空")); + } + // 11.1、初始化进度 + SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); + getSalaryAcctProgressService(user).initProgress("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), initProgress); + // 12、对薪资核算人员进行拆分 + List> partition = Lists.partition(salaryAcctEmployeePOS, 5000); + // 12.1、监控子线程的任务执行 + CountDownLatch childMonitor = new CountDownLatch(partition.size()); + // 12.2、记录子线程的执行结果 + BlockingDeque calculateResults = new LinkedBlockingDeque<>(partition.size()); + // 12.3、生成本次运算的key + String calculateKey = UUID.randomUUID().toString(); + // 12.4、多线程运算,运算结果存放在临时表中 + for (List acctEmployeePOS : partition) { + SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO() + .setSalaryAcctRecordPO(salaryAcctRecordPO) + .setSalarySobPO(salarySobPO) + .setSalarySobCycleDTO(salarySobCycleDTO) + .setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS) + .setSalaryAcctLockResultPOS(MapUtils.emptyIfNull(acctResults)) + .setLockSalaryItemIds(lockSalaryItemIds) + .setSalarySobItemPOS(salarySobItemPOS) + .setSalaryItemIdWithPriorityList(salarySobItemsWithPriority) + .setExpressFormulas(expressFormulas) + .setSalaryItemPOS(salaryItemPOS) + .setSalarySobAdjustRulePOS(salarySobAdjustRulePOS) + .setWelfareColumns(MapUtils.emptyIfNull(welfareColumns)) + .setAttendQuoteFieldListDTOS(attendQuoteFieldListDTOS) + .setSalaryAcctEmployeePOS(acctEmployeePOS) + .setIssuedFieldIds(issuedFieldIds) + .setChildMonitor(childMonitor) + .setResults(calculateResults) + .setCalculateKey(calculateKey); + List finalSalarySobBackItems = salarySobBackItems; + LocalRunnable localRunnable = new LocalRunnable() { + @Override + public void execute() { + getSalaryAcctCalculateService(user).calculate(salaryAcctCalculateBO, simpleEmployee, finalSalarySobBackItems); + } + }; + ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.HRM, "salaryAcctCalculateV2", localRunnable); + } + // 13、等待所有子线程执行完毕 + childMonitor.await(); + // 14、判断子线程执行结果 + boolean allSuccess = calculateResults.stream().allMatch(SalaryAcctCalculateBO.Result::isStatus); + if (!allSuccess) { + // 薪资核算实现的线程的错误信息 + String errorMsg = calculateResults.stream().filter(result -> !result.isStatus()).map(SalaryAcctCalculateBO.Result::getErrMsg).collect(Collectors.joining("|")); + getSalaryAcctProgressService(user).fail("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), errorMsg); + // 删除薪资核算临时存储表中的数据 + getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); + return; + } + // 15、处理核算结果临时表数据 + handleSalaryAcctResultTemp(calculateParam, calculateKey); + + getSalaryAcctProgressService(user).finish("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), true); + + } catch (Exception e) { + log.info("薪资核算出错:{}", e.getMessage(), e); +// throw new SalaryRunTimeException(e); + getSalaryAcctProgressService(user).fail("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage()); + } finally { + // 数据库字段加密用 + } + } + + /** + * 处理薪资核算临时存储表中的数据 + * + * @param calculateParam + * @param calculateKey + */ + private void handleSalaryAcctResultTemp(SalaryAcctSupplementParam calculateParam, String calculateKey) { + // 查询薪资核算结果的临时存储 + List salaryAcctResultTempPOS = getSalaryAcctResultTempService(user).listByCalculateKey(calculateKey); + // 删除原来的薪资核算结果 + if (CollectionUtils.isNotEmpty(calculateParam.getIds())) { + getSalaryAcctResultMapper().deleteBySalaryAcctEmpIds(calculateParam.getIds()); + } else { + getSalaryAcctResultMapper().deleteBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); + getSalaryAcctReportService(user).deleteBySalaryAcctRecordId(calculateParam.getSalaryAcctRecordId()); + } + // 保存薪资的薪资核算结果 + List salaryAcctResultPOS = SalaryAcctResultBO.convert2ResultPO(salaryAcctResultTempPOS); +// batchSave(salaryAcctResultPOS); + //保存核算报表数据 +// List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2ReportPO(salaryAcctResultTempPOS, calculateParam.getEmps()); +// getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); + // 删除薪资核算临时存储表中的数据 + getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); + } + + +} diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java new file mode 100644 index 000000000..a4bcd3c64 --- /dev/null +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java @@ -0,0 +1,34 @@ +package com.engine.salary.maintainer.salaryacct; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; + +/** + * 薪资补充核算的参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryAcctSupplementParam { + + //核算人员的id,不是employeeId而是salaryAcctEmpId + private Collection ids; + + @DataCheck(require = true,message = "参数错误,薪资核算记录ID不能为空") + private Long salaryAcctRecordId; + + @DataCheck(require = true,message = "参数错误,薪资项目ID不能为空") + private String salaryItemIds; + +} From 37310f02f633865b499e185e7bb52e003d479a38 Mon Sep 17 00:00:00 2001 From: sy Date: Sun, 23 Apr 2023 16:35:52 +0800 Subject: [PATCH 035/245] =?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=A1=A5=E5=B7=AE?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=9B=B8=E5=85=B3=E5=90=88=E8=AE=A1=E9=A1=B9?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E9=80=BB=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 | 59 +++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 3ac3faca2..b75972dc5 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -1701,36 +1701,58 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { insuranceAccountDetailPO.setOtherComJson(JSON.toJSONString(otherComMap)); } - if (!StringUtils.isEmpty(baseMap.getOrDefault("个人合计", "").toString())) { - insuranceAccountDetailPO.setPerSum(baseMap.get("个人合计").toString()); - } if (!StringUtils.isEmpty(baseMap.getOrDefault("社保个人合计", "").toString())) { insuranceAccountDetailPO.setSocialPerSum(baseMap.get("社保个人合计").toString()); + } else { + insuranceAccountDetailPO.setSocialPerSum(sumOfMapValue(socialPerMap)); } if (!StringUtils.isEmpty(baseMap.getOrDefault("公积金个人合计", "").toString())) { insuranceAccountDetailPO.setFundPerSum(baseMap.get("公积金个人合计").toString()); + } else { + insuranceAccountDetailPO.setFundPerSum(sumOfMapValue(fundPerMap)); } if (!StringUtils.isEmpty(baseMap.getOrDefault("其他福利个人合计", "").toString())) { insuranceAccountDetailPO.setOtherPerSum(baseMap.get("其他福利个人合计").toString()); + } else { + insuranceAccountDetailPO.setOtherPerSum(sumOfMapValue(otherPerMap)); } - if (!StringUtils.isEmpty(baseMap.getOrDefault("单位合计", "").toString())) { - insuranceAccountDetailPO.setComSum(baseMap.get("单位合计").toString()); + if (!StringUtils.isEmpty(baseMap.getOrDefault("个人合计", "").toString())) { + insuranceAccountDetailPO.setPerSum(baseMap.get("个人合计").toString()); + } else { + insuranceAccountDetailPO.setPerSum(new BigDecimal(insuranceAccountDetailPO.getSocialPerSum()) + .add(new BigDecimal(insuranceAccountDetailPO.getFundPerSum())) + .add(new BigDecimal(insuranceAccountDetailPO.getOtherPerSum())).toString()); } if (!StringUtils.isEmpty(baseMap.getOrDefault("社保单位合计", "").toString())) { insuranceAccountDetailPO.setSocialComSum(baseMap.get("社保单位合计").toString()); + } else { + insuranceAccountDetailPO.setSocialComSum(sumOfMapValue(socialComMap)); } if (!StringUtils.isEmpty(baseMap.getOrDefault("公积金单位合计", "").toString())) { insuranceAccountDetailPO.setFundComSum(baseMap.get("公积金单位合计").toString()); + } else { + insuranceAccountDetailPO.setFundComSum(sumOfMapValue(fundComMap)); } if (!StringUtils.isEmpty(baseMap.getOrDefault("其他福利单位合计", "").toString())) { insuranceAccountDetailPO.setOtherComSum(baseMap.get("其他福利单位合计").toString()); + } else { + insuranceAccountDetailPO.setOtherComSum(sumOfMapValue(otherComMap)); + } + + + if (!StringUtils.isEmpty(baseMap.getOrDefault("单位合计", "").toString())) { + insuranceAccountDetailPO.setComSum(baseMap.get("单位合计").toString()); + } else { + insuranceAccountDetailPO.setComSum(new BigDecimal(insuranceAccountDetailPO.getSocialComSum()) + .add(new BigDecimal(insuranceAccountDetailPO.getFundComSum())) + .add(new BigDecimal(insuranceAccountDetailPO.getOtherComSum())).toString()); } if (!StringUtils.isEmpty(baseMap.getOrDefault("账单月份", "").toString())) { @@ -1739,15 +1761,31 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (!StringUtils.isEmpty(baseMap.getOrDefault("社保合计", "").toString())) { insuranceAccountDetailPO.setSocialSum(baseMap.get("社保合计").toString()); + } else { + insuranceAccountDetailPO.setSocialSum(new BigDecimal(insuranceAccountDetailPO.getSocialComSum()) + .add(new BigDecimal(insuranceAccountDetailPO.getSocialPerSum())) + .toString()); } if (!StringUtils.isEmpty(baseMap.getOrDefault("公积金合计", "").toString())) { insuranceAccountDetailPO.setFundSum(baseMap.get("公积金合计").toString()); + } else { + insuranceAccountDetailPO.setFundSum(new BigDecimal(insuranceAccountDetailPO.getFundComSum()) + .add(new BigDecimal(insuranceAccountDetailPO.getFundPerSum())) + .toString()); } if (!StringUtils.isEmpty(baseMap.getOrDefault("其他福利合计", "").toString())) { insuranceAccountDetailPO.setOtherSum(baseMap.get("其他福利合计").toString()); + } else { + insuranceAccountDetailPO.setOtherSum(new BigDecimal(insuranceAccountDetailPO.getOtherComSum()) + .add(new BigDecimal(insuranceAccountDetailPO.getOtherPerSum())) + .toString()); } if (!StringUtils.isEmpty(baseMap.getOrDefault("合计", "").toString())) { insuranceAccountDetailPO.setTotal(baseMap.get("合计").toString()); + } else { + insuranceAccountDetailPO.setTotal(new BigDecimal(insuranceAccountDetailPO.getPerSum()) + .add(new BigDecimal(insuranceAccountDetailPO.getComSum())) + .toString()); } //如果导入的时补缴数据,还会包含补缴月份 @@ -1760,6 +1798,17 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return insuranceAccountDetailPO; } + /** + * map中value值求和 + */ + public String sumOfMapValue(Map welfarePay){ + BigDecimal sum = new BigDecimal("0"); + for (String value : welfarePay.values()) { + sum = sum.add(new BigDecimal(value)); + } + return sum.toString(); + } + /** * 对比新旧两份数据,并更新数据 */ From f4ebcf987cae743a48b699a88e62e3f92aebd958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 23 Apr 2023 17:30:43 +0800 Subject: [PATCH 036/245] =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E4=BC=B0=E8=AE=A1?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/salary/web/MaintainerController.java | 9 +++ .../maintainer/MaintainerController.java | 56 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/com/api/salary/web/MaintainerController.java create mode 100644 src/com/engine/salary/maintainer/MaintainerController.java diff --git a/src/com/api/salary/web/MaintainerController.java b/src/com/api/salary/web/MaintainerController.java new file mode 100644 index 000000000..f43fe0a46 --- /dev/null +++ b/src/com/api/salary/web/MaintainerController.java @@ -0,0 +1,9 @@ +package com.api.salary.web; + + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/maintainer") +public class MaintainerController extends com.engine.salary.maintainer.MaintainerController{ + +} diff --git a/src/com/engine/salary/maintainer/MaintainerController.java b/src/com/engine/salary/maintainer/MaintainerController.java new file mode 100644 index 000000000..12040d334 --- /dev/null +++ b/src/com/engine/salary/maintainer/MaintainerController.java @@ -0,0 +1,56 @@ +package com.engine.salary.maintainer; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.maintainer.salaryacct.SalaryAcctManager; +import com.engine.salary.maintainer.salaryacct.SalaryAcctSupplementParam; +import com.engine.salary.util.ResponseResult; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import lombok.extern.slf4j.Slf4j; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +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.Map; + +/** + * 累计专项附加扣除 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class MaintainerController { + + private SalaryAcctManager getSalaryAcctManager(User user) { + return ServiceUtil.getService(SalaryAcctManager.class, user); + } + + //---------------------------薪资核算 start ------------------------------------ + + /** + * 补充核算 + * + * @param queryParam + * @return + */ + @POST + @Path("/template/list") + @Produces(MediaType.APPLICATION_JSON) + public String templateList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctSupplementParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryAcctManager(user)::supplementAcctRecord, queryParam); + } + + + + //---------------------------薪资核算 end ------------------------------------ + +} From 31235096bb7e8338ad94c1b86cae150a57da715e Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Sun, 23 Apr 2023 17:37:06 +0800 Subject: [PATCH 037/245] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=BE=80=E6=9C=9F?= =?UTF-8?q?=E7=B4=AF=E8=AE=A1=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datacollection/AddUpSituationManager.java | 64 +++++++++++++++++++ .../taxdeclaration/TaxDeclarationMapper.java | 2 +- .../taxdeclaration/TaxDeclarationMapper.xml | 9 +++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java diff --git a/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java b/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java new file mode 100644 index 000000000..39a930ebe --- /dev/null +++ b/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java @@ -0,0 +1,64 @@ +package com.engine.salary.maintainer.datacollection; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; +import com.engine.salary.mapper.taxdeclaration.TaxDeclarationMapper; +import com.engine.salary.service.TaxDeclarationService; +import com.engine.salary.service.impl.TaxDeclarationServiceImpl; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import weaver.general.BaseBean; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.YearMonth; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author Harryxzy + * @date 2023/04/23 17:23 + * @description 往期累计情况维护类 + */ +public class AddUpSituationManager extends Service { + + private TaxDeclarationMapper getTaxDeclarationMapper() { + return MapperProxyFactory.getProxy(TaxDeclarationMapper.class); + } + + private TaxDeclarationService getTaxDeclarationService() { + return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user); + } + + public String recoverAddUpHistoryData() { + // 获取已有的个税申报表记录 + List taxDeclarationList = getTaxDeclarationMapper().listSome(new TaxDeclarationPO()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + Map taxDeclarationMap = SalaryEntityUtil.convert2Map(taxDeclarationList, TaxDeclarationPO::getId, PO->PO.getTaxAgentId()+"-"+sdf.format(PO.getSalaryMonth())); + BaseBean bb = new BaseBean(); + List taxDeclarationIds = taxDeclarationList.stream().map(TaxDeclarationPO::getId).collect(Collectors.toList()); + bb.writeLog("往期累计数据恢复DataIds:"+ taxDeclarationIds); + bb.writeLog("往期累计数据恢复DataMap:"+ taxDeclarationMap); + // 循环调用生成申报单接口 + for(int i =0; i < taxDeclarationList.size(); i++){ + TaxDeclarationPO PO = taxDeclarationList.get(i); + bb.writeLog("开始删除生成:"+PO.getTaxAgentId()+"-"+PO.getSalaryMonth()); + // 删除记录 + int delete = getTaxDeclarationMapper().deleteByIdZj(PO.getId()); + LocalDate localDate = SalaryDateUtil.dateToLocalDate(PO.getSalaryMonth()); + // 调用生成申报单接口 + YearMonth yearMonth = YearMonth.of(localDate.getYear(),localDate.getMonth()); + try { + getTaxDeclarationService().save(TaxDeclarationSaveParam.builder().salaryMonth(yearMonth).taxAgentId(PO.getTaxAgentId()).build()); + }catch (Exception e){ + bb.writeLog("错误:"+e); + continue; + } + } + return "SUCCESS"; + } +} diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.java b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.java index a252a430b..5785ed794 100644 --- a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.java +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.java @@ -1,7 +1,6 @@ package com.engine.salary.mapper.taxdeclaration; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; -import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.Collection; @@ -41,4 +40,5 @@ public interface TaxDeclarationMapper { */ void deleteByIds(@Param("ids") Collection ids); + int deleteByIdZj(Long id); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml index fb270b1e1..24ea392ff 100644 --- a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml @@ -32,6 +32,15 @@ ,t.income_category + + UPDATE hrsa_tax_declaration + SET delete_type = 1, + update_time ='2023-01-01' + WHERE delete_type = 0 + AND id = #{id} + + + - SELECT - - FROM hrsa_salary_stats_report t + SELECT + + FROM hrsa_salary_stats_report t WHERE delete_type = 0 - - - + + + - + SELECT + + FROM hrsa_salary_stats_report t + WHERE id = #{id} AND delete_type = 0 + + - + SELECT + + FROM hrsa_salary_stats_report t + WHERE delete_type = 0 + + AND create_time = #{createTime} + + + AND creator = #{creator} + + + AND delete_type = #{deleteType} + + + AND depart_setting = #{departSetting} + + + AND dimension = #{dimension} + + + AND employee_setting = #{employeeSetting} + + + AND grade_setting = #{gradeSetting} + + + AND hiredate_setting = #{hiredateSetting} + + + AND id = #{id} + + + AND income_category_setting = #{incomeCategorySetting} + + + AND leavedate_setting = #{leavedateSetting} + + + AND position_setting = #{positionSetting} + + + AND remark = #{remark} + + + AND report_name = #{reportName} + + + AND salary_end_month = #{salaryEndMonth} + + + AND salary_start_month = #{salaryStartMonth} + + + AND second_dimension = #{secondDimension} + + + AND sort_index = #{sortIndex} + + + AND sort_type = #{sortType} + + + AND status_setting = #{statusSetting} + + + AND sub_company_setting = #{subCompanySetting} + + + AND tax_agent_setting = #{taxAgentSetting} + + + AND tenant_key = #{tenantKey} + + + AND update_time = #{updateTime} + + AND id IN #{id} ORDER BY id DESC - - - + + + - INSERT INTO hrsa_salary_stats_report - + INSERT INTO hrsa_salary_stats_report + - - create_time, - - - creator, - - - delete_type, - - - depart_setting, - - - dimension, - - - employee_setting, - - - grade_setting, - - - hiredate_setting, - - - id, - - - income_category_setting, - - - leavedate_setting, - - - position_setting, - - - remark, - - - report_name, - - - salary_end_month, - - - salary_start_month, - - - second_dimension, - - - sort_index, - - - sort_type, - - - status_setting, - - - sub_company_setting, - - - tax_agent_setting, - - - tenant_key, - - - update_time, - - - - - #{createTime}, - - - #{creator}, - - - #{deleteType}, - - - #{departSetting}, - - - #{dimension}, - - - #{employeeSetting}, - - - #{gradeSetting}, - - - #{hiredateSetting}, - - - #{id}, - - - #{incomeCategorySetting}, - - - #{leavedateSetting}, - - - #{positionSetting}, - - - #{remark}, - - - #{reportName}, - - - #{salaryEndMonth}, - - - #{salaryStartMonth}, - - - #{secondDimension}, - - - #{sortIndex}, - - - #{sortType}, - - - #{statusSetting}, - - - #{subCompanySetting}, - - - #{taxAgentSetting}, - - - #{tenantKey}, - - - #{updateTime}, - - + + create_time, + + + creator, + + + delete_type, + + + depart_setting, + + + dimension, + + + employee_setting, + + + grade_setting, + + + hiredate_setting, + + + id, + + + income_category_setting, + + + leavedate_setting, + + + position_setting, + + + remark, + + + report_name, + + + salary_end_month, + + + salary_start_month, + + + second_dimension, + + + sort_index, + + + sort_type, + + + status_setting, + + + sub_company_setting, + + + tax_agent_setting, + + + tenant_key, + + + update_time, + + + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{departSetting}, + + + #{dimension}, + + + #{employeeSetting}, + + + #{gradeSetting}, + + + #{hiredateSetting}, + + + #{id}, + + + #{incomeCategorySetting}, + + + #{leavedateSetting}, + + + #{positionSetting}, + + + #{remark}, + + + #{reportName}, + + + #{salaryEndMonth}, + + + #{salaryStartMonth}, + + + #{secondDimension}, + + + #{sortIndex}, + + + #{sortType}, + + + #{statusSetting}, + + + #{subCompanySetting}, + + + #{taxAgentSetting}, + + + #{tenantKey}, + + + #{updateTime}, + + - + - UPDATE hrsa_salary_stats_report - - create_time=#{createTime}, - creator=#{creator}, - delete_type=#{deleteType}, - depart_setting=#{departSetting}, - dimension=#{dimension}, - employee_setting=#{employeeSetting}, - grade_setting=#{gradeSetting}, - hiredate_setting=#{hiredateSetting}, - income_category_setting=#{incomeCategorySetting}, - leavedate_setting=#{leavedateSetting}, - position_setting=#{positionSetting}, - remark=#{remark}, - report_name=#{reportName}, - salary_end_month=#{salaryEndMonth}, - salary_start_month=#{salaryStartMonth}, - second_dimension=#{secondDimension}, - sort_index=#{sortIndex}, - sort_type=#{sortType}, - status_setting=#{statusSetting}, - sub_company_setting=#{subCompanySetting}, - tax_agent_setting=#{taxAgentSetting}, - tenant_key=#{tenantKey}, - update_time=#{updateTime}, - - WHERE id = #{id} AND delete_type = 0 - - - - - - UPDATE hrsa_salary_stats_report - - - create_time=#{createTime}, - - - creator=#{creator}, - - - delete_type=#{deleteType}, - - - depart_setting=#{departSetting}, - - - dimension=#{dimension}, - - - employee_setting=#{employeeSetting}, - - - grade_setting=#{gradeSetting}, - - - hiredate_setting=#{hiredateSetting}, - - - income_category_setting=#{incomeCategorySetting}, - - - leavedate_setting=#{leavedateSetting}, - - - position_setting=#{positionSetting}, - - - remark=#{remark}, - - - report_name=#{reportName}, - - - salary_end_month=#{salaryEndMonth}, - - - salary_start_month=#{salaryStartMonth}, - - - second_dimension=#{secondDimension}, - - - sort_index=#{sortIndex}, - - - sort_type=#{sortType}, - - - status_setting=#{statusSetting}, - - - sub_company_setting=#{subCompanySetting}, - - - tax_agent_setting=#{taxAgentSetting}, - - - tenant_key=#{tenantKey}, - - - update_time=#{updateTime}, - - - WHERE id = #{id} AND delete_type = 0 + UPDATE hrsa_salary_stats_report + + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + depart_setting=#{departSetting}, + dimension=#{dimension}, + employee_setting=#{employeeSetting}, + grade_setting=#{gradeSetting}, + hiredate_setting=#{hiredateSetting}, + income_category_setting=#{incomeCategorySetting}, + leavedate_setting=#{leavedateSetting}, + position_setting=#{positionSetting}, + remark=#{remark}, + report_name=#{reportName}, + salary_end_month=#{salaryEndMonth}, + salary_start_month=#{salaryStartMonth}, + second_dimension=#{secondDimension}, + sort_index=#{sortIndex}, + sort_type=#{sortType}, + status_setting=#{statusSetting}, + sub_company_setting=#{subCompanySetting}, + tax_agent_setting=#{taxAgentSetting}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 - - - - UPDATE hrsa_salary_stats_report - SET delete_type=1 - WHERE id = #{id} AND delete_type = 0 - + + + + UPDATE hrsa_salary_stats_report + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + depart_setting=#{departSetting}, + + + dimension=#{dimension}, + + + employee_setting=#{employeeSetting}, + + + grade_setting=#{gradeSetting}, + + + hiredate_setting=#{hiredateSetting}, + + + income_category_setting=#{incomeCategorySetting}, + + + leavedate_setting=#{leavedateSetting}, + + + position_setting=#{positionSetting}, + + + remark=#{remark}, + + + report_name=#{reportName}, + + + salary_end_month=#{salaryEndMonth}, + + + salary_start_month=#{salaryStartMonth}, + + + second_dimension=#{secondDimension}, + + + sort_index=#{sortIndex}, + + + sort_type=#{sortType}, + + + status_setting=#{statusSetting}, + + + sub_company_setting=#{subCompanySetting}, + + + tax_agent_setting=#{taxAgentSetting}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_stats_report + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + UPDATE hrsa_salary_stats_report SET delete_type = 1 - WHERE delete_type = 0 + WHERE delete_type = 0 AND id IN #{id} diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index 61a2a628e..83f07aa3a 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -14,6 +14,7 @@ import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.report.enums.UnitTypeEnum; import com.engine.salary.report.util.ReportDataUtil; import com.engine.salary.report.util.ReportTimeUtil; +import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; @@ -86,19 +87,19 @@ public class SalaryStatisticsReportBO { * @param po */ public static void poToQueryParam(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po) { -// param.setSalaryStartMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryStartMonth())); -// param.setSalaryEndMonth(ReportTimeUtil.getFormatYearMonth(po.getSalaryEndMonth())); + param.setSalaryStartMonth(SalaryDateUtil.getFormatYearMonth(po.getSalaryStartMonth())); + param.setSalaryEndMonth(SalaryDateUtil.getFormatYearMonth(po.getSalaryEndMonth())); - // todo 待优化 +// todo 待优化 // String key = "id"; -// param.setTaxAgent(JSON.parseArray(po.getTaxAgentSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setIncomeCategory(JSON.parseArray(po.getIncomeCategorySetting(), Map.class).stream().map(m -> Integer.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setSubCompany(JSON.parseArray(po.getSubCompanySetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setDepart(JSON.parseArray(po.getDepartSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setGrade(JSON.parseArray(po.getGradeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setPosition(JSON.parseArray(po.getPositionSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setStatus(JSON.parseArray(po.getStatusSetting(), Map.class).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); -// param.setEmployee(JSON.parseArray(po.getEmployeeSetting(), Map.class).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setTaxAgent(((List) JSON.parseArray(po.getTaxAgentSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setIncomeCategory(((List) JSON.parseArray(po.getIncomeCategorySetting(), Map.class)).stream().map(m -> Integer.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setSubCompany(((List) JSON.parseArray(po.getSubCompanySetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setDepart(((List) JSON.parseArray(po.getDepartSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setGrade(((List) JSON.parseArray(po.getGradeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setPosition(((List) JSON.parseArray(po.getPositionSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); +// param.setStatus(((List) JSON.parseArray(po.getStatusSetting(), Map.class)).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); +// param.setEmployee(((List) JSON.parseArray(po.getEmployeeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); // param.setHiredate(JSON.parseArray(po.getHiredateSetting(), LocalDate.class)); // param.setLeavedate(JSON.parseArray(po.getLeavedateSetting(), LocalDate.class)); } @@ -597,6 +598,9 @@ public class SalaryStatisticsReportBO { } public static List> po2map(List list, Map> salaryAcctResultValueMap) { + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + } return list.stream().map(sa -> salaryAcctResultValueMap.get(sa.getId())).collect(Collectors.toList()); } @@ -831,7 +835,7 @@ public class SalaryStatisticsReportBO { Map itemMap = salaryStatisticsItemList.stream().collect(Collectors.toMap(SalaryStatisticsItemPO::getId, Function.identity())); Map itemIdNameMap = salaryStatisticsItemList.stream().collect(LinkedHashMap::new, (map, item) -> map.put(item.getId(), item.getItemName()), LinkedHashMap::putAll); itemIdNameMap.forEach((k, v) -> { - WeaTableColumnGroup weaTableColumn = new WeaTableColumnGroup("300", k.toString(), v); + WeaTableColumnGroup weaTableColumn = new WeaTableColumnGroup("300", v, k.toString()); SalaryStatisticsItemPO itemPO = itemMap.get(k); List children = new ArrayList<>(); // 1.合计规则children diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java index f2161262d..e9ebbddf3 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java @@ -2,8 +2,6 @@ package com.engine.salary.report.entity.dto; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -21,13 +19,13 @@ import lombok.NoArgsConstructor; //"薪酬统计维度表单") public class SalaryStatisticsDimensionFormDTO { - @ApiModelProperty("主键id") + //主键id") @JsonSerialize(using = ToStringSerializer.class) private Long id; - @ApiModelProperty("统计维度基础表单") + //统计维度基础表单") private Object baseForm; - @ApiModelProperty("分组设置") + //分组设置") private Object groupSetting; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java index 821d459c0..7d76e822b 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java @@ -3,8 +3,6 @@ package com.engine.salary.report.entity.dto; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -25,20 +23,20 @@ import lombok.NoArgsConstructor; //"薪酬统计维度列表") public class SalaryStatisticsDimensionListDTO { - @ApiModelProperty("主键id") + //主键id") @JsonSerialize(using = ToStringSerializer.class) private Long id; - @ApiModelProperty("统计维度") + // 统计维度") private String dimName; - @ApiModelProperty("描述") + // 描述") private String remark; - @ApiModelProperty("维度类型") + // 维度类型") private String dimType; - @ApiModelProperty("是否默认") + //是否默认") @JsonIgnore private Integer isDefault; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java index a270fa70c..e09871606 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java @@ -2,8 +2,6 @@ package com.engine.salary.report.entity.dto; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -22,35 +20,35 @@ import java.util.List; @AllArgsConstructor //"报表查询入参") public class SalaryStatisticsEchartsDTO { - @ApiModelProperty("分析图配置表id") + // 分析图配置表id") @JsonSerialize(using = ToStringSerializer.class) private Long id; - @ApiModelProperty("报表id") + //报表id") @JsonSerialize(using = ToStringSerializer.class) private Long reportId; - @ApiModelProperty("报表类型") + //报表类型") private Integer chartsType; - @ApiModelProperty("统计项目") + // 统计项目") private List itemValues; - @ApiModelProperty("统计列") + //统计列") private String itemColValue; - @ApiModelProperty("维度统计范围") + // 维度统计范围") private Integer dimensionRange; - @ApiModelProperty("排序统计项目") + //排序统计项目") private String itemSortValue; - @ApiModelProperty("排序列") + // 排序列") private String itemColSortValue; - @ApiModelProperty("排序类型") + // 排序类型") private Integer sortType; - @ApiModelProperty("排序取数值") + // 排序取数值") private Integer sortNum; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java index 29e96341a..3848c31fe 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java @@ -3,8 +3,6 @@ package com.engine.salary.report.entity.dto; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -24,12 +22,12 @@ import java.util.List; //"薪酬统计员工明细核算结果") public class SalaryStatisticsEmployeeDetailResultDTO { - @ApiModelProperty("核算人员") + //核算人员") private List salaryAcctEmployeeList; - @ApiModelProperty("核算结果") + //核算结果") private List salaryAcctResultValueList; - @ApiModelProperty("薪资项目") + //薪资项目") private List salaryItemList; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java index 60b8cdc91..6b87f3d6d 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java @@ -2,8 +2,6 @@ package com.engine.salary.report.entity.dto; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -21,31 +19,31 @@ import lombok.NoArgsConstructor; //"薪酬统计员工列表") public class SalaryStatisticsEmployeeListDTO { - @ApiModelProperty("主键id") + //主键id") @JsonSerialize(using = ToStringSerializer.class) private Long id; - @ApiModelProperty("姓名") + //姓名") private String name; - @ApiModelProperty("分部") + //分部") private String subCompany; - @ApiModelProperty("部门") + //部门") private String department; - @ApiModelProperty("岗位") + //岗位") private String position; - @ApiModelProperty("员工状态") + // 员工状态") private String status; - @ApiModelProperty("工号") + //工号") private String jobNum; - @ApiModelProperty("证件号码") + //证件号码") private String idNo; - @ApiModelProperty("人员类型") + //人员类型") private Integer employeeType; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java index 56d397f42..41ff65310 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java @@ -2,8 +2,6 @@ package com.engine.salary.report.entity.dto; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -23,13 +21,13 @@ import java.util.Map; //"薪酬统计自定义统计项表单") public class SalaryStatisticsItemFormDTO { - @ApiModelProperty("主键id") + //主键id") @JsonSerialize(using = ToStringSerializer.class) private Long id; - @ApiModelProperty("基础表单") + //基础表单") private Object baseForm; - @ApiModelProperty("统计规则") + //统计规则") private Map ruleData; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java index 602d2a361..86923ed9d 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.dto; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -21,27 +19,27 @@ import java.math.BigDecimal; //"薪酬统计报表自定义统计项目规则") public class SalaryStatisticsItemRuleDTO { - @ApiModelProperty("是否有合计列") + //是否有合计列") private Integer totalValue; - @ApiModelProperty("是否有占比列") + //是否有占比列") private Integer ratioValue; - @ApiModelProperty("是否有环比列") + //是否有环比列") private Integer m2mValue; - @ApiModelProperty("合计环比上限") + //合计环比上限") private BigDecimal m2mUpperLimit; - @ApiModelProperty("合计环比下限") + //合计环比下限") private BigDecimal m2mLowerLimit; - @ApiModelProperty("是否有同比列") + //是否有同比列") private Integer y2yValue; - @ApiModelProperty("合计同比上限") + //合计同比上限") private BigDecimal y2yUpperLimit; - @ApiModelProperty("合计同比下限") + //合计同比下限") private BigDecimal y2yLowerLimit; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java index 614182496..646311a6c 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java @@ -4,8 +4,6 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -25,22 +23,22 @@ import java.util.List; //"薪酬统计报表数据") public class SalaryStatisticsReportDataDTO { - @ApiModelProperty("本期数据") + //本期数据") private List list; - @ApiModelProperty("上期数据") + //上期数据") private List lastList; - @ApiModelProperty("同期数据") + // 同期数据") private List sameList; - @ApiModelProperty("统计项目") + //统计项目") private List salaryStatisticsItemList; - @ApiModelProperty("当前登录人id") + //当前登录人id") @JsonSerialize(using = ToStringSerializer.class) private Long employeeId; - @ApiModelProperty("租户key") + //租户key") private String tenantKey; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java index dd8fbff31..f698810ab 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.dto; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -21,10 +19,10 @@ import java.util.List; //"薪酬统计报表表单") public class SalaryStatisticsReportFormDTO { - @ApiModelProperty("报表名称") + //报表名称") private String reportName; - @ApiModelProperty("统计维度") + //统计维度") private String dimension; private List statsDimOptions; diff --git a/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java b/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java index ee6eab45e..ecb433c36 100644 --- a/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java +++ b/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.dto; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -22,33 +20,33 @@ import java.util.List; //"报表查询入参") public class SubTableChartsDTO { - @ApiModelProperty("分析图配置表id") + //分析图配置表id") private Long id; - @ApiModelProperty("报表id") + //报表id") private Long tableId; - @ApiModelProperty("报表类型") + //报表类型") private Integer chartsType; - @ApiModelProperty("统计项目") + //统计项目") private List itemValues; - @ApiModelProperty("统计列") + //统计列") private String itemColValue; - @ApiModelProperty("维度统计范围") + //维度统计范围") private Integer dimensionRange; - @ApiModelProperty("排序统计项目") + // 排序统计项目") private String itemSortValue; - @ApiModelProperty("排序列") + //排序列") private String itemColSortValue; - @ApiModelProperty("排序类型") + //排序类型") private Integer sortType; - @ApiModelProperty("排序取数值") + //排序取数值") private Integer sortNum; } diff --git a/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java b/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java index 4fa6db410..5b9d9a7e3 100644 --- a/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java +++ b/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java @@ -1,8 +1,6 @@ package com.engine.salary.report.entity.dto; import com.engine.salary.entity.taxagent.po.TaxAgentPO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -23,9 +21,9 @@ import java.util.List; //"管理员/总管理员查看个税扣缴义务人") public class TaxAgentViewDTO { - @ApiModelProperty("是否能够查看操作全部个税扣缴义务人") + // 是否能够查看操作全部个税扣缴义务人") private Boolean isEnableAll; - @ApiModelProperty("可以查看操作的个税扣缴义务人列表") + //可以查看操作的个税扣缴义务人列表") private List taxAgentList; } diff --git a/src/com/engine/salary/report/entity/param/BaseQueryParam.java b/src/com/engine/salary/report/entity/param/BaseQueryParam.java index 463da7911..f8bd0ccd3 100644 --- a/src/com/engine/salary/report/entity/param/BaseQueryParam.java +++ b/src/com/engine/salary/report/entity/param/BaseQueryParam.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -14,15 +12,15 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor -//"分页参数") +//分页参数 public class BaseQueryParam { - @ApiModelProperty("当前页码") + //当前页码 private Integer current = 1; - @ApiModelProperty("每页数据条数") + //每页数据条数 private Integer pageSize = 10; - @ApiModelProperty("总条数") + //总条数 private Integer total = 0; } diff --git a/src/com/engine/salary/report/entity/param/ExportCommonParam.java b/src/com/engine/salary/report/entity/param/ExportCommonParam.java index 9c8c31ea6..8d8f403c3 100644 --- a/src/com/engine/salary/report/entity/param/ExportCommonParam.java +++ b/src/com/engine/salary/report/entity/param/ExportCommonParam.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -21,21 +19,21 @@ import java.util.Map; //"通用层叠表导出") public class ExportCommonParam { - @ApiModelProperty("columns") + //columns") private List columns; - @ApiModelProperty("data") + //data") private List> data; - @ApiModelProperty("excel名称") + //excel名称") private String sheetName; - @ApiModelProperty("维度名称") + //维度名称") private String dimensionName; - @ApiModelProperty("操作员") + //操作员") private String userName; - @ApiModelProperty("加密") + //加密") private String sharePassword; } diff --git a/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java index 52e8cbd6c..690b31c29 100644 --- a/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -22,12 +20,12 @@ import java.util.List; //"薪资核算员工查询参数") public class SalaryAcctEmployeeQueryParam { - @ApiModelProperty("关键字") + // 关键字") private String keyword; - @ApiModelProperty("年份") + // 年份") private Integer year; - @ApiModelProperty("薪资所属月") + //薪资所属月") private List salaryMonth; } \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java index 6633c236a..7458a2da3 100644 --- a/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java @@ -1,6 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; import org.apache.commons.collections4.CollectionUtils; @@ -19,19 +18,19 @@ import java.util.Collection; @Accessors(chain = true) public class SalaryEmployeeQueryParam { - @ApiModelProperty("人员名称") + //人员名称 private String usernameLike; - @ApiModelProperty("部门") + //部门 private Collection departmentIds; - @ApiModelProperty("岗位") + //岗位 private Collection positionIds; - @ApiModelProperty("状态") + //状态 private String personnelStatus; - @ApiModelProperty("工号") + //工号 private String jobNumLike; public boolean isEmpty(){ diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java index 39b59626d..b5b9efb80 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java @@ -1,8 +1,6 @@ package com.engine.salary.report.entity.param; import com.engine.salary.common.BaseQueryParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -20,6 +18,6 @@ import lombok.NoArgsConstructor; //"薪酬统计维度查询参数") public class SalaryStatisticsDimensionQueryParam extends BaseQueryParam { - @ApiModelProperty("名称") + //名称") private String dimName; } diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java index 97b49b7b0..450063350 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java @@ -3,7 +3,6 @@ package com.engine.salary.report.entity.param; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.report.enums.SalaryStatisticsDimensionTypeEnum; import com.engine.salary.util.SalaryI18nUtil; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -26,28 +25,28 @@ import java.util.Objects; //"薪酬统计维度保存参数") public class SalaryStatisticsDimensionSaveParam { - @ApiModelProperty("薪酬统计维度主键id") + //薪酬统计维度主键id") private Long id; - @ApiModelProperty("薪酬统计维度类型") + //薪酬统计维度类型") private SalaryStatisticsDimensionTypeEnum dimType; - @ApiModelProperty("薪酬统计维度名称") + //薪酬统计维度名称") private String dimName; - @ApiModelProperty("薪酬统计维度编码-》用于组距和单项式的所属字段") + //薪酬统计维度编码-》用于组距和单项式的所属字段") private String dimCode; - @ApiModelProperty("备注") + //备注") private String remark; - @ApiModelProperty("薪酬统计维度定性设置保存参数") + //薪酬统计维度定性设置保存参数") private Setting4Qualitative setting4Qualitative; - @ApiModelProperty("薪酬统计维度定量-组距式分组设置保存参数") + //薪酬统计维度定量-组距式分组设置保存参数") private List setting4RationGroupSpacing; - @ApiModelProperty("薪酬统计维度定量-单项式分组设置保存参数") + //薪酬统计维度定量-单项式分组设置保存参数") private List setting4RationGroupIndividual; public static void checkParam(SalaryStatisticsDimensionSaveParam saveParam) { @@ -90,10 +89,10 @@ public class SalaryStatisticsDimensionSaveParam { //"薪酬统计维度定性设置保存参数") public static class Setting4Qualitative { - @ApiModelProperty("关联id") + //关联id") private String id; - @ApiModelProperty("统计维度名称") + //统计维度名称") private String name; } @@ -101,19 +100,19 @@ public class SalaryStatisticsDimensionSaveParam { //"薪酬统计维度定量-组距式分组设置保存参数") public static class Setting4RationGroupSpacing { - @ApiModelProperty("id") + //id") private Long id; - @ApiModelProperty("起始是否包含") + //起始是否包含") private boolean includeStart; - @ApiModelProperty("起始值") + // 起始值") private String startValue; - @ApiModelProperty("结束是否包含") + // 结束是否包含") private boolean includeEnd; - @ApiModelProperty("结束值") + //结束值") private String endValue; } @@ -121,10 +120,10 @@ public class SalaryStatisticsDimensionSaveParam { //"薪酬统计维度定量-单项式分组设置保存参数") public static class Setting4RationGroupIndividual { - @ApiModelProperty("id") + //id") private Long id; - @ApiModelProperty("值") + // 值") private String value; } } diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java index c7ac8633f..6d8937669 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -11,32 +9,35 @@ import java.time.YearMonth; import java.util.List; /** - * @Description: 薪酬统计员工详情查询参数 - * @Author: wangxiangzhong - * @Date: 2022/12/16 16:44 - */ + * 薪酬统计员工详情查询参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor @AllArgsConstructor -//"薪酬统计员工详情查询参数") +//"薪酬统计员工详情查询参数 public class SalaryStatisticsEmployeeDetailQueryParam extends BaseQueryParam { - @ApiModelProperty("主键id") + //主键id private List ids; - @ApiModelProperty("人员表的主键id") + //人员表的主键id private Long employeeId; - @ApiModelProperty("收入所得类型") + //收入所得类型 private Integer incomeCategory; - @ApiModelProperty("个税扣缴义务人") + //个税扣缴义务人 private Long taxAgentId; - @ApiModelProperty("年份") + //年份 private Integer year; - @ApiModelProperty("薪资所属月") + //薪资所属月 private List salaryMonth; } \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java index 6c27ff099..a9dc5fc2a 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java @@ -1,8 +1,6 @@ package com.engine.salary.report.entity.param; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -23,15 +21,15 @@ import java.util.List; //"薪酬统计员工明细查询参数") public class SalaryStatisticsEmployeeQueryParam extends BaseQueryParam { - @ApiModelProperty("关键字") + //关键字") private String keyword; - @ApiModelProperty("年份") + //年份") private Integer year; - @ApiModelProperty("薪资所属月") + //薪资所属月") private List salaryMonth; - @ApiModelProperty("人员类型,ORGANIZATION:内部人员 |EXT_EMPLOYEE:外部人员") + //人员类型,ORGANIZATION:内部人员 |EXT_EMPLOYEE:外部人员") private EmployeeTypeEnum employeeType; } \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java index b4743e67d..ef6df5126 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java @@ -1,8 +1,6 @@ package com.engine.salary.report.entity.param; import com.engine.salary.report.entity.dto.SalaryStatisticsItemRuleDTO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -21,36 +19,36 @@ import java.util.List; @AllArgsConstructor //"薪酬统计报表自定义统计项目保存参数") public class SalaryStatisticsItemSaveParam { - @ApiModelProperty("统计项目id") + //统计项目id") private Long id; - @ApiModelProperty("报表id") + // 报表id") private Long statReportId; - @ApiModelProperty("统计项目") + //统计项目") private List itemValue; - @ApiModelProperty("统计项名称") + //统计项名称") private String itemName; - @ApiModelProperty("计数规则") + //计数规则") private SalaryStatisticsItemRuleDTO countRule; - @ApiModelProperty("求和规则") + //求和规则") private SalaryStatisticsItemRuleDTO sumRule; - @ApiModelProperty("平均值规则") + //平均值规则") private SalaryStatisticsItemRuleDTO avgRule; - @ApiModelProperty("最大值规则") + //最大值规则") private SalaryStatisticsItemRuleDTO maxRule; - @ApiModelProperty("最小值规则") + //最小值规则") private SalaryStatisticsItemRuleDTO minRule; - @ApiModelProperty("中位数规则") + //中位数规则") private SalaryStatisticsItemRuleDTO medianRule; - @ApiModelProperty("统计单位") + //统计单位") private Integer unitType; } diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index 194edb78c..c9735da67 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -1,8 +1,6 @@ package com.engine.salary.report.entity.param; import com.fasterxml.jackson.annotation.JsonIgnore; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -20,62 +18,62 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -//"薪酬统计报表数据查询参数") +//"薪酬统计报表数据查询参数 public class SalaryStatisticsReportDataQueryParam extends BaseQueryParam { - @ApiModelProperty("报表id") + //报表id private Long id; - @ApiModelProperty("统计维度") + //统计维度 private Long dimensionId; @JsonIgnore - @ApiModelProperty("薪资所属月-开始月") + //薪资所属月-开始月 private String salaryStartMonth; @JsonIgnore - @ApiModelProperty("薪资所属月-终止月") + // 薪资所属月-终止月 private String salaryEndMonth; @JsonIgnore - @ApiModelProperty("个税扣缴义务人配置") + //个税扣缴义务人配置 private List taxAgent; @JsonIgnore - @ApiModelProperty("收入所得项目配置") + //收入所得项目配置 private List incomeCategory; @JsonIgnore - @ApiModelProperty("分部配置") + //分部配置 private List subCompany; @JsonIgnore - @ApiModelProperty("部门配置") + //部门配置 private List depart; @JsonIgnore - @ApiModelProperty("职级配置") + //职级配置 private List grade; @JsonIgnore - @ApiModelProperty("岗位配置") + // 岗位配置 private List position; @JsonIgnore - @ApiModelProperty("人员状态配置") + //人员状态配置 private List status; @JsonIgnore - @ApiModelProperty("人员") + //人员 private List employee; @JsonIgnore - @ApiModelProperty("入职日期") + // 入职日期 private List hiredate; @JsonIgnore - @ApiModelProperty("离职日期") + // 离职日期 private List leavedate; - @ApiModelProperty("统计单位") + //统计单位 private Integer unitType; } diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java index 87d4548c1..2ad284cb5 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -16,9 +14,9 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//"薪资统计报表查询参数") +//"薪资统计报表查询参数 public class SalaryStatisticsReportQueryParam extends BaseQueryParam { - @ApiModelProperty("报表名称") + //报表名称 private String reportName; } diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java index 9cd380c79..0a84fe6c3 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java @@ -2,7 +2,6 @@ package com.engine.salary.report.entity.param; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryI18nUtil; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -24,13 +23,13 @@ import java.util.List; //"薪酬统计报表保存参数") public class SalaryStatisticsReportSaveParam { - @ApiModelProperty("薪酬统计报表主键id") + //薪酬统计报表主键id") private Long id; - @ApiModelProperty("薪酬统计报表名称") + // 薪酬统计报表名称") private String reportName; - @ApiModelProperty("统计维度id") + // 统计维度id") private List dimensionIds; diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsSearchConditionSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsSearchConditionSaveParam.java index e0a48893a..2ea00c161 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsSearchConditionSaveParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsSearchConditionSaveParam.java @@ -1,69 +1,69 @@ package com.engine.salary.report.entity.param; import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDate; -import java.time.YearMonth; +import java.util.Date; import java.util.List; import java.util.Map; /** - * @Description: 薪资报表统计条件保存参数 - * @Author: wangxiangzhong - * @Date: 2022/12/28 14:25 - */ + * 薪资报表统计条件保存参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @NoArgsConstructor @AllArgsConstructor -//"薪资报表统计条件保存参数") public class SalaryStatisticsSearchConditionSaveParam { - @ApiModelProperty("报表id") + //报表id private Long id; - @ApiModelProperty("统计维度") + //统计维度 private Long dimension; - @ApiModelProperty("薪资所属月-开始月") - private YearMonth salaryStartMonth; + //薪资所属月-开始月 + private Date salaryStartMonth; - @ApiModelProperty("薪资所属月-终止月") - private YearMonth salaryEndMonth; + //薪资所属月-终止月 + private Date salaryEndMonth; - @ApiModelProperty("个税扣缴义务人配置") + //个税扣缴义务人配置 private List> taxAgent; - @ApiModelProperty("收入所得项目配置") + //收入所得项目配置 private List> incomeCategory; - @ApiModelProperty("分部配置") + //分部配置 private List> subCompany; - @ApiModelProperty("部门配置") + //部门配置 private List> department; - @ApiModelProperty("职级配置") + //职级配置 private List> grade; - @ApiModelProperty("岗位配置") + //岗位配置 private List> position; - @ApiModelProperty("人员状态配置") + //人员状态配置 private List> status; - @ApiModelProperty("人员") + //人员 private List> employee; - @ApiModelProperty("入职日期") + //入职日期 private List hiredate; - @ApiModelProperty("离职日期") + //离职日期 private List leavedate; - @ApiModelProperty("统计项列表") + //统计项列表 private List items; } diff --git a/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java index d4eaa5d93..0e0c0102a 100644 --- a/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -14,54 +12,54 @@ import java.util.List; @AllArgsConstructor //"报表数据查询入参") public class SubTableDataQueryParam extends BaseQueryParam { - @ApiModelProperty("报表id") + //报表id") private Long id; - @ApiModelProperty("个税扣缴义务人配置") + //个税扣缴义务人配置") private List payOrg; - @ApiModelProperty("缴纳组织配置") + //缴纳组织配置") private List payAgency; - @ApiModelProperty("分部配置") + // 分部配置") private List subCompany; - @ApiModelProperty("部门配置") + // 部门配置") private List depart; - @ApiModelProperty("职级配置") + //职级配置") private List grade; - @ApiModelProperty("岗位配置") + //岗位配置") private List position; - @ApiModelProperty("人员状态配置") + //人员状态配置") private List status; - @ApiModelProperty("人员类型配置") + //人员类型配置") private Integer employeeType; - @ApiModelProperty("开始月") + //开始月") private String startMonth; - @ApiModelProperty("人员") + //人员") private List employee; - @ApiModelProperty("缴纳类型") + // 缴纳类型") private List paymentType; - @ApiModelProperty("终止月") + //终止月") private String endMonth; - @ApiModelProperty("统计单位") + //统计单位") private Integer unitType; - @ApiModelProperty("统计维度") + //统计维度") private String dimension; - @ApiModelProperty("统计维度名称") + //统计维度名称") private String dimensionName; - @ApiModelProperty("是否导出人员维度数据") + //是否导出人员维度数据") private Boolean empExport; } diff --git a/src/com/engine/salary/report/entity/param/SubTableItemParam.java b/src/com/engine/salary/report/entity/param/SubTableItemParam.java index bf1918b22..6cfec3f3c 100644 --- a/src/com/engine/salary/report/entity/param/SubTableItemParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableItemParam.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -18,24 +16,24 @@ import lombok.NoArgsConstructor; //"报表查询入参") public class SubTableItemParam { - @ApiModelProperty("福利项id") + //福利项id") private Long id; - @ApiModelProperty("报表id") + //报表id") private Long tableId; - @ApiModelProperty("统计项目") + // 统计项目") private String itemValue; - @ApiModelProperty("统计项名称") + //统计项名称") private String itemName; - @ApiModelProperty("求和规则") + // 求和规则") private String totalRule; - @ApiModelProperty("计数规则") + // 计数规则") private String countRule; - @ApiModelProperty("统计单位") + // 统计单位") private Integer unitType; } diff --git a/src/com/engine/salary/report/entity/param/SubTableParam.java b/src/com/engine/salary/report/entity/param/SubTableParam.java index 1b8c896d9..8b2d8e80d 100644 --- a/src/com/engine/salary/report/entity/param/SubTableParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableParam.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -17,16 +15,16 @@ import lombok.NoArgsConstructor; @AllArgsConstructor //"报表查询入参") public class SubTableParam { - @ApiModelProperty("报表id") + // 报表id") private Long id; - @ApiModelProperty("统计维度") + //统计维度") private String dimension; - @ApiModelProperty("报表名称") + //报表名称") private String subTableName; - @ApiModelProperty("报表类型") + // 报表类型") private Integer tableType; diff --git a/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java b/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java index 3e53f2203..a4f4883fc 100644 --- a/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableSearchConditionParam.java @@ -1,8 +1,6 @@ package com.engine.salary.report.entity.param; import com.engine.salary.report.entity.po.SubTableItemPO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -17,45 +15,45 @@ import java.util.Map; //"保存高级搜索配置") public class SubTableSearchConditionParam { - @ApiModelProperty("报表id") + //报表id") private Long id; - @ApiModelProperty("个税扣缴义务人配置") + //个税扣缴义务人配置") private List> paymentOrganization; - @ApiModelProperty("缴纳组织配置") + //缴纳组织配置") private List> paymentAgency; - @ApiModelProperty("分部配置") + //分部配置") private List> subCompany; - @ApiModelProperty("部门配置") + // 部门配置") private List> department; - @ApiModelProperty("职级配置") + // 职级配置") private List> grade; - @ApiModelProperty("岗位配置") + //岗位配置") private List> position; - @ApiModelProperty("人员状态配置") + //人员状态配置") private List> status; - @ApiModelProperty("人员类型配置") + //人员类型配置") private Integer type; - @ApiModelProperty("开始月") + //开始月") private String startMonth; - @ApiModelProperty("终止月") + //终止月") private String endMonth; - @ApiModelProperty("人员") + //人员") private List> employee; - @ApiModelProperty("缴纳类型") + //缴纳类型") private List> paymentType; - @ApiModelProperty("统计项列表") + //统计项列表") private List items; } diff --git a/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java index de67a6bd6..d78bab65d 100644 --- a/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java +++ b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java @@ -1,7 +1,5 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -23,6 +21,6 @@ public class TaxAgentQueryParam extends BaseQueryParam { private Collection ids; - @ApiModelProperty("个税扣缴义务人名称") + //个税扣缴义务人名称") private String name; } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 9689c9120..36966b7c4 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -171,7 +171,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary .creator((long) user.getUID()) .updateTime(now) .deleteType(0) - .tenantKey("") + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .salaryStartMonth(SalaryDateUtil.getFirstDayDateOfYear(new Date())) + .salaryEndMonth(SalaryDateUtil.getLastDayOfYear(new Date())) .build(); getSalaryStatisticsReportMapper().insertIgnoreNull(poNew); @@ -206,8 +208,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary SalaryStatisticsReportPO po = getById(param.getId()); SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); - po.setSalaryStartMonth(SalaryDateUtil.localDateToDate(param.getSalaryStartMonth().atDay(1))); - po.setSalaryEndMonth(SalaryDateUtil.localDateToDate(param.getSalaryEndMonth().atDay(1))); + po.setSalaryStartMonth(param.getSalaryStartMonth()); + po.setSalaryEndMonth(param.getSalaryEndMonth()); po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 1a3250681..0bab3e2c5 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -43,19 +43,19 @@ public class SalaryStatisticsReportWrapper extends Service { private static final String conditionId = "salaryStatisticsReportSearchCondition"; private SalaryStatisticsReportService getSalaryStatisticsReportService(User user) { - return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); + return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); } private SalaryStatisticsItemService getSalaryStatisticsItemService(User user) { - return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); + return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); } private SalaryStatisticsDimensionService getSalaryStatisticsDimensionService(User user) { - return ServiceUtil.getService(SalaryStatisticsDimensionServiceImpl.class, user); + return ServiceUtil.getService(SalaryStatisticsDimensionServiceImpl.class, user); } - + private SubTableExportService getSubTableExportService(User user) { - return ServiceUtil.getService(SubTableExportServiceImpl.class, user); + return ServiceUtil.getService(SubTableExportServiceImpl.class, user); } /** @@ -66,7 +66,7 @@ public class SalaryStatisticsReportWrapper extends Service { */ public List> list(SalaryStatisticsReportQueryParam queryParam) { // 初始化 - getSalaryStatisticsDimensionService(user).init((long)user.getUID()); + getSalaryStatisticsDimensionService(user).init((long) user.getUID()); List reportList = getSalaryStatisticsReportService(user).list(); if (StringUtils.isNotEmpty(queryParam.getReportName())) { @@ -95,14 +95,14 @@ public class SalaryStatisticsReportWrapper extends Service { * @param * @return */ - public Map getFrom(Long id) { + public Map getFrom(Long id) { List salaryStatisticsDimensions = getSalaryStatisticsDimensionService(user).listAll(); List statsDimOptions = salaryStatisticsDimensions.stream().map(sd -> new WeaFormOption(sd.getId().toString(), sd.getDimName())).collect(Collectors.toList()); // 1.构建基础信息表单 - Map weaForm = new HashMap<>(); - weaForm.put("statsDimOptions",statsDimOptions); + Map weaForm = new HashMap<>(); + weaForm.put("statsDimOptions", statsDimOptions); if (id != null) { @@ -112,7 +112,7 @@ public class SalaryStatisticsReportWrapper extends Service { } Map dataMap = JsonUtil.parseMap(po, Object.class); dataMap.put("dimension", Arrays.asList(po.getDimension().split(","))); - weaForm.put("data",dataMap); + weaForm.put("data", dataMap); } return weaForm; @@ -147,9 +147,9 @@ public class SalaryStatisticsReportWrapper extends Service { * @param id * @return */ - public Map getSearchCondition(Long id) { + public Map getSearchCondition(Long id) { // 高级搜索实例 - Map map =new HashMap<>(); + Map map = new HashMap<>(); if (id != null) { SalaryStatisticsReportPO po = getSalaryStatisticsReportService(user).getById(id); @@ -169,7 +169,7 @@ public class SalaryStatisticsReportWrapper extends Service { data.put("hiredate", JSONArray.parseArray(po.getHiredateSetting())); // data.put("leavedate", JSONArray.parseArray(po.getLeavedateSetting())); - map.put("data",data); + map.put("data", data); } return map; @@ -196,7 +196,7 @@ public class SalaryStatisticsReportWrapper extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } // weaTable对象 - Map weaTable= new HashMap<>(); + Map weaTable = new HashMap<>(); // 查询报表配置 SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); if (po == null) { @@ -208,7 +208,7 @@ public class SalaryStatisticsReportWrapper extends Service { PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList); // 组装合计 - Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList,(long)user.getUID()); + Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); // 列表columns List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); From 1f7c271519893dbc634ad95eb40702cf01b9ed53 Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 24 Apr 2023 14:47:28 +0800 Subject: [PATCH 044/245] =?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=E5=BE=85=E5=87=8F?= =?UTF-8?q?=E5=91=98tab=E9=A1=B5=E5=88=A0=E9=99=A4=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=B8=AA=E7=A8=8E=E6=89=A3=E7=BC=B4?= =?UTF-8?q?=E4=B9=89=E5=8A=A1=E4=BA=BA=E8=8C=83=E5=9B=B4=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SIArchivesServiceImpl.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 1c50902ac..fb00653d7 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -980,6 +980,17 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService baseInfoIdsPartition.forEach(part -> { nowList.addAll(getInsuranceBaseInfoMapper().listByIds(part)); }); + //判断当前被操作人员是否都在对应的个税扣缴义务人下 + List taxAgentManageRangeEmployees = getTaxAgentService(user).listTaxAgentAndEmployee((long) user.getUID()); + + boolean isNotExist = nowList.stream().anyMatch(te -> + taxAgentManageRangeEmployees.stream().noneMatch(p -> + p.getEmployeeId() != null && p.getEmployeeId().equals(te.getEmployeeId()) && p.getTaxAgentId().equals(te.getPaymentOrganization()))); + + if (isNotExist) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(116196, "个税扣缴义务人不存在或不在权限范围内,删除失败!")); + } + //置空社保、公积金、其他福利档案的最后缴纳月信息,并将福利档案基础信息表的状态置为“正在缴纳” if (nowList.size() > 0) { List socialIds = nowList.stream() From cef3d26693df7a74fb21c137400e253dee92ad2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 24 Apr 2023 14:55:32 +0800 Subject: [PATCH 045/245] =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/maintainer/MaintainerController.java | 14 +++++++------- .../maintainer/salaryacct/SalaryAcctManager.java | 12 ++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/com/engine/salary/maintainer/MaintainerController.java b/src/com/engine/salary/maintainer/MaintainerController.java index e85e941a6..245844bc9 100644 --- a/src/com/engine/salary/maintainer/MaintainerController.java +++ b/src/com/engine/salary/maintainer/MaintainerController.java @@ -5,7 +5,6 @@ import com.engine.salary.maintainer.datacollection.AddUpSituationManager; import com.engine.salary.maintainer.salaryacct.SalaryAcctManager; import com.engine.salary.maintainer.salaryacct.SalaryAcctSupplementParam; import com.engine.salary.util.ResponseResult; -import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -13,7 +12,6 @@ import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.GET; -import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; @@ -44,23 +42,25 @@ public class MaintainerController { /** * 补充核算 * - * @param queryParam * @return */ - @POST + @GET @Path("/acct/supplement") @Produces(MediaType.APPLICATION_JSON) - public String supplementAcctRecord(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctSupplementParam queryParam) { + public String supplementAcctRecord(@Context HttpServletRequest request, @Context HttpServletResponse response) { + SalaryAcctSupplementParam queryParam = SalaryAcctSupplementParam.builder() + .salaryAcctRecordId(Long.parseLong(request.getParameter("salaryAcctRecordId"))) + .salaryItemStrIds(request.getParameter("salaryItemStrIds")).build(); User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getSalaryAcctManager(user)::supplementAcctRecord, queryParam); } - //---------------------------薪资核算 end ------------------------------------ //---------------------------数据采集 往期累计情况 start ------------------------------------ + /** * 恢复所有已申报的往期累计数据 * @@ -71,7 +71,7 @@ public class MaintainerController { @Produces(MediaType.APPLICATION_JSON) public String recoverAddUpSituationHistoryData(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult< Map, Boolean >(user).run(getAddUpSituationManager(user)::recoverAddUpHistoryData); + return new ResponseResult, Boolean>(user).run(getAddUpSituationManager(user)::recoverAddUpHistoryData); } //---------------------------数据采集 往期累计情况 end ------------------------------------ diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java index 31de28823..b6cb9a8fd 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java @@ -175,7 +175,7 @@ public class SalaryAcctManager extends Service { simpleEmployee.setEmployeeId((long) user.getUID()); // 检查是否正在核算中 - SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId()); + SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId()); if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { return; } @@ -188,7 +188,7 @@ public class SalaryAcctManager extends Service { .setProgress(BigDecimal.ZERO) .setStatus(true) .setMessage(StringUtils.EMPTY); - getSalaryAcctProgressService(user).initProgress("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), initProgress); + getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), initProgress); new Thread() { public void run() { calculate(calculateParam, simpleEmployee); @@ -261,7 +261,7 @@ public class SalaryAcctManager extends Service { } // 11.1、初始化进度 SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); - getSalaryAcctProgressService(user).initProgress("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), initProgress); + getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), initProgress); // 12、对薪资核算人员进行拆分 List> partition = Lists.partition(salaryAcctEmployeePOS, 5000); // 12.1、监控子线程的任务执行 @@ -307,7 +307,7 @@ public class SalaryAcctManager extends Service { if (!allSuccess) { // 薪资核算实现的线程的错误信息 String errorMsg = calculateResults.stream().filter(result -> !result.isStatus()).map(SalaryAcctCalculateBO.Result::getErrMsg).collect(Collectors.joining("|")); - getSalaryAcctProgressService(user).fail("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), errorMsg); + getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), errorMsg); // 删除薪资核算临时存储表中的数据 getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); return; @@ -315,11 +315,11 @@ public class SalaryAcctManager extends Service { // 15、处理核算结果临时表数据 handleSalaryAcctResultTemp(calculateParam, calculateKey); - getSalaryAcctProgressService(user).finish("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), true); + getSalaryAcctProgressService(user).finish("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), true); } catch (Exception e) { log.info("薪资核算出错:{}", e.getMessage(), e); - getSalaryAcctProgressService(user).fail("SalaryCacheKey.ACCT_PROGRESS" + calculateParam.getSalaryAcctRecordId(), SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage()); + getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage()); } } From 8d00e6ad45d2c4b6eb45371cf51bcc4d7290be72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 24 Apr 2023 14:57:54 +0800 Subject: [PATCH 046/245] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=B9=B4=E6=9C=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/wrapper/SalaryStatisticsReportWrapper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 0bab3e2c5..0201de093 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -156,8 +156,8 @@ public class SalaryStatisticsReportWrapper extends Service { SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); Map data = new HashMap<>(); - data.put("salaryStartMonth", SalaryDateUtil.localDate2YearMonth(po.getSalaryStartMonth())); - data.put("salaryEndMonth", SalaryDateUtil.localDate2YearMonth(po.getSalaryEndMonth())); + data.put("salaryStartMonth", SalaryDateUtil.getFormatYearMonth(po.getSalaryStartMonth())); + data.put("salaryEndMonth", SalaryDateUtil.getFormatYearMonth(po.getSalaryEndMonth())); data.put("taxAgent", JSONArray.parseArray(po.getTaxAgentSetting())); data.put("incomeCategory", JSONArray.parseArray(po.getIncomeCategorySetting())); data.put("subCompany", JSONArray.parseArray(po.getSubCompanySetting())); From 7b4ebd788c444e9cb83a8d2d39f3df57a55d3a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 24 Apr 2023 16:34:23 +0800 Subject: [PATCH 047/245] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/bo/SalaryStatisticsReportBO.java | 56 ++++++------ .../SalaryStatisticsDimensionServiceImpl.java | 20 ++--- .../SalaryStatisticsReportServiceImpl.java | 2 +- .../web/SalaryStatisticsReportController.java | 52 ++++++++--- .../SalaryStatisticsReportWrapper.java | 88 ++++++++++++------- 5 files changed, 136 insertions(+), 82 deletions(-) diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index 83f07aa3a..aefc6cd69 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -6,6 +6,8 @@ import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; import com.engine.salary.report.entity.dto.SalaryStatisticsItemRuleDTO; +import com.engine.salary.report.entity.param.ExportColumn; +import com.engine.salary.report.entity.param.ExportCommonParam; import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; @@ -598,7 +600,7 @@ public class SalaryStatisticsReportBO { } public static List> po2map(List list, Map> salaryAcctResultValueMap) { - if(CollectionUtils.isEmpty(list)){ + if (CollectionUtils.isEmpty(list)) { return new ArrayList<>(); } return list.stream().map(sa -> salaryAcctResultValueMap.get(sa.getId())).collect(Collectors.toList()); @@ -952,30 +954,30 @@ public class SalaryStatisticsReportBO { return result; } -// public static ExportCommonParam buildExportParam(String dimName, List weaTableColumns, List> records) { -// List columns = com.google.common.collect.Lists.newArrayList(); -// weaTableColumns.forEach(column -> { -// WeaTableColumnGroup WeaTableColumnGroup = (WeaTableColumnGroup) column; -// ExportColumn exportColumn = new ExportColumn(); -// exportColumn.setKeyIndex(WeaTableColumnGroup.getDataIndex()); -// exportColumn.setValue(WeaTableColumnGroup.getTitle()); -// if (CollectionUtils.isNotEmpty(WeaTableColumnGroup.getChildren())) { -// List subColumns = com.google.common.collect.Lists.newArrayList(); -// for (WeaTableColumnGroup sub : WeaTableColumnGroup.getChildren()) { -// ExportColumn subColumn = new ExportColumn(); -// subColumn.setKeyIndex(sub.getDataIndex()); -// subColumn.setValue(sub.getTitle()); -// subColumns.add(subColumn); -// } -// exportColumn.setChildren(subColumns); -// } -// columns.add(exportColumn); -// }); -// ExportCommonParam exportParam = new ExportCommonParam(); -// exportParam.setDimensionName(dimName); -// exportParam.setColumns(columns); -// exportParam.setData(records); -// -// return exportParam; -// } + public static ExportCommonParam buildExportParam(String dimName, List weaTableColumns, List> records) { + List columns = com.google.common.collect.Lists.newArrayList(); + weaTableColumns.forEach(column -> { + WeaTableColumnGroup WeaTableColumnGroup = (WeaTableColumnGroup) column; + ExportColumn exportColumn = new ExportColumn(); + exportColumn.setKeyIndex(WeaTableColumnGroup.getColumn()); + exportColumn.setValue(WeaTableColumnGroup.getText()); + if (CollectionUtils.isNotEmpty(WeaTableColumnGroup.getChildren())) { + List subColumns = com.google.common.collect.Lists.newArrayList(); + for (WeaTableColumnGroup sub : WeaTableColumnGroup.getChildren()) { + ExportColumn subColumn = new ExportColumn(); + subColumn.setKeyIndex(sub.getColumn()); + subColumn.setValue(sub.getText()); + subColumns.add(subColumn); + } + exportColumn.setChildren(subColumns); + } + columns.add(exportColumn); + }); + ExportCommonParam exportParam = new ExportCommonParam(); + exportParam.setDimensionName(dimName); + exportParam.setColumns(columns); + exportParam.setData(records); + + return exportParam; + } } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java index 50b793261..8c22c6f00 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java @@ -49,13 +49,13 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal List defaultDimensionNames = Arrays.asList( SalaryI18nUtil.getI18nLabel(87614, "薪资所属月"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), - SalaryI18nUtil.getI18nLabel(145212, "收入所得类型"), +// SalaryI18nUtil.getI18nLabel(145212, "收入所得类型"), SalaryI18nUtil.getI18nLabel(107369, "分部"), SalaryI18nUtil.getI18nLabel(86185, "部门"), - SalaryI18nUtil.getI18nLabel(90633, "岗位"), - SalaryI18nUtil.getI18nLabel(98623, "职级"), - SalaryI18nUtil.getI18nLabel(109332, "人事状态"), - SalaryI18nUtil.getI18nLabel(151914, "人员类型"), +// SalaryI18nUtil.getI18nLabel(90633, "岗位"), +// SalaryI18nUtil.getI18nLabel(98623, "职级"), +// SalaryI18nUtil.getI18nLabel(109332, "人事状态"), +// SalaryI18nUtil.getI18nLabel(151914, "人员类型"), SalaryI18nUtil.getI18nLabel(100133, "人员"), SalaryI18nUtil.getI18nLabel(157163, "年度"), SalaryI18nUtil.getI18nLabel(173199, "半年度"), @@ -64,13 +64,13 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal List defaultDimensionCodes = Arrays.asList( SalaryStatisticsDimensionConstant.DM_SALARY_MONTH, SalaryStatisticsDimensionConstant.DM_TAX_AGENT, - SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY, +// SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY, SalaryStatisticsDimensionConstant.DM_SUB_COMPANY, SalaryStatisticsDimensionConstant.DM_DEPARTMENT, - SalaryStatisticsDimensionConstant.DM_POSITION, - SalaryStatisticsDimensionConstant.DM_GRADE, - SalaryStatisticsDimensionConstant.DM_HRM_STATUS, - SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE, +// SalaryStatisticsDimensionConstant.DM_POSITION, +// SalaryStatisticsDimensionConstant.DM_GRADE, +// SalaryStatisticsDimensionConstant.DM_HRM_STATUS, +// SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE, SalaryStatisticsDimensionConstant.DM_EMPLOYEE, SalaryStatisticsDimensionConstant.DM_YEAR, SalaryStatisticsDimensionConstant.DM_HALF_YEAR, diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 36966b7c4..444966603 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -410,7 +410,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); salaryMonthList.forEach(k -> { Map temp = new HashMap<>(); - temp.put(DM, k); + temp.put(DM, SalaryDateUtil.getFormatYearMonth(k)); temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); }); diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index 906452801..363227bb3 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -8,6 +8,8 @@ import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSave 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.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -16,6 +18,11 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.StreamingOutput; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import java.util.Map; @@ -28,6 +35,7 @@ import java.util.Map; * @author qiantao * @version 1.0 **/ +@Slf4j public class SalaryStatisticsReportController { private SalaryStatisticsReportWrapper getSalaryStatisticsReportWrapper(User user) { @@ -133,15 +141,37 @@ public class SalaryStatisticsReportController { return new ResponseResult>(user).run(getSalaryStatisticsReportWrapper(user)::getData, param); } -// /** -// * 导出报表数据 -// * -// * @param param -// * @return -// */ -// @PostMapping("/exportData") -// @ApiOperation("导出报表数据") -// @WeaPermission(publicPermission = true) -// public WeaResult> exportData(@RequestBody SalaryStatisticsReportDataQueryParam param) { -// return WeaResult.success(salaryStatisticsReportWrapper.exportData(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); + /** + * 导出报表数据 + * + * @param param + * @return + */ + @POST + @Path("/acctemployee/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportDataQueryParam param) { + try { + + User user = HrmUserVarify.getUser(request, response); + Map map = getSalaryStatisticsReportWrapper(user).exportData(param); + XSSFWorkbook workbook = (XSSFWorkbook) map.get("workbook"); + String time = LocalDate.now().toString(); + String fileName = map.get("fileName") + "-" + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("核算人员范围导出异常", e); + throw e; + } + } } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 0201de093..15746671c 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -23,9 +23,14 @@ 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.util.*; +import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; +import com.google.common.collect.Lists; 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.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Component; import weaver.hrm.User; @@ -225,42 +230,59 @@ public class SalaryStatisticsReportWrapper extends Service { * 导出报表数据 * * @param param - * @param employeeId - * @param tenantKey * @return */ - public Map exportData(SalaryStatisticsReportDataQueryParam param, Long employeeId, String tenantKey) { -// if (param.getId() == null || param.getDimensionId() == null) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); -// } -// -// SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); -// if (po == null) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); -// } -// SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId()); -// if (dimension == null) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); -// } -// // 查询自定义统计项目 -// List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); -// // 列表data -// Page> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList); -// // 组装合计 -// Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList); -// if (CollectionUtils.isNotEmpty(page.getRecords()) && MapUtils.isNotEmpty(countResultMap)) { -// page.getRecords().add(countResultMap); -// } -// // 获取数据 -// List> records = CollectionUtils.emptyIfNull(page.getRecords()).stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); -// -// // 获取列头 -// List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); -// -// // 组装导出参数 + public Map exportData(SalaryStatisticsReportDataQueryParam param) { + if (param.getId() == null || param.getDimensionId() == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + + SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); + } + SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId()); + if (dimension == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); + } + // 查询自定义统计项目 + List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); + // 列表data + PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList); + // 组装合计 + Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); + List> list = page.getList(); + if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) { + list.add(countResultMap); + } + // 获取数据 + List> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); + + // 获取列头 + List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); + + // 组装导出参数 // ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records); // exportParam.setSheetName(SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + exportParam.getDimensionName()); -// return getSubTableExportService(user).exportCommon(exportParam, UserContext.getCurrentUser(), TenantContext.get()); - return null; +// + + List rows = new ArrayList<>(); + rows.add(weaTableColumns); + for (Map map : records) { + List row = Lists.newArrayListWithExpectedSize(records.size()); + for (String k : map.keySet()) { + row.add(map.getOrDefault(k, StringUtils.EMPTY)); + } + rows.add(row); + } + + String sheetName = SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + dimension.getDimName(); + XSSFWorkbook book = ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, true); + + Map map = new HashMap<>(); + map.put("workbook",book); + map.put("fileName",sheetName); + + return map; } } From 17785b3c2b7744407feb540632bdce220de935a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 24 Apr 2023 18:08:06 +0800 Subject: [PATCH 048/245] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/web/SalaryStatisticsReportController.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index 363227bb3..ce8f5d6e3 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -144,13 +144,16 @@ public class SalaryStatisticsReportController { /** * 导出报表数据 * - * @param param * @return */ - @POST - @Path("/acctemployee/export") + @GET + @Path("/exportData") @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response exportData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportDataQueryParam param) { + public Response exportData(@Context HttpServletRequest request, @Context HttpServletResponse response) { + SalaryStatisticsReportDataQueryParam param = SalaryStatisticsReportDataQueryParam.builder() + .id(Long.parseLong(request.getParameter("id"))) + .dimensionId(Long.parseLong(request.getParameter("dimensionId"))) + .build(); try { User user = HrmUserVarify.getUser(request, response); From 77ce806b37ec5b75b173b94939e66bee4a9f7f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 25 Apr 2023 10:43:40 +0800 Subject: [PATCH 049/245] =?UTF-8?q?sysadmin=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=94=B3=E6=8A=A5=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/taxdeclaration/bo/TaxDeclarationBO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java index 3cf749498..4fe0d32c3 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java @@ -50,7 +50,7 @@ public class TaxDeclarationBO { List simpleEmployees, List taxAgents) { if (CollectionUtils.isEmpty(simpleEmployees)) { - return Collections.emptyList(); + simpleEmployees = new ArrayList<>(); } Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName); From 59c32b24e66ef93a7b01f3dcf3467848b8522abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 25 Apr 2023 17:08:42 +0800 Subject: [PATCH 050/245] =?UTF-8?q?=E8=A1=A5=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../maintainer/MaintainerController.java | 23 ++++- .../salaryacct/SalaryAcctManager.java | 84 ++++++++++++------- .../salaryacct/SalaryAcctSupplementParam.java | 31 +++++-- .../maintainer/salaryacct/SupAcctThread.java | 42 ++++++++++ 4 files changed, 142 insertions(+), 38 deletions(-) create mode 100644 src/com/engine/salary/maintainer/salaryacct/SupAcctThread.java diff --git a/src/com/engine/salary/maintainer/MaintainerController.java b/src/com/engine/salary/maintainer/MaintainerController.java index 245844bc9..1122d6681 100644 --- a/src/com/engine/salary/maintainer/MaintainerController.java +++ b/src/com/engine/salary/maintainer/MaintainerController.java @@ -6,6 +6,7 @@ import com.engine.salary.maintainer.salaryacct.SalaryAcctManager; import com.engine.salary.maintainer.salaryacct.SalaryAcctSupplementParam; import com.engine.salary.util.ResponseResult; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -16,7 +17,9 @@ 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.Arrays; import java.util.Map; +import java.util.stream.Collectors; /** * 累计专项附加扣除 @@ -48,9 +51,25 @@ public class MaintainerController { @Path("/acct/supplement") @Produces(MediaType.APPLICATION_JSON) public String supplementAcctRecord(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String type = request.getParameter("type"); + String salaryAcctRecordStrIds = request.getParameter("salaryAcctRecordStrIds"); + String salarySobStrIds = request.getParameter("salarySobStrIds"); + String salaryItemStrIds = request.getParameter("salaryItemStrIds"); SalaryAcctSupplementParam queryParam = SalaryAcctSupplementParam.builder() - .salaryAcctRecordId(Long.parseLong(request.getParameter("salaryAcctRecordId"))) - .salaryItemStrIds(request.getParameter("salaryItemStrIds")).build(); + .type(type) + .salaryAcctRecordStrIds(salaryAcctRecordStrIds) + .salarySobStrIds(salarySobStrIds) + .salaryItemStrIds(salaryItemStrIds) + .build(); + if (StringUtils.isNotBlank(salaryAcctRecordStrIds)) { + queryParam.setSalaryAcctRecordIds(Arrays.stream(salaryAcctRecordStrIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } + if (StringUtils.isNotBlank(salarySobStrIds)) { + queryParam.setSalarySobIds(Arrays.stream(salarySobStrIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } + if (StringUtils.isNotBlank(salaryItemStrIds)) { + queryParam.setSalaryItemIds(Arrays.stream(salaryItemStrIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getSalaryAcctManager(user)::supplementAcctRecord, queryParam); } diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java index b6cb9a8fd..8894536a2 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java @@ -104,9 +104,6 @@ public class SalaryAcctManager extends Service { return ServiceUtil.getService(SalarySobAdjustRuleServiceImpl.class, user); } - private SalarySobItemHideService getSalarySobItemHideService(User user) { - return ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user); - } private SalaryAcctCalculateService getSalaryAcctCalculateService(User user) { return ServiceUtil.getService(SalaryAcctCalculateServiceImpl.class, user); @@ -151,14 +148,41 @@ public class SalaryAcctManager extends Service { public void supplementAcctRecord(SalaryAcctSupplementParam param) { ValidUtil.doValidator(param); - List salaryItemIds = Arrays.stream(param.getSalaryItemStrIds().split(",")).map(Long::valueOf).collect(Collectors.toList()); - param.setSalaryItemIds(salaryItemIds); - if(CollectionUtils.isEmpty(salaryItemIds)){ - throw new SalaryRunTimeException("薪资项目为空!"); + //待补算的记录 + List salaryAcctRecordPOS = new ArrayList<>(); + + if (StringUtils.equals(param.getType(), "sob")) { + + List salarySobIds = param.getSalarySobIds(); + + if (CollectionUtils.isEmpty(salarySobIds)) { + throw new SalaryRunTimeException("补算账套为空!"); + } + //获取账套下面所有的核算记录 + salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIds(salarySobIds); + + if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { + throw new SalaryRunTimeException("账套下不存在核算记录"); + } + + } else if (StringUtils.equals(param.getType(), "record")) { + + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + + salaryAcctRecordPOS = getSalaryAcctRecordService(user).listByIds(salaryAcctRecordIds); + + if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { + throw new SalaryRunTimeException("核算记录不存在"); + } + } else { + throw new SalaryRunTimeException("补算方式异常!"); } - calculate(param); + salaryAcctRecordPOS.forEach(salaryAcctRecordPO -> { + param.setSalaryAcctRecordId(salaryAcctRecordPO.getId()); + calculate(param); + }); } @@ -170,12 +194,15 @@ public class SalaryAcctManager extends Service { public void calculate(SalaryAcctSupplementParam calculateParam) { log.info("补算开始{}", calculateParam); + //核算记录 + Long salaryAcctRecordId = calculateParam.getSalaryAcctRecordId(); + //当前登陆人员 DataCollectionEmployee simpleEmployee = new DataCollectionEmployee(); simpleEmployee.setEmployeeId((long) user.getUID()); // 检查是否正在核算中 - SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId()); + SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId); if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { return; } @@ -188,20 +215,16 @@ public class SalaryAcctManager extends Service { .setProgress(BigDecimal.ZERO) .setStatus(true) .setMessage(StringUtils.EMPTY); - getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), initProgress); - new Thread() { - public void run() { - calculate(calculateParam, simpleEmployee); - } - }.start(); - + getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, initProgress); + calculate(calculateParam, simpleEmployee); } public void calculate(SalaryAcctSupplementParam calculateParam, DataCollectionEmployee simpleEmployee) { + Long salaryAcctRecordId = calculateParam.getSalaryAcctRecordId(); try { // 1、查询薪资核算记录 - SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(calculateParam.getSalaryAcctRecordId()); + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); if (Objects.isNull(salaryAcctRecordPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } @@ -211,7 +234,7 @@ public class SalaryAcctManager extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资账套不存在或已被删除")); } // 2、查询薪资核算记录的薪资周期、考勤周期等 - SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(calculateParam.getSalaryAcctRecordId()); + SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(salaryAcctRecordId); // 3、查询薪资核算记录所用薪资账套的薪资项目副本 List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); if (CollectionUtils.isEmpty(salarySobItemPOS)) { @@ -235,7 +258,7 @@ public class SalaryAcctManager extends Service { List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); Map acctResults = new HashMap<>(); if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { - List acctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); + List acctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); acctResults = Optional.ofNullable(acctResultPOS) .orElse(new ArrayList<>()) .stream() @@ -261,7 +284,7 @@ public class SalaryAcctManager extends Service { } // 11.1、初始化进度 SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); - getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), initProgress); + getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, initProgress); // 12、对薪资核算人员进行拆分 List> partition = Lists.partition(salaryAcctEmployeePOS, 5000); // 12.1、监控子线程的任务执行 @@ -307,7 +330,7 @@ public class SalaryAcctManager extends Service { if (!allSuccess) { // 薪资核算实现的线程的错误信息 String errorMsg = calculateResults.stream().filter(result -> !result.isStatus()).map(SalaryAcctCalculateBO.Result::getErrMsg).collect(Collectors.joining("|")); - getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), errorMsg); + getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, errorMsg); // 删除薪资核算临时存储表中的数据 getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); return; @@ -315,11 +338,11 @@ public class SalaryAcctManager extends Service { // 15、处理核算结果临时表数据 handleSalaryAcctResultTemp(calculateParam, calculateKey); - getSalaryAcctProgressService(user).finish("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), true); + getSalaryAcctProgressService(user).finish("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, true); } catch (Exception e) { log.info("薪资核算出错:{}", e.getMessage(), e); - getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage()); + getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage()); } } @@ -336,15 +359,14 @@ public class SalaryAcctManager extends Service { List salaryItemIds = calculateParam.getSalaryItemIds(); getSalaryAcctResultMapper().deleteBySalaryAcctRecordIdAndSalaryItemIds(calculateParam.getSalaryAcctRecordId(), salaryItemIds); // 保存薪资的薪资核算结果 - List salaryAcctResultPOS = salaryAcctResultTempPOS.stream().filter(salaryAcctResultTempPO -> salaryItemIds.contains(salaryAcctResultTempPO.getSalaryItemId())).map(e -> { - SalaryAcctResultPO salaryAcctResult = new SalaryAcctResultPO(); - BeanUtils.copyProperties(e, salaryAcctResult); - return salaryAcctResult; - }).collect(Collectors.toList()); + List salaryAcctResultPOS = salaryAcctResultTempPOS.stream() + .filter(salaryAcctResultTempPO -> salaryItemIds.contains(salaryAcctResultTempPO.getSalaryItemId())) + .map(e -> { + SalaryAcctResultPO salaryAcctResult = new SalaryAcctResultPO(); + BeanUtils.copyProperties(e, salaryAcctResult); + return salaryAcctResult; + }).collect(Collectors.toList()); getSalaryAcctResultService(user).batchSave(salaryAcctResultPOS); - //保存核算报表数据 -// List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2ReportPO(salaryAcctResultTempPOS, calculateParam.getEmps()); -// getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); // 删除薪资核算临时存储表中的数据 getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); } diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java index d3e3c5b95..b70912377 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java @@ -22,12 +22,33 @@ import java.util.List; @AllArgsConstructor public class SalaryAcctSupplementParam { - @DataCheck(require = true,message = "参数错误,薪资核算记录ID不能为空") - private Long salaryAcctRecordId; - @DataCheck(require = true,message = "参数错误,薪资项目ID不能为空") + //前端传入 + /** + * 补算方式,0按核算记录进行补充核算,1按账套进行补充核算 + */ + @DataCheck(require = true, message = "补算方式为空") + private String type; + + /** + * 按核算记录进行补充核算 + */ + private List salaryAcctRecordIds; + private String salaryAcctRecordStrIds; + + /** + * 按账套进行补充核算 + */ + private List salarySobIds; + private String salarySobStrIds; + + /** + * 待核算的项目 + */ + @DataCheck(require = true, message = "补算项目为空") + private List salaryItemIds; private String salaryItemStrIds; - private List salaryItemIds; - + //核算使用 + private Long salaryAcctRecordId; } diff --git a/src/com/engine/salary/maintainer/salaryacct/SupAcctThread.java b/src/com/engine/salary/maintainer/salaryacct/SupAcctThread.java new file mode 100644 index 000000000..696ac6ad5 --- /dev/null +++ b/src/com/engine/salary/maintainer/salaryacct/SupAcctThread.java @@ -0,0 +1,42 @@ +package com.engine.salary.maintainer.salaryacct; + +import com.engine.salary.entity.datacollection.DataCollectionEmployee; + +public abstract class SupAcctThread implements Runnable { + + private SalaryAcctSupplementParam calculateParam; + + private DataCollectionEmployee simpleEmployee; + + public SalaryAcctSupplementParam getCalculateParam() { + return calculateParam; + } + + public void setCalculateParam(SalaryAcctSupplementParam calculateParam) { + this.calculateParam = calculateParam; + } + + public DataCollectionEmployee getSimpleEmployee() { + return simpleEmployee; + } + + public void setSimpleEmployee(DataCollectionEmployee simpleEmployee) { + this.simpleEmployee = simpleEmployee; + } + + public SupAcctThread(SalaryAcctSupplementParam calculateParam, DataCollectionEmployee simpleEmployee) { + this.calculateParam = calculateParam; + this.simpleEmployee = simpleEmployee; + } + + @Override + public void run() { + try { + execute(calculateParam, simpleEmployee); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public abstract void execute(SalaryAcctSupplementParam calculateParam, DataCollectionEmployee simpleEmployee) throws Exception; +} From cb36dc290422b2b3b24e6656e75e85f7ae0bc362 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 25 Apr 2023 17:38:54 +0800 Subject: [PATCH 051/245] =?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=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E5=B9=B4=E6=9C=88=E7=9A=84=E6=A0=BC=E5=BC=8F=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 27 ++++++++++++++++--- .../engine/salary/util/SalaryDateUtil.java | 2 +- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index a41f1f72a..fedf06e52 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -40,9 +40,7 @@ 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.mapper.taxagent.TaxAgentMapper; -import com.engine.salary.util.SalaryAssert; -import com.engine.salary.util.SalaryEntityUtil; -import com.engine.salary.util.SalaryFormItemUtil; +import com.engine.salary.util.*; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -649,6 +647,13 @@ public class SIArchivesBiz { InsuranceArchivesOtherSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesOtherSaveParam.class); SalaryAssert.notNull("员工id为空", param, param.getEmployeeId()); + if (param.getOtherStartTime() != null && !SalaryDateUtil.checkYearMonth(param.getOtherStartTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542532, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + if (param.getOtherEndTime() != null && !SalaryDateUtil.checkYearMonth(param.getOtherEndTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542533, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + // List oldOtherInfoList = otherSchemeMapper.getOtherByEmployeeId(Collections.singletonList(param.getEmployeeId())); List oldOtherInfoList = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(param.getEmployeeId()) @@ -700,6 +705,13 @@ public class SIArchivesBiz { InsuranceArchivesFundSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesFundSaveParam.class); SalaryAssert.notNull("员工id为空", param, param.getEmployeeId()); + if (param.getFundStartTime() != null && !SalaryDateUtil.checkYearMonth(param.getFundStartTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542530, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + if (param.getFundEndTime() != null && !SalaryDateUtil.checkYearMonth(param.getFundEndTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542531, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + // List oldFundInfoList = fundSchemeMapper.getFundByEmployeeId(Collections.singletonList(param.getEmployeeId())); List oldFundInfoList = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(param.getEmployeeId()) @@ -755,6 +767,15 @@ public class SIArchivesBiz { InsuranceArchivesSocialSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesSocialSaveParam.class); SalaryAssert.notNull("员工id为空", param, param.getEmployeeId()); + + boolean c = SalaryDateUtil.checkYearMonth(param.getSocialStartTime()); + if (param.getSocialStartTime() != null && !SalaryDateUtil.checkYearMonth(param.getSocialStartTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542528, "社保起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + if (param.getSocialEndTime() != null && !SalaryDateUtil.checkYearMonth(param.getSocialEndTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542529, "社保最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + } + // //删除社保数据 // socialSchemeMapper.batchDeleteByEmployeeIds(Collections.singletonList(param.getEmployeeId())); diff --git a/src/com/engine/salary/util/SalaryDateUtil.java b/src/com/engine/salary/util/SalaryDateUtil.java index 3a5f362e2..2a7566ca4 100644 --- a/src/com/engine/salary/util/SalaryDateUtil.java +++ b/src/com/engine/salary/util/SalaryDateUtil.java @@ -46,7 +46,7 @@ public class SalaryDateUtil { /** * yyyy-MM **/ - private static final String MONTH_REGEX = "^([1-9]\\d{3})-(([0]{0,1}[1-9])|([1][0-2]))$"; + private static final String MONTH_REGEX = "^([1-9]\\d{3})-(([0][1-9])|([1][0-2]))$"; /** * yyyy-MM-dd **/ From f47ad2a7a3e37f36e9d5e8e32d82861984737723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 25 Apr 2023 18:04:05 +0800 Subject: [PATCH 052/245] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/web/SalaryFormulaController.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/engine/salary/web/SalaryFormulaController.java b/src/com/engine/salary/web/SalaryFormulaController.java index 7501bf837..44932a485 100644 --- a/src/com/engine/salary/web/SalaryFormulaController.java +++ b/src/com/engine/salary/web/SalaryFormulaController.java @@ -77,6 +77,7 @@ public class SalaryFormulaController { /** * 测试公式 + * * @param request * @param response * @param param @@ -90,4 +91,12 @@ public class SalaryFormulaController { return new ResponseResult(user).run(getSalaryFormulaWrapper(user)::mock, param); } + + @GET + @Path("/des") + @Produces(MediaType.APPLICATION_JSON) + public String mock(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return "{\"data\":[{\"children\":[{\"name\":\"CONCAT\",\"chineseName\":\"链接多个文本\",\"description\":\"可用于连接多个任意类型的文本、日期、数字变量或常量。最后一个字符可使用'#分隔符#'标记为分隔符\",\"example\":\"CONCAT({总价}/10000, '万元')\",\"result\":\"100万元\",\"paramDescs\":[\"*文本1*(必选)\",\"*文本2*(可选)\",\"......\"],\"formatString\":\"CONCAT(文本1, 文本2, [文本3, …],[#分隔符#])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":true}]},{\"name\":\"TEXT\",\"chineseName\":\"将变量转为文本\",\"description\":\"将变量转为文本。\",\"example\":\"TEXT({当前数据.性别})\",\"result\":\"'男'\",\"paramDescs\":[\"*变量*(必选)\"],\"formatString\":\"TEXT(变量)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"VALUE\",\"chineseName\":\"将文本转为数字\",\"description\":\"将文本转为数字。\",\"example\":\"VALUE('23')\",\"result\":\"23\",\"paramDescs\":[\"*文本、数字、选项*(必选)\"],\"formatString\":\"VALUE([文本、数字、选项])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"LEN\",\"chineseName\":\"返回文本长度\",\"description\":\"返回文本的长度,中文、英文都算1个字符。\",\"example\":\"LEN('大家好dajiahao')\",\"result\":\"12\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"LEN(文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"SEARCH\",\"chineseName\":\"在文本中查找关键字\",\"description\":\"在指定文本中查找关键字,返回第一次出现关键字的字符位置,文本的第一个字记为1。未找到,返回0。搜索开始位置,表示从文本的第几个字符开始搜索,默认为1。\",\"example\":\"SEARCH('大家', '大家好大家好', 3)\",\"result\":\"4\",\"paramDescs\":[\"*文本关键字*(必选)\",\"*文本*(必选)\",\"*搜索开始位置*(可选)\"],\"formatString\":\"SEARCH(关键字, 文本, [搜索开始位置])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":false,\"infinite\":false}]},{\"name\":\"REPLACE\",\"chineseName\":\"替换文本中的字\",\"description\":\"在原文本中,从替换位置开始,往后数指定的替换字符数,将这段文本替换为新文本。\",\"example\":\"REPLACE('大家好大家好', 2, 3, 'dajia')\",\"result\":\"'大dajia家好'\",\"paramDescs\":[\"*文本*(必选)\"],\"formatString\":\"REPLACE(原文本, 替换开始位置, 替换字符数, 新文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"REPT\",\"chineseName\":\"将文本重复指定次数\",\"description\":\"将文本重复指定次数。\",\"example\":\"REPT('大家', 2)\",\"result\":\"'大家大家'\",\"paramDescs\":[\"*文本*(必选)\",\"*重复次数*(必选)\"],\"formatString\":\"REPT(文本, 重复次数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"PAD\",\"chineseName\":\"将文本填充至指定长度\",\"description\":\"将原文本填充到指定长度,如果文本长度大于设置的长度,则不做任何操作。填充位置可用参数:'LEFT'、'RIGHT'。\",\"example\":\"PAD('你好', 4, '你', 'LEFT')\",\"result\":\"'你你你好'\",\"paramDescs\":[\"*原文本*(必选)\",\"*长度*(必选)\",\"*填充用的文本*(必选)\",\"*填充位置*(可选)\"],\"formatString\":\"PAD(原文本, 长度, 填充用的文本, [填充位置])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"RIGHT\",\"LEFT\"],\"infinite\":false}]},{\"name\":\"TRIM\",\"chineseName\":\"清除前后空格\",\"description\":\"删除文本首尾的空格。\",\"example\":\"TRIM(' 大家好 ')\",\"result\":\"'大家好'\",\"paramDescs\":[\"*文本*(必选)\"],\"formatString\":\"TRIM(文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LEFT\",\"chineseName\":\"返回文本左侧开始的文字\",\"description\":\"从文本左侧开始,返回指定字符数的文字。\",\"example\":\"LEFT('大家好', 2)\",\"result\":\"'大家'\",\"paramDescs\":[\"*文本*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"LEFT(文本, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"RIGHT\",\"chineseName\":\"返回文本右侧开始的文字\",\"description\":\"从文本右侧开始,返回指定字符数的文字。\",\"example\":\"RIGHT('大家好', 2)\",\"result\":\"'家好'\",\"paramDescs\":[\"*文本*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"RIGHT(文本, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"MID\",\"chineseName\":\"返回文本指定位置开始的文字\",\"description\":\"从文本指定位置之后开始,返回指定字符数的文字。\",\"example\":\"MID('大家好', 2, 1)\",\"result\":\"'家'\",\"paramDescs\":[\"*文本*(必选)\",\"*指定位置*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"MID(文本, 指定位置, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"SCORE\",\"chineseName\":\"获取选项型控件分数\",\"description\":\"获取选项型控件(单选框、复选框、下拉菜单)分数。\",\"example\":\"SCORE({当前数据.单选框})\",\"result\":\"选项分数(注:未设置选项分数时,结果为0)\",\"paramDescs\":[\"*选项*(必选)\"],\"formatString\":\"SCORE({选项})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false}]},{\"name\":\"IDCARD\",\"chineseName\":\"身份证函数\",\"description\":\"从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。\",\"example\":\"IDCARD( ‘43070319980706334X’ , ‘BD’ )\",\"result\":\"'1998-07-06'\",\"paramDescs\":[\"*身份证号码*(必选)\",\"*查找类型*(必选)\"],\"formatString\":\"IDCARD({身份证号码}, {查找类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"BD\",\"NA\",\"AGE\",\"GENDER\"],\"infinite\":false}]},{\"name\":\"ISSTRING\",\"chineseName\":\"是否是字符串\",\"description\":\"判断是否是字符。\",\"example\":\"ISSTRING('泛微123456')\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"ISSTRING({任意控件})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISJSON\",\"chineseName\":\"JSON字符格式化\",\"description\":\"判断是不是JSON字符串,参数可以是数组,也可以是字符串,参数为数组时数组中必须只包含一个字符串。\",\"example\":\"假设文本控件={a:123},ISJSON({文本控件})\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"ISJSON({变量})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETJSONVALUE\",\"chineseName\":\"JSON字符取值\",\"description\":\"获取JSON值。第一个参数为json,可以是数组也可以是对象;第二个参数为json对象的键值,返回键值对应的值,json为数组时返回的多个值以逗号分隔\",\"example\":\"假设文本控件={a:123},GetJSONValue('{文本控件}','a')\",\"result\":\"123\",\"paramDescs\":[\"*变量或常量*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"GETJSONVALUE({变量1},变量2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISINT\",\"chineseName\":\"字符内容是否是整数\",\"description\":\"判断字符内容是否是整数\",\"example\":\"ISINT( 2.123 )\",\"result\":\"false\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"ISINT({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISNUMBER\",\"chineseName\":\"字符内容是否是数字\",\"description\":\"判断字符内容是否是数字。\",\"example\":\"ISNUMBER('2.123')\",\"result\":\"true\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"ISNUMBER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"SPLIT\",\"chineseName\":\"字符分割\",\"description\":\"字符分割函数,将字符以指定字符为依据分割字符为一组字符\",\"example\":\"假设文本控件=ABC#DEF,SPLIT('{文本控件}','#')\",\"result\":\"[ABC,DEF]\",\"paramDescs\":[\"*字符*(必选)\",\"*分割符*(必选)\"],\"formatString\":\"SPLIT({字符},{字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LOWER\",\"chineseName\":\"字符转小写\",\"description\":\"将字符中的字母转为小写。\",\"example\":\"LOWER('ABC')\",\"result\":\"abc\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"LOWER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"UPPER\",\"chineseName\":\"字符转大写\",\"description\":\"将字符中的字母转为大写。\",\"example\":\"UPPER('abc')\",\"result\":\"ABC\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"UPPER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"TEXTBEFORE\",\"chineseName\":\"截取N个分割符之前的字符\",\"description\":\"截取N个分割符之前的字符\",\"example\":\"TEXTBEFORE('abc-12','-',1)\",\"result\":\"abc\",\"paramDescs\":[\"*字符*(必选)\",\"*字符*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"TEXTBEFORE({目标文本},{分隔符},{索引下标})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"TEXTAFTER\",\"chineseName\":\"截取N个分隔符之后的字符\",\"description\":\"截取N个分隔符之后的字符\",\"example\":\"TEXTAFTER('abc-12','-',1)\",\"result\":\"12\",\"paramDescs\":[\"*字符*(必选)\",\"*字符*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"TEXTAFTER({目标文本},{分隔符},{索引下标})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"char\",\"name\":\"字符函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"COUNT\",\"chineseName\":\"计数\",\"description\":\"返回指定表格中满足条件的数据条数。\",\"example\":\"COUNT({员工表})\",\"result\":\"1\",\"paramDescs\":[\"*表*(必选)\"],\"formatString\":\"COUNT(表)\",\"paramArray\":[\"Form\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"SUM\",\"chineseName\":\"求和\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的总和。统计条件中不可嵌套使用统计函数。\",\"example\":\"SUM({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"SUM(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"AVG\",\"chineseName\":\"平均值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的平均值。统计条件中不可嵌套使用统计函数。\",\"example\":\"AVG({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"AVG(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"MIN\",\"chineseName\":\"最小值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的最小值。统计条件中不可嵌套使用统计函数。\",\"example\":\"MIN({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"MIN(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"MAX\",\"chineseName\":\"最大值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的最大值。统计条件中不可嵌套使用统计函数。\",\"example\":\"MAX({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"MAX(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3}],\"dataType\":\"agg\",\"name\":\"聚合函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"TODAY\",\"chineseName\":\"当前日期\",\"description\":\"返回当天日期。\",\"example\":\"TODAY()\",\"result\":\"'2020-01-01'\",\"formatString\":\"TODAY()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"NOW\",\"chineseName\":\"当前日期时间\",\"description\":\"返回当天日期+时间。\",\"example\":\"NOW()\",\"result\":\"'2016-12-24 12:05:38'\",\"formatString\":\"NOW()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"DATEADD\",\"chineseName\":\"对日期加减年、月、日\",\"description\":\"对日期加减按照单位加减。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\"example\":\"DATEADD('2016-12-21', 3)
DATEADD('2016-12-24 20:00:00', 3, 'H')\",\"result\":\"'2016-12-24'
'2016-12-24 23:00:00'\",\"paramDescs\":[\"*日期*(必选)\",\"*数值*(必选)\",\"*单位*(可选)\"],\"formatString\":\"DATEADD(日期,数值 , [单位])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"Y\",\"M\",\"D\",\"H\",\"I\",\"S\"],\"infinite\":false}]},{\"name\":\"DATEDIFF\",\"chineseName\":\"返回两个日期的差值\",\"description\":\"根据指定的单位,返回日期2减去日期1的差值。当日期2小于日期1时,差值为负值。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\"example\":\"DATEDIF('2016-12-21', '2016-12-24')
DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H')\",\"result\":\"3
24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*单位*(可选)\"],\"formatString\":\"DATEDIFF(日期1, 日期2, [单位])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"Y\",\"M\",\"D\",\"H\",\"I\",\"S\"],\"infinite\":false}]},{\"name\":\"DATEFORMAT\",\"chineseName\":\"返回指定格式的日期\",\"description\":\"将日期转为指定格式返回。
yyyy 将年份显示为1900-9999
yy 将年份显示为00-99
mm 将月份显示为 01–12
dd 将日期显示为 01–31\",\"example\":\"DATEFORMAT('2016-12-24', 'YY-MM-DD')\",\"result\":\"2016-12-24\",\"paramDescs\":[\"*日期*(必选)\",\"*日期格式*(必选)\"],\"formatString\":\"DATEFORMAT(日期, 可选格式)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"YEAR\",\"chineseName\":\"返回日期中的年\",\"description\":\"返回指定日期中的年。\",\"example\":\"YEAR('2016-12-24')\",\"result\":\"2016\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"YEAR(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"MONTH\",\"chineseName\":\"返回日期中的月\",\"description\":\"返回指定日期中的月。\",\"example\":\"MONTH('2016-12-24')\",\"result\":\"12\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"MONTH(日期)\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"DAY\",\"chineseName\":\"返回日期中的日\",\"description\":\"返回指定日期中的日。\",\"example\":\"DAY('2016-12-24')\",\"result\":\"24\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"DAY(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"HOUR\",\"chineseName\":\"返回日期中的小时\",\"description\":\"返回指定日期中的小时。\",\"example\":\"HOUR('2016-12-24 20:30:56')\",\"result\":\"20\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"HOUR(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"MINUTE\",\"chineseName\":\"返回日期中的分钟\",\"description\":\"返回指定日期中的分钟。\",\"example\":\"MINUTE('2016-12-24 20:30:56')\",\"result\":\"30\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"MINUTE(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"SECOND\",\"chineseName\":\"返回日期中的秒\",\"description\":\"返回指定日期中的秒钟。\",\"example\":\"SECOND('2016-12-24 20:30:56')\",\"result\":\"56\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"SECOND(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"WEEKNUM\",\"chineseName\":\"返回日期为第几周\",\"description\":\"返回指定日期为第几周,从每年第1天开始算第1周。\",\"example\":\"WEEKNUM('2016-12-24')\",\"result\":\"52\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"WEEKNUM(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"WEEKDAY\",\"chineseName\":\"返回日期为星期几\",\"description\":\"返回指定日期为星期几。返回值为0~6,代表周日~周六。\",\"example\":\"WEEKDAY('2016-12-24')\",\"result\":\"6\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"WEEKDAY(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"NETWORKDAYSPI\",\"chineseName\":\"返回所选时间段内包含的工作日天数\",\"description\":\"查询类型为attend时,即按考勤制度查询,将截止当前日期之前(支持选到当前日期,最大支持跨度为365天)的所选时间段内包含的工作日天数返回。
注意:此函数只能选择过去的时间(可选到当前日期)才可使用,跨度不能超过365天。查询类型为statutory时,即按法定查询,没有限制。当日期2小于日期1时,差值为负值。单位默认为日。\",\"example\":\"想知道李四在2021-11-07和2021-11-12之间的工作日天数NETWORKDAYSPI('2021-11-07', '2021-11-12','李四')\",\"result\":\"5\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*人员*(必选)\",\"*类型*(可选,attend为考勤制度,statutory为法定,默认attend)\"],\"formatString\":\"NETWORKDAYSPI(日期1, 日期2, 成员, [类型])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"employee\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":false,\"infinite\":false}]},{\"name\":\"EOMONTH\",\"chineseName\":\"返回某月最后一天日期\",\"description\":\"将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。\",\"example\":\"EOMONTH('2021-11-07', -2)\",\"result\":\"2021-09-30\",\"paramDescs\":[\"*日期*(必选)\",\"*数值*(必选)\"],\"formatString\":\"EOMONTH(日期,指定日期之前或之后的月数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"CURRYEAR\",\"chineseName\":\"返回当前年份\",\"description\":\"取当前日期的年份。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRYEAR()\",\"result\":\"2022\",\"formatString\":\"CURRYEAR()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRMONTH\",\"chineseName\":\"返回当前月份\",\"description\":\"取当前日期的月份。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRMONTH()\",\"result\":\"2\",\"formatString\":\"CURRMONTH()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRDAY\",\"chineseName\":\"返回当前第几日(当月)\",\"description\":\"取当前日期的天。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRDAY()\",\"result\":\"17\",\"formatString\":\"CURRDAY()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRWEEK\",\"chineseName\":\"返回当前是周几\",\"description\":\"取当前日期是周几。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRWEEK()\",\"result\":\"4\",\"formatString\":\"CURRWEEK()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRHOUR\",\"chineseName\":\"返回当前小时\",\"description\":\"取当前日期的小时。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRHOUR()\",\"result\":\"11\",\"formatString\":\"CURRHOUR()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRMINUTE\",\"chineseName\":\"返回当前分\",\"description\":\"取当前日期的分钟。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRMINUTE()\",\"result\":\"20\",\"formatString\":\"CURRMINUTE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRSECOND\",\"chineseName\":\"返回当前秒\",\"description\":\"取当前日期的秒钟。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRSECOND()\",\"result\":\"30\",\"formatString\":\"CURRSECOND()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"MAXDATE\",\"chineseName\":\"返回一组日期中的最大值\",\"description\":\"取一组日期中的最大值。\",\"example\":\"MAXDATE('2016-12-24', '2022-12-24')\",\"result\":\"2022-12-24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\"],\"formatString\":\"MAXDATE(日期1,日期2,……)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":true}]},{\"name\":\"MINDATE\",\"chineseName\":\"返回一组日期中的最小值\",\"description\":\"取一组日期中的最小值。\",\"example\":\"MINDATE('2016-12-24', '2022-12-24')\",\"result\":\"2016-12-24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\"],\"formatString\":\"MINDATE(日期1,日期2,……)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":true}]},{\"name\":\"COMPAREDATE\",\"chineseName\":\"返回两个日期指定时间的差值\",\"description\":\"日期比较,返回两个日期指定时间域的差值。可比较的时间域包括'Y'-比较年;'M'-比较月;'D'-比较日;'H'-比较小时;'I'-比较分钟;'S'-比较秒。\",\"example\":\"假设 日期1=2022-04-03、日期2=2022-04-04,COMPAREDATE({日期1},{日期2},'D')\",\"result\":\"1\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*比较类型*(可选)\"],\"formatString\":\"COMPAREDATE(日期1,日期2,[比较类型])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"TIMESTAMPTODATE\",\"chineseName\":\"返回时间戳转换后的日期\",\"description\":\"将时间戳按指定格式转换成日期。\",\"example\":\"TIMESTAMPTODATE('1671172579', 'yyyy-MM-dd HH:mm:ss')\",\"result\":\"2022-12-16 14:36:19\",\"paramDescs\":[\"*时间戳*(必选)\",\"*日期格式*(可选,默认yyyy-MM-dd HH:mm:ss)\"],\"formatString\":\"TIMESTAMPTODATE(时间戳,日期格式)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":false,\"infinite\":false}]},{\"name\":\"DATETOTIMESTAMP\",\"chineseName\":\"返回日期转换后的时间戳\",\"description\":\"将日期转换成时间戳。\",\"example\":\"DATETOTIMESTAMP('2022-12-16 14:36:19'\",\"result\":\"'1671172579'\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"DATETOTIMESTAMP(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"DATE\",\"chineseName\":\"拼接日期字符串\",\"description\":\"拼接日期\",\"example\":\"DATE('2022','12','16')\",\"result\":\"'2022-12-16'\",\"paramDescs\":[\"*日期字符*(必选)\"],\"formatString\":\"DATE({年},{月},{日})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"DAYS\",\"chineseName\":\"计算两个日期自建的间隔天数\",\"description\":\"计算两个日期的间隔天数\",\"example\":\"DAYS('2022-12-16','2022-12-18')\",\"result\":\"2\",\"paramDescs\":[\"*日期字符*(必选)\"],\"formatString\":\"DAYS({日期},{日期})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"date\",\"name\":\"日期函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"IF\",\"chineseName\":\"如果条件为真,则...否则...\",\"description\":\"如果条件为真,则执行表达式1,为假则执行表达式2。条件中不可嵌套使用IF函数。\",\"example\":\"IF({员工表.年龄} > 60, '退休', '在职')
IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')\",\"result\":\"'退休'
'在职'\",\"paramDescs\":[\"*条件*(必选)\",\"*表达式1*(必选)\",\"*表达式2*(必选)\"],\"formatString\":\"IF(条件, 表达式1, 表达式2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"AND\",\"chineseName\":\"且\",\"description\":\"所有条件均为真,则返回真,否则返回假。逻辑操作AND的函数模式。\",\"example\":\"AND(2 = 2, 2 < 2)\",\"result\":\"false\",\"paramDescs\":[\"*条件1*(必选)\",\"*条件2*(可选,可输入多个参数)\"],\"formatString\":\"AND(条件1, 条件2, [条件3, …])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":true}]},{\"name\":\"OR\",\"chineseName\":\"或\",\"description\":\"任意一个条件为真,则返回真,否则返回假。逻辑操作OR的函数模式。\",\"example\":\"OR(2 = 2, 2 > 3)\",\"result\":\"true\",\"paramDescs\":[\"*条件1*(必选)\",\"*条件2*(可选,可输入多个参数)\"],\"formatString\":\"OR(条件1, 条件2, [条件3, …])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":true}]},{\"name\":\"NOT\",\"chineseName\":\"反转真假结果\",\"description\":\"对逻辑结果取反。\",\"example\":\"NOT(2 > 3)\",\"result\":\"true\",\"paramDescs\":[\"*逻辑结果*(必选)\"],\"formatString\":\"NOT(逻辑结果)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false}]},{\"name\":\"IN\",\"chineseName\":\"变量是否包含在一组结果中\",\"description\":\"任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。\",\"example\":\"IN(2, [2, 3, 4])\",\"result\":\"true\",\"paramDescs\":[\"*变量*(必选)\",\"*变量数组*(必选)\"],\"formatString\":\"IN(变量, [变量1, 变量2, …])\",\"paramArray\":[],\"paramData\":[\"{}\",\"[]\"],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"LIKE\",\"chineseName\":\"文本是否包含任意一个关键字\",\"description\":\"文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个,则返回真。逻辑操作LIKE的函数模式。\",\"example\":\"LIKE('大家好', ['大家', '好'])\",\"result\":\"true\",\"paramDescs\":[\"*文本*(必选)\",\"*文本数组*(必选)\"],\"formatString\":\"LIKE(文本, [文本1, 文本2, …])\",\"paramArray\":[],\"paramData\":[\"{}\",\"[]\"],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISEMPTY\",\"chineseName\":\"是否为空\",\"description\":\"变量为空或未填写,则返回真。\",\"example\":\"ISEMPTY({员工表.电话})\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(可选)\"],\"formatString\":\"ISEMPTY(变量)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"TRUE\",\"chineseName\":\"返回真\",\"description\":\"返回真。\",\"example\":\"TRUE()\",\"result\":\"true\",\"formatString\":\"TRUE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"FALSE\",\"chineseName\":\"返回假\",\"description\":\"返回假。\",\"example\":\"FALSE()\",\"result\":\"false\",\"formatString\":\"FALSE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"IFS\",\"chineseName\":\"多条件\",\"description\":\"多个条件判断,位于单数位置的参数设置为条件,位于双数位置的参数设置为结果,最后一个参数为默认返回值,当所有条件都不满足的时候返回默认参数。\",\"example\":\"IFS(1>1,1,1=1,2,0)\",\"result\":\"2\",\"paramDescs\":[\"*条件1*(必选)\",\"*变量或常量*(必选)\",\"*条件2*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"IFS({条件1},{结果1},{条件2},{结果2}...{默认结果})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"SWITCH\",\"chineseName\":\"条件选择\",\"description\":\"条件选择。\",\"example\":\"SWITCH({字段1},1,'A',2,'B','C')\",\"result\":\"假设字段1为2,结果:'B'\",\"paramDescs\":[\"*变量或常量*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(可选)\",\"*变量或常量*(可选)\",\"*变量或常量*(必选)\"],\"formatString\":\"SWITCH({变量},{条件1},{结果1},{条件2},{结果2}...{默认结果})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"SORT\",\"chineseName\":\"条件排序\",\"description\":\"根据排序条件进行字符和数字的排序,UP为升序,DOWN为降序。\",\"example\":\"SORT(1,2,5,4,3,'UP')\",\"result\":\"[1,2,3,4,5]\",\"paramDescs\":[\"*字符或数字*(必选)\",\"*字符或数字*(可选)\",\"......\",\"*排序方式*\"],\"formatString\":\"SORT({变量1},{变量2},{变量3}...{排序方式})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"IFERROR\",\"chineseName\":\"异常处理\",\"description\":\"异常处理函数\",\"example\":\"IFERROR(10/0,'0')\",\"result\":\"0\",\"paramDescs\":[\"*公式内容*\"],\"formatString\":\"IFERROR({变量},{变量})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"logic\",\"name\":\"逻辑函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"ROUNDUP\",\"chineseName\":\"向上舍入\",\"description\":\"根据设置的小数位精确度,返回对数值向上舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向上舍入到指定的小数位。如果小数位精确度等于 0,则向上舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUNDUP(76.9,0)\",\"result\":\"77\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUNDUP(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"ROUND\",\"chineseName\":\"四舍五入\",\"description\":\"根据设置的小数位精确度,返回对数值四舍五入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,针对小数点后的数据进行四舍五入;如果小数位精确度等于 0,返回最接近数值的整数;如果小数位精确度为负整数,针对小数点前的数据进行四舍五入,被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUND(123.456,2),ROUND(123.456,0),ROUND(123.456,-2)\",\"result\":\"依次为123.46,123,100\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUND(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"ROUNDDOWN\",\"chineseName\":\"向下舍入\",\"description\":\"根据设置的小数位精确度,返回对数值向下舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向下舍入到指定的小数位。如果小数位精确度等于 0,则向下舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUNDDOWN(76.9,0)\",\"result\":\"76\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUNDDOWN(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"AGGREGATION\",\"chineseName\":\"聚合运算\",\"description\":\"将一组数据进行统计计算,支持最大值(MAX)、最小值(MIN)、平均值(AVG)。\",\"example\":\"AGGREGATION(1 , 2,3,'AVG')\",\"result\":\"2\",\"paramDescs\":[\"*数字*(必选)\",\"*聚合运算类型*(必选)\"],\"formatString\":\"AGGREGATION({数字}...,{聚合运算类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":true},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"avg\",\"max\",\"min\"],\"infinite\":false}]},{\"name\":\"MOD\",\"chineseName\":\"求余\",\"description\":\"将两个参数进行除法运算然后得出余数返回。\",\"example\":\"MOD( 7 , 3 )\",\"result\":\"1\",\"paramDescs\":[\"*数字*(必选)\",\"*数字*(必选)\"],\"formatString\":\"ROUNDDOWN({数字},{数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"TRUNC\",\"chineseName\":\"数字格式化\",\"description\":\"将小数点格式化成指定位数。\",\"example\":\"TRUNC( 2.123 , 2 )\",\"result\":\"2.12\",\"paramDescs\":[\"*数字*(必选)\",\"*精度*(必选)\"],\"formatString\":\"ROUNDDOWN({数字},{精度})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"CALDTROW\",\"chineseName\":\"明细逐行计算函数\",\"description\":\"明细逐行计算\",\"example\":\"假设:明细有金额1、金额2、金额3等三个控件,明细行数为2,第一行值分别为:5、6、10,第二行的值分别为:1、1、9。CALDTROW({金额3}==10,{金额1}+{金额2})\",\"result\":\"当金额3等于10的时候运算加法,只有第一行的金额3等于10,明细第一行的金额3赋值为11\",\"paramDescs\":[\"*字段*(必选)\",\"*公式或字段*(必选)\"],\"formatString\":\"CALDTROW({字段},{公式或字段})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"ABS\",\"chineseName\":\"绝对值\",\"description\":\"绝对值\",\"example\":\"ABS(-9)\",\"result\":\"9\",\"paramDescs\":[\"*字段*(必选)\"],\"formatString\":\"ABS({字段})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"RANDOM\",\"chineseName\":\"随机数生成\",\"description\":\"随机数生成\",\"example\":\"RANDOM(5,'NUM')\",\"result\":\"26489\",\"paramDescs\":[\"*数字*(必选)\",\"*文本*(必选)[NUM(数字)、CHAR(字符)、FIX(字符与数字混合)]\"],\"formatString\":\"RANDOM({随机数长度},{随机类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"POWER\",\"chineseName\":\"N次方\",\"description\":\"计算数值的N次方\",\"example\":\"POWER(2, 2)
POWER(4, 1/2)\",\"result\":\"4
2\",\"paramDescs\":[\"*数字*(必选)\",\"*数字*(必选,N次方的N)\"],\"formatString\":\"POWER({数字}, {数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"SQRT\",\"chineseName\":\"根号\",\"description\":\"将数值开根号\",\"example\":\"SQRT(4)\",\"result\":\"2\",\"paramDescs\":[\"*数字*(必选)\"],\"formatString\":\"SQRT({数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"math\",\"name\":\"数学函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"GETMONEY\",\"chineseName\":\"获取所给定数字的金额大写\",\"description\":\"将金额转换成中文金额大写。\",\"example\":\"GETMONEY({1234})\",\"result\":\"壹仟贰佰叁拾肆元整\",\"paramDescs\":[\"*数字*(必选)\"],\"formatString\":\"GETMONEY({数字})\",\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"finance\",\"name\":\"财务函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"default\",\"chineseName\":\"default\",\"description\":\"暂无\",\"formatString\":\"default()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"text\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"extend\",\"name\":\"自定义拓展函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"CHOOSE\",\"chineseName\":\"返回索引范围内指定的值\",\"description\":\"根据索引位置获取数据。\",\"example\":\"假设:数字输入框1为0,数字输入框2为2,数字输入框3为3,数字输入框4为4。数字输入框1为检索位置的变量,后面3个为检索目标。 示例:CHOOSE({表A.数字输入框1}, {表A.数字输入框2}, {表A.数字输入框3}, {表A.数字输入框4})\",\"result\":\"2,从数字输入框2开始进行检索,数字输入框2的检索位置为0,后续数据位置依次累加1可以得出。\",\"paramDescs\":[\"*索引位置*(必选)\",\"*索引目标1*(必选)\",\"......\"],\"formatString\":\"CHOOSE(索引位置,索引目标1...索引目标N)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"VLOOKUPS\",\"chineseName\":\"按列查找,返回所需值\",\"description\":\"按列查找,返回所需值。常用于薪酬模块。根据条件获取查询参数所在列的返回参数的值。返回参数可填写多个,用英文逗号隔开。若查询不到返回null。\",\"example\":\"VLOOKUPS({税表},{税表.收入},AND({税表.收入}>{税表.应纳税所得额下限},{税表.收入}<{税表.应纳税所得额上限}),[{税表.税率},{税表.速算扣除数}]) \",\"result\":\"按列查找返回税表中收入所在的收入区间所对应的税率和速算扣除数的数值\",\"paramDescs\":[\"*表*(必选)\",\"*条件*(必选)\",\"*返回参数*(必选)\"],\"formatString\":\"VLOOKUPS(表,[条件],[返回参数])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"MATCH\",\"chineseName\":\"返回指定数值在指定数组区域中的位置\",\"description\":\"将指定数值在指定数组区域中的位置返回。若数组中无指定值,返回null。\",\"example\":\"MATCH(15000, [1000, 15000, 2000])\",\"result\":\"1\",\"paramDescs\":[\"*值*(必选)\",\"*数组*(必选)\"],\"formatString\":\"MATCH(值,[数组])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"FIND\",\"chineseName\":\"查找\",\"description\":\"用指定参数去另一个参数列表中查找匹配项,指定参数时,填写1则去第一个参数列表中查找,2则是第二个参数列表里匹配查找第一个参数,成功则返回true,失败返回false。\",\"example\":\"FIND([1,2,3],[1,2,3,4],1)\",\"result\":\"true\",\"paramDescs\":[\"*查找值1*(必选)\",\"......\",\"*查找值N*(可选)\",\"*查找目标1*(必选)\",\"......\",\"*查找目标N*(可选)\"],\"formatString\":\"FIND([{查找值1},{查找值2}...{查找值N}],[{查找目标1},{查找目标2}...{查找目标N}])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"INDEX\",\"chineseName\":\"数据索引\",\"description\":\"数据索引函数,根据索引位置返回一组数据中对应位置的数据。注意:索引位置是从0开始的。\",\"example\":\"假设:数字控件1=2,金额控件1=3,金额控件3=5,INDEX(1,[{数字控件1},{金额控件1},{金额控件2}]\",\"result\":\"3(索引下标为1,返回数组中第二个参数)\",\"paramDescs\":[\"*索引位置*(必选)\",\"*数组*(必选)\"],\"formatString\":\"INDEX({查找值},[{查找目标1},{查找目标2}...{查找目标N}])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"UNIQUE\",\"chineseName\":\"唯一值过滤\",\"description\":\"唯一值过滤函数,得到一组数据,然后去掉重复的值,返回所有去重后的一组数据。\",\"example\":\"假设:文本控件1='A',文本控件2='B',文本控件3='B',UNIQUE({文本控件1},{文本控件2},{文本控件3})\",\"result\":\"[{文本控件1},{文本控件2}]\",\"paramDescs\":[\"*数组*(必选)\"],\"formatString\":\"UNIQUE({过滤目标1},{过滤目标2}...{过滤目标N})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"FILTER\",\"chineseName\":\"条件过滤\",\"description\":\"过滤函数,通过一个或多个条件过滤参数中的数据,返回所有符合条件的一组数据。\",\"example\":\"假设:文本控件1='A',文本控件2='B',文本控件3='B',FILTER([{文本控件1},{文本控件2},{文本控件3}],'B')\",\"result\":\"[{文本控件2},{文本控件3}]\",\"paramDescs\":[\"*数组*(必选)\",\"*过滤字段*(必选)\"],\"formatString\":\"FILTER([{过滤目标1},{过滤目标2}...{过滤目标N}],{过滤字段}={过滤依据})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"find\",\"name\":\"查找函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"GETHRMLOGINID\",\"chineseName\":\"返回指定人员系统账号\",\"description\":\"获取指定人员系统账号。\",\"example\":\"GETHRMLOGINID({表单.张三})\",\"result\":\"'zhangsan@qq.com'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMLOGINID({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMWORKCODE\",\"chineseName\":\"返回指定人员编号\",\"description\":\"获取指定人员编号。\",\"example\":\"GETHRMWORKCODE({表单.张三})\",\"result\":\"'A001'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMWORKCODE({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMMANAGER\",\"chineseName\":\"返回指定人员直接上级\",\"description\":\"获取指定人员直接上级。返回值为对应人员直接上级的ID。\",\"example\":\"GETHRMMANAGER({表单.张三})\",\"result\":\"'1559563038252396708'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMMANAGER({人员}})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMEMAIL\",\"chineseName\":\"获取指定人员邮箱\",\"description\":\"获取指定人员邮箱。\",\"example\":\"GETHRMEMAIL({表单.张三})\",\"result\":\"'2345@163.com'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMEMAIL({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMSECLEVEL\",\"chineseName\":\"获取指定人员安全级别\",\"description\":\"获取指定人员安全级别。\",\"example\":\"张三安全级别为1;GETHRMSECLEVEL({表单.张三})\",\"result\":\"'1'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMSECLEVEL({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMALLMANAGER\",\"chineseName\":\"返回指定人员所有上级\",\"description\":\"获取指定人员所有上级。存在多个上级时,返回所有上级形成的数组。\",\"example\":\"GETHRMALLMANAGER({表单.张三})\",\"result\":\"返回张三的所有上级形成的数组\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMALLMANAGER({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMDEPARTMENT\",\"chineseName\":\"返回指定人员部门\",\"description\":\"获取指定人员部门。返回值为部门ID。\",\"example\":\"GETHRMDEPARTMENT({表单.张三})\",\"result\":\"'1560052731319352218'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMDEPARTMENT({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMSUBCOMPANY\",\"chineseName\":\"返回指定人员分部\",\"description\":\"取指定人员分部,返回值为分部ID。\",\"example\":\"GETHRMSUBCOMPANY({表单.张三})\",\"result\":\"'1560052731319352218'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMSUBCOMPANY({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDEPARTMENTNAME\",\"chineseName\":\"返回指定部门名称\",\"description\":\"获取指定部门名称。\",\"example\":\"GETDEPARTMENTNAME({表单.A部门})\",\"result\":\"'A部门'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETDEPARTMENTNAME({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDEPARTMENTCODE\",\"chineseName\":\"返回指定部门编号\",\"description\":\"获取指定部门编号。\",\"example\":\"GETDEPARTMENTCODE({表单.A部门})\",\"result\":\"'A001'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETDEPARTMENTCODE({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUPERDEPARTMENT\",\"chineseName\":\"返回指定部门直接上级部门\",\"description\":\"获取指定部门直接上级部门。返回值为对应部门直接上级部门的ID。\",\"example\":\"GETSUPERDEPARTMENT({表单.A部门})\",\"result\":\"'1559563038252396709'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETSUPERDEPARTMENT({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETALLSUPERDEPARTMENT\",\"chineseName\":\"返回指定部门所有上级部门\",\"description\":\"获取指定部门所有上级部门。存在多个上级部门时,返回所有上级部门形成的数组。\",\"example\":\"GETALLSUPERDEPARTMENT({表单.A部门})\",\"result\":\"返回A部门的所有上级部门形成的数组\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETALLSUPERDEPARTMENT({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUBCOMPANYNAME\",\"chineseName\":\"返回指定分部名称\",\"description\":\"获取指定分部名称。\",\"example\":\"GETSUBCOMPANYNAME({表单.A分部})\",\"result\":\"'A分部'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUBCOMPANYNAME({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUBCOMPANYCODE\",\"chineseName\":\"返回指定分部编号\",\"description\":\"获取指定分部编号。\",\"example\":\"GETSUBCOMPANYCODE({表单.A分部})\",\"result\":\"'B001'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUBCOMPANYCODE({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUPERSUBCOMPANY\",\"chineseName\":\"返回指定分部直接上级分部\",\"description\":\"获取指定分部直接上级分部。返回值为对应部门直接上级分部的ID。\",\"example\":\"GETSUPERSUBCOMPANY({表单.A分部})\",\"result\":\"'1559563038252396705'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUPERSUBCOMPANY({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETALLSUPERSUBCOMPANY\",\"chineseName\":\"返回指定分部所有上级分部\",\"description\":\"获取指定分部所有上级分部。存在多个上级分部时,返回所有上级分部形成的数组。\",\"example\":\"GETALLSUPERSUBCOMPANY({表单.A分部})\",\"result\":\"A分部的所有上级分部形成的数组\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETALLSUPERSUBCOMPANY({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMNAME\",\"chineseName\":\"获取人员名称\",\"description\":\"获取指定人员的姓名。\",\"example\":\"GETHRMNAME({U:张三})\",\"result\":\"'张三'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMNAME({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMMOBILE\",\"chineseName\":\"获取人员手机号码\",\"description\":\"获取指定人员的手机号码。\",\"example\":\"GETHRMMOBILE({U:张三})\",\"result\":\"13123232323\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMMOBILE({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETREQUESTMARK\",\"chineseName\":\"获取指定流程编号\",\"description\":\"获取指定流程编号\",\"example\":\"假设关联流程=流程数据A,编号为:2332323,GETREQUESTMARK({关联流程})\",\"result\":\"'2332323'\",\"paramDescs\":[\"*关联流程*(必选)\"],\"formatString\":\"GETREQUESTMARK({关联流程})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDOCCODE\",\"chineseName\":\"获取指定文档编号\",\"description\":\"获取指定文档编号。\",\"example\":\"假设关联文档=文档A,文档A编号为:234567,GETDOCCODE({关联文档})\",\"result\":\"'234567'\",\"paramDescs\":[\"*关联文档*(必选)\"],\"formatString\":\"GETDOCCODE({关联文档})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETPRJCODE\",\"chineseName\":\"获取指定项目编号\",\"description\":\"获取指定项目编号。\",\"example\":\"假设关联项目=项目A,项目A编号为:2838383,GETPRJCODE({关联项目})\",\"result\":\"'2838383'\",\"paramDescs\":[\"*关联项目*(必选)\"],\"formatString\":\"GETPRJCODE({关联项目})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETCRMCODE\",\"chineseName\":\"获取指定客户编号\",\"description\":\"获取指定客户编号。\",\"example\":\"假设关联客户=客户A,客户A编号为:2838383,GETCRMCODE({关联客户})\",\"result\":\"'2838383'\",\"paramDescs\":[\"*关联客户*(必选)\"],\"formatString\":\"GETCRMCODE({关联客户})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LANGUAGE\",\"chineseName\":\"当前语言\",\"description\":\"获取当前语言。\",\"example\":\"LANGUAGE()\",\"result\":\"简体中文\",\"formatString\":\"LANGUAGE()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETREQUESTSTATUS\",\"chineseName\":\"流程状态\",\"description\":\"获取流程状态。示例:假设关联流程所选中的数据正在审批中;GETREQUESTSTATUS({表单.关联流程})
结果:'审批中'\",\"example\":\"假设关联流程所选中的数据正在审批中;GETREQUESTSTATUS({表单.关联流程})\",\"result\":\"'审批中'\",\"paramDescs\":[\"*关联流程*(必选)\"],\"formatString\":\"GETREQUESTSTATUS()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETEMPIDBYMOBILE\",\"chineseName\":\"人员手机获取人员ID\",\"description\":\"人员手机获取人员ID\",\"example\":\"人员手机号码获取人员ID;GETEMPIDBYMOBILE({手机号})\",\"result\":\"'342143214234213'\",\"paramDescs\":[\"*手机号*(必选)\"],\"formatString\":\"GETEMPIDBYMOBILE()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"database\",\"name\":\"数据库函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"DISTANCE\",\"chineseName\":\"返回两个位置间的直线距离\",\"description\":\"返回两个位置间的直线距离,单位m(米)。\",\"example\":\"DISTANCE({表A.地理位置1}, {表A.地理位置2})\",\"result\":\"23000\",\"paramDescs\":[\"*地理位置1*(必选)\",\"*地理位置2*(必选)\"],\"formatString\":\"DISTANCE({地理位置1}, {地理位置2})\",\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false},{\"dataType\":\"option\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETUSER\",\"chineseName\":\"返回用户的个人资料\",\"description\":\"返回用户的指定资料项:name、phone、mobile、email。\",\"example\":\"GETUSER({表A.人员选择}, 'mobile')\",\"result\":\"'18692108017'\",\"paramDescs\":[\"*人员选择*(必选)\",\"*文本*(必选,资料项)\"],\"formatString\":\"GETUSER({人员选择}, 文本)\",\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"FIELDS\",\"chineseName\":\"根据条件和排序获取指定表格中的全部数据(最多50条)或指定条数的数据的指定字段值的集合。\",\"description\":\"根据条件和排序获取指定表格中的全部数据(最多50条)或指定条数的数据的指定字段值的集合。\",\"example\":\"FIELDS({表A.负责人}, {表A.销售状态} = {C:已签约}, {表A.创建时间-倒序}, 'desc', 50})\",\"result\":\"返回销售状态为已签约的最新发布的50条数据中负责人的集合\",\"paramDescs\":[\"*字段*(必选)\",\"*条件*(可选)\",\"*排序字段*(可选)\",\"*排序类型*(可选,asc为升序,desc为降序。默认值asc)\",\"*返回条数*(可选)\"],\"formatString\":\"FIELDS({字段}, [条件], [排序字段], [排序类型], [返回条数])\",\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0}],\"dataType\":\"special\",\"name\":\"特殊函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"monthNumber\",\"chineseName\":\"月份差 +1\",\"description\":\" 计算两个日期相差的月份数 +1\",\"formatString\":\"monthNumber(date1,date2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"getEndDate\",\"chineseName\":\"根据合同期限计算合同结束日期\",\"description\":\"需传入两个参数\\n参数1、合同开始日期\\n参数2、整年(如:1、2、3)\",\"formatString\":\"getEndDate(startDate,expirationDate)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0}],\"dataType\":\"custom\",\"name\":\"自定义JS脚本函数\",\"action\":\"DataSource\",\"type\":\"functions\"}]}"; + } + } From 14fca43e1830781e02061f52ee4eeb021b0d9c3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 26 Apr 2023 15:17:08 +0800 Subject: [PATCH 053/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sql/薪酬还原脚本.sql | 28 ++++++++++- .../mapper/datacollection/EmployMapper.xml | 1 + .../entity/bo/SalaryStatisticsReportBO.java | 14 +++--- .../SalaryStatisticsReportServiceImpl.java | 2 +- .../impl/SalaryAcctEmployeeServiceImpl.java | 47 ++++++++++--------- .../engine/salary/util/SalaryDateUtil.java | 19 ++++++++ 6 files changed, 79 insertions(+), 32 deletions(-) diff --git a/resource/sql/薪酬还原脚本.sql b/resource/sql/薪酬还原脚本.sql index e0711fda3..d61bc2c31 100644 --- a/resource/sql/薪酬还原脚本.sql +++ b/resource/sql/薪酬还原脚本.sql @@ -36,8 +36,8 @@ delete from hrsa_bill_detail_temp where 1=1 delete from hrsa_bill_inspect where 1=1 ; -delete from hrsa_insurance_category where 1=1 -; +-- delete from hrsa_insurance_category where 1=1 +-- ; delete from hrsa_check_result where 1=1 ; @@ -122,6 +122,30 @@ delete from hrsa_salary_acct_result_report where 1=1 delete from hrsa_insurance_base_info where 1=1 ; +delete from hrsa_salary_item_hide where 1=1 +; + +delete from hrsa_special_add_deduction where 1=1 +; + +delete from hrsa_excel_bill_detail where 1=1 +; + +delete from hrsa_salary_send_range where 1=1 +; + +delete from hrsa_salary_send_range_obj where 1=1 +; + +delete from hrsa_compensation_log where 1=1 +; + +delete from hrsa_compensation_config where 1=1 +; + +delete from hrsa_salary_sob_back_item where 1=1 +; + INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, '养老保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') ; diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index d66b81b48..c4b515617 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -41,6 +41,7 @@ d.departmentname as departmentName, d.id as departmentId, sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, c.jobtitlename as jobtitleName, c.id as jobtitleId, e.companystartdate as companystartdate, diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index aefc6cd69..a7df17aec 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -30,6 +30,7 @@ import org.springframework.beans.BeanUtils; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDate; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -92,17 +93,16 @@ public class SalaryStatisticsReportBO { param.setSalaryStartMonth(SalaryDateUtil.getFormatYearMonth(po.getSalaryStartMonth())); param.setSalaryEndMonth(SalaryDateUtil.getFormatYearMonth(po.getSalaryEndMonth())); -// todo 待优化 -// String key = "id"; -// param.setTaxAgent(((List) JSON.parseArray(po.getTaxAgentSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + String key = "id"; + param.setTaxAgent(((List) JSON.parseArray(po.getTaxAgentSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); // param.setIncomeCategory(((List) JSON.parseArray(po.getIncomeCategorySetting(), Map.class)).stream().map(m -> Integer.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setSubCompany(((List) JSON.parseArray(po.getSubCompanySetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setDepart(((List) JSON.parseArray(po.getDepartSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setSubCompany(((List) JSON.parseArray(po.getSubCompanySetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setDepart(((List) JSON.parseArray(po.getDepartSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); // param.setGrade(((List) JSON.parseArray(po.getGradeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); // param.setPosition(((List) JSON.parseArray(po.getPositionSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); // param.setStatus(((List) JSON.parseArray(po.getStatusSetting(), Map.class)).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); -// param.setEmployee(((List) JSON.parseArray(po.getEmployeeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setHiredate(JSON.parseArray(po.getHiredateSetting(), LocalDate.class)); + param.setEmployee(((List) JSON.parseArray(po.getEmployeeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setHiredate(JSON.parseArray(po.getHiredateSetting(), LocalDate.class)); // param.setLeavedate(JSON.parseArray(po.getLeavedateSetting(), LocalDate.class)); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 444966603..4306f6bc8 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -476,7 +476,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map comInfoMap = SalaryEntityUtil.convert2Map(comInfos, DataCollectionEmployee::getEmployeeId); List lastComInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(lastEmployeeIds); Map lastComInfoMap = SalaryEntityUtil.convert2Map(lastComInfos, DataCollectionEmployee::getEmployeeId); - List sameComInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(lastEmployeeIds); + List sameComInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(sameEmployeeIds); Map sameComInfoMap = SalaryEntityUtil.convert2Map(sameComInfos, DataCollectionEmployee::getEmployeeId); Set subComIds = new HashSet<>(); diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 23b69858a..d0addb88c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -2,6 +2,7 @@ package com.engine.salary.service.impl; import cn.hutool.core.date.DateUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; +import com.api.formmode.page.util.Util; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; @@ -33,6 +34,7 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -51,6 +53,7 @@ import java.util.stream.Collectors; * @author qiantao * @version 1.0 **/ +@Slf4j public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcctEmployeeService { @@ -564,8 +567,8 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct } // 薪资所属月 - Date startYearMonth = SalaryDateUtil.dateStrToLocalTime(param.getSalaryStartMonth()); - Date endYearMonth = SalaryDateUtil.dateStrToLocalTime(param.getSalaryEndMonth()); + Date startYearMonth = SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryStartMonth()); + Date endYearMonth = SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryEndMonth()); if (Objects.nonNull(startYearMonth) && Objects.nonNull(endYearMonth)) { Set yearMonths = Sets.newHashSet(); while (!startYearMonth.after(endYearMonth)) { @@ -594,11 +597,11 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo(); StringBuilder allSubcompanyIds = new StringBuilder(); for (Long subCompanyId : subCompanyIds) { - String organizationIds = ""; + String organizationIds = Util.null2String(subCompanyId); String allChildSubcompanyId = subCompanyComInfo.getAllChildSubcompanyId(subCompanyId.toString(), organizationIds); allSubcompanyIds.append(allChildSubcompanyId); } - String finalAllSubcompanyIds = allSubcompanyIds.toString(); + List finalAllSubcompanyIds = Arrays.asList(allSubcompanyIds.toString().split(",")); employeeList = employeeList.stream().filter(emp -> finalAllSubcompanyIds.contains(emp.getSubcompanyid().toString())).collect(Collectors.toList()); } @@ -607,16 +610,16 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct if (CollectionUtils.isNotEmpty(depart)) { StringBuilder allDepartIds = new StringBuilder(); for (Long subDepartId : depart) { - String ids = ""; - String allDepartId = null; + String ids = Util.null2String(subDepartId); + String allDepartId = ""; try { allDepartId = DepartmentComInfo.getAllChildDepartId(subDepartId.toString(), ids); } catch (Exception e) { - e.printStackTrace(); + log.error("获取子部门失败", e); } allDepartIds.append(allDepartId); } - String finalAllDepartIds = allDepartIds.toString(); + List finalAllDepartIds = Arrays.asList(allDepartIds.toString().split(",")); employeeList = employeeList.stream().filter(emp -> finalAllDepartIds.contains(emp.getDepartmentId().toString())).collect(Collectors.toList()); } // 职级过滤 @@ -658,20 +661,20 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct // } // list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList()); // } -// // 入职日期 -// if (CollectionUtils.isNotEmpty(param.getHiredate())) { -// Set employeeIdsByHiredate = new HashSet<>(); -// simpleEmployeeList.forEach(simpleEmployee -> { -// LocalDate hiredate = ReportTimeUtil.dateToLocalDate(simpleEmployee.getHiredate()); -// if (simpleEmployee.getHiredate() != null && !hiredate.isBefore(param.getHiredate().get(0)) && !hiredate.isAfter(param.getHiredate().get(1))) { -// employeeIdsByHiredate.add(simpleEmployee.getEmployeeId()); -// } -// }); -// if (CollectionUtils.isEmpty(employeeIdsByHiredate)) { -// return Lists.newArrayList(); -// } -// list = list.stream().filter(po -> employeeIdsByHiredate.contains(po.getEmployeeId())).collect(Collectors.toList()); -// } + // 入职日期 + if (CollectionUtils.isNotEmpty(param.getHiredate())) { + Set employeeIdsByHiredate = new HashSet<>(); + simpleEmployeeList.forEach(simpleEmployee -> { + LocalDate hiredate = ReportTimeUtil.dateToLocalDate(simpleEmployee.getHiredate()); + if (simpleEmployee.getHiredate() != null && !hiredate.isBefore(param.getHiredate().get(0)) && !hiredate.isAfter(param.getHiredate().get(1))) { + employeeIdsByHiredate.add(simpleEmployee.getEmployeeId()); + } + }); + if (CollectionUtils.isEmpty(employeeIdsByHiredate)) { + return Lists.newArrayList(); + } + list = list.stream().filter(po -> employeeIdsByHiredate.contains(po.getEmployeeId())).collect(Collectors.toList()); + } // // 离职日期 todo // if (CollectionUtils.isNotEmpty(param.getLeavedate())) { // Set employeeIdsByLeavedate = new HashSet<>(); diff --git a/src/com/engine/salary/util/SalaryDateUtil.java b/src/com/engine/salary/util/SalaryDateUtil.java index 3a5f362e2..7a260526c 100644 --- a/src/com/engine/salary/util/SalaryDateUtil.java +++ b/src/com/engine/salary/util/SalaryDateUtil.java @@ -483,6 +483,25 @@ public class SalaryDateUtil { return str; } + public static Date dateStrToLocalYearMonth(String date) { + Date localDate = null; + try { + date = date.substring(0, 7); + if (date.contains("/")) { + SimpleDateFormat format = new SimpleDateFormat("yyyy/MM"); + localDate = format.parse(date); + } else if (date.contains("-")) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM"); + localDate = format.parse(date); + } + } catch (Exception e) { + log.error("日期解析异常,{}", date); + localDate = null; + } + + return localDate; + } + public static Date dateStrToLocalDate(String date) { Date localDate = null; try { From 433ce6cf917af38a67fd3c9c1a058a8581697c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 26 Apr 2023 16:04:33 +0800 Subject: [PATCH 054/245] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/entity/bo/SalaryStatisticsReportBO.java | 3 +-- .../entity/param/SalaryStatisticsReportDataQueryParam.java | 6 +++--- .../salary/service/impl/SalaryAcctEmployeeServiceImpl.java | 6 +++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index a7df17aec..311649ff4 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -30,7 +30,6 @@ import org.springframework.beans.BeanUtils; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.LocalDate; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -102,7 +101,7 @@ public class SalaryStatisticsReportBO { // param.setPosition(((List) JSON.parseArray(po.getPositionSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); // param.setStatus(((List) JSON.parseArray(po.getStatusSetting(), Map.class)).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); param.setEmployee(((List) JSON.parseArray(po.getEmployeeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); - param.setHiredate(JSON.parseArray(po.getHiredateSetting(), LocalDate.class)); + param.setHiredate(JSON.parseArray(po.getHiredateSetting(), Date.class)); // param.setLeavedate(JSON.parseArray(po.getLeavedateSetting(), LocalDate.class)); } diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index c9735da67..a8c0171b6 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -6,7 +6,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.LocalDate; +import java.util.Date; import java.util.List; /** @@ -68,11 +68,11 @@ public class SalaryStatisticsReportDataQueryParam extends BaseQueryParam { @JsonIgnore // 入职日期 - private List hiredate; + private List hiredate; @JsonIgnore // 离职日期 - private List leavedate; + private List leavedate; //统计单位 private Integer unitType; diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index d0addb88c..79f5de0a6 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -664,9 +664,9 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct // 入职日期 if (CollectionUtils.isNotEmpty(param.getHiredate())) { Set employeeIdsByHiredate = new HashSet<>(); - simpleEmployeeList.forEach(simpleEmployee -> { - LocalDate hiredate = ReportTimeUtil.dateToLocalDate(simpleEmployee.getHiredate()); - if (simpleEmployee.getHiredate() != null && !hiredate.isBefore(param.getHiredate().get(0)) && !hiredate.isAfter(param.getHiredate().get(1))) { + employeeList.forEach(simpleEmployee -> { + Date hiredate = SalaryDateUtil.stringToDate(simpleEmployee.getCompanystartdate()); + if (hiredate != null && !hiredate.before(param.getHiredate().get(0)) && !hiredate.after(param.getHiredate().get(1))) { employeeIdsByHiredate.add(simpleEmployee.getEmployeeId()); } }); From 1529a30768106993da0549e806f2362d009ad666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Apr 2023 09:22:20 +0800 Subject: [PATCH 055/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E8=BF=87=E6=BB=A4=E6=A1=A3=E6=A1=88=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E5=BE=97=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=E4=B8=80?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=B8=BA=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index d34efd87f..9a0511c73 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -344,7 +344,8 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic .stream().map(TaxAgentPO::getId) .collect(Collectors.toSet()); return salaryItems.stream() - .filter(e -> e.getUseInEmployeeSalary() == 0) + //薪资项目取消过滤档案,使得导入功能一页面为准 +// .filter(e -> e.getUseInEmployeeSalary() == 0) .filter(e -> getSalaryItemService(user).filterInRange(taxAgentIds, e)) .map(e -> { FormulaVar formulaVar = new FormulaVar(); From d36cfe31b3bd54dd19ba49e153d31ff2c6da4c6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Apr 2023 16:05:03 +0800 Subject: [PATCH 056/245] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/Mysql/报表.sql | 244 ++++++++++++++++++ resource/sqlupgrade/Mysql/浏览按钮.sql | 38 +++ resource/sqlupgrade/Oracle/报表.sql | 244 ++++++++++++++++++ resource/sqlupgrade/SQLServer/报表.sql | 244 ++++++++++++++++++ .../DataCollectionEmployee.java | 1 + .../mapper/datacollection/EmployMapper.xml | 4 +- .../entity/bo/SalaryStatisticsReportBO.java | 4 +- .../SalaryStatisticsDimensionServiceImpl.java | 2 +- .../SalaryStatisticsReportServiceImpl.java | 169 ++++++------ .../SalaryStatisticsReportWrapper.java | 31 ++- 10 files changed, 885 insertions(+), 96 deletions(-) create mode 100644 resource/sqlupgrade/Mysql/报表.sql create mode 100644 resource/sqlupgrade/Mysql/浏览按钮.sql create mode 100644 resource/sqlupgrade/Oracle/报表.sql create mode 100644 resource/sqlupgrade/SQLServer/报表.sql diff --git a/resource/sqlupgrade/Mysql/报表.sql b/resource/sqlupgrade/Mysql/报表.sql new file mode 100644 index 000000000..4fa33dc8b --- /dev/null +++ b/resource/sqlupgrade/Mysql/报表.sql @@ -0,0 +1,244 @@ +create table hrsa_sub_table +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + sub_table_name varchar(100) not null comment '表名' , + dimension varchar(20) not null comment '统计维度' , + start_month varchar(10) comment '开始月' , + end_month varchar(10) comment '终止月' , + pay_org_string varchar(500) comment '个税扣缴义务人高级搜索' , + pay_agency_string varchar(500) comment '缴纳组织高级搜索' , + sub_company_string varchar(500) comment '分部高级搜索' , + depart_string varchar(500) comment '部门高级搜索' , + grade_string varchar(500) comment '职级高级搜索' , + position_string varchar(500) comment '岗位高级搜索' , + status_string varchar(500) comment '人员状态高级搜索' , + employee_type varchar(500) comment '人员类型高级搜索' , + employee_string varchar(500) comment '人员高级搜索' , + payment_type_string varchar(100) comment '缴纳类型' +) +; + +create table hrsa_sub_table_item +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + table_id bigint not null comment '数据表id' , + item_name varchar(50) not null comment '统计项名称' , + item_value varchar(500) not null comment '统计项集合' , + index_value int not null comment '顺序' , + total_rule varchar(500) comment '合计规则' , + count_rule varchar(500) comment '计数规则' , + unit_type int default 2 comment '统计单位' +) +; + +alter table hrsa_sub_table add table_type int +; + +alter table hrsa_sub_table modify column table_type int default 0 +; + +create table hrsa_salary_stats_dim +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + dim_name varchar(100) comment '统计维度名称' , + dim_type varchar(20) comment '统计维度类型' , + remark varchar(500) comment '描述' , + setting varchar(2000) comment '设置内容', + is_default int comment '是否默认' , + dim_code varchar(50) comment '统计维度编码' +) +; + +create table hrsa_salary_stats_report +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + report_name varchar(100) comment '报表名称' , + dimension varchar(1000) comment '统计维度(多个的话以逗号分隔)' , + tax_agent_setting varchar(1000) comment '个税扣缴义务人配置' , + income_category_setting varchar(20) comment '收入所得项目配置' , + sub_company_setting varchar(1000) comment '分部配置' , + depart_setting varchar(1000) comment '部门配置' , + grade_setting varchar(1000) comment '职级配置' , + position_setting varchar(1000) comment '岗位配置' , + status_setting varchar(1000) comment '状态配置' , + employee_setting varchar(1000) comment '人员配置' , + hiredate_setting varchar(1000) comment '入职日期配置' , + leavedate_setting varchar(1000) comment '离职日期配置' , + salary_start_month datetime comment '薪资所属月份-起始' , + salary_end_month datetime comment '薪资所属月份-截止' +) +; + +create table hrsa_salary_statistics_item +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + item_name varchar(50) comment '统计项名称' , + item_value varchar(1000) comment '统计项集合' , + count_rule varchar(500) comment '计数规则' , + sum_rule varchar(500) comment '求和规则' , + avg_rule varchar(500) comment '平均值规则' , + max_rule varchar(500) comment '最大值规则' , + min_rule varchar(500) comment '最小值规则' , + median_rule varchar(500) comment '中位数规则' , + index_value int comment '顺序' , + unit_type int comment '统计单位', + stat_report_id bigint comment '统计报表id' +) +; + +create table hrsa_charts_setting +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + table_id bigint not null comment '报表id' , + charts_type int not null comment '报表类型' , + item_values varchar(500) comment '统计项目' , + item_col_value varchar(50) not null comment '统计列' , + dimension_range int not null comment '维度统计范围' , + item_sort_value varchar(500) comment '排序统计项目' , + item_col_sort_value varchar(50) comment '排序列' , + sort_type int comment '排序类型' , + sort_num int comment '排序取数值' +) +; + +create table hrsa_salary_echarts_setting +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + report_id bigint not null comment '报表id' , + charts_type int not null comment '报表类型' , + item_values varchar(500) comment '统计项目' , + item_col_value varchar(50) not null comment '统计列' , + dimension_range int not null comment '维度统计范围' , + item_sort_value varchar(500) comment '排序统计项目' , + item_col_sort_value varchar(50) comment '排序列' , + sort_type int comment '排序类型' , + sort_num int comment '排序取数值' +) +; + +alter table hrsa_salary_stats_dim modify column dim_type varchar(30) +; + +alter table hrsa_salary_stats_report modify column income_category_setting varchar(1000) +; + +create table hrsa_statreportlogs_detail +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + uuid varchar(36) not null comment '日志UUID' , + mainid varchar(36) not null comment '主表id' , + dataid varchar(50) not null comment '数据id' , + belongdataid varchar(50) not null comment '主表数据id' , + tablename varchar(200) not null comment '表名' , + tablenamelabelid varchar(50) default '-1' not null comment '表名labelid' , + tablenamedesc varchar(50) not null comment '对应数据库的表' , + fieldname varchar(200) not null comment '字段名' , + fieldnamelabelid varchar(50) default '-1' not null comment '字段名labelid' , + newvalue text not null comment '更新后的值' , + oldvalue text not null comment '更新前的值' , + newrealvalue text not null comment '更新后的显示值' , + oldrealvalue text not null comment '更新前的显示值' , + fielddesc varchar(200) not null comment '字段名' , + showorder int(11) not null comment '字段名' , + isdetail int(11) default 0 not null comment '是否明细字段' +) +; + +create table hrsa_statreportlogs +( + id bigint primary key comment 'ID' , + create_time datetime comment '创建时间' , + update_time datetime comment '修改时间' , + creator bigint comment '创建人id' , + delete_type int default 0 comment '是否删除' , + tenant_key varchar(10) comment '租户KEY' , + uuid varchar(36) not null comment '日志UUID' , + log_date datetime not null comment '记录时间' , + device varchar(500) not null comment '终端信息' , + log_operator bigint not null comment '操作者' , + operatorname varchar(100) comment '操作人姓名' , + targetid bigint default '-1' not null comment '操作目标id' , + targetname text not null comment '操作目标名称' , + modulename varchar(100) not null comment '模块' , + functionname varchar(100) not null comment '服务(方法)' , + interfacename varchar(100) not null comment '访问接口名' , + requesturl varchar(200) not null comment '请求全路径' , + requesturi varchar(200) not null comment '请求地址' , + operatetype varchar(50) not null comment '操作类型' , + operatetypename varchar(100) not null comment '操作类型名称' , + operatedesc varchar(3000) not null comment '操作详细说明' , + params text not null comment '涉及的相关参数' , + belongmainid varchar(36) not null comment '所属主表uuid' , + clientip varchar(50) not null comment '操作IP' , + groupid varchar(50) not null comment '分组' , + groupnamelabel varchar(1000) not null comment '分组标题' , + redoservice varchar(200) not null comment '重做业务接口' , + redocontext text not null comment '重做参数' , + cancelservice varchar(200) not null comment '撤销业务接口' , + cancelcontext text not null comment '撤销参数' , + totalruntime bigint default '0' not null comment '总运行时长' , + mainruntime bigint default '0' not null comment '主方法运行时长' , + log_result varchar(100) not null comment '日志结果' , + fromterminal varchar(100) not null comment '来自pc web' , + resultdesc text not null comment '运行结果描述' , + old_content varchar(3000) not null comment '原先内容' , + link_type varchar(20) not null comment '链接类型' , + link_id bigint default '0' not null comment '链接id' , + old_link_id bigint default '0' not null comment '原先链接id' +) +; + +alter table hrsa_salary_stats_report add remark varchar(100) +; + +alter table hrsa_salary_stats_report add second_dimension varchar(100) +; + +alter table hrsa_salary_stats_report add sort_index varchar(100) +; + +alter table hrsa_salary_stats_report add sort_type varchar(100) +; + +alter table hrsa_salary_stats_dim add label_id int +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/浏览按钮.sql b/resource/sqlupgrade/Mysql/浏览按钮.sql new file mode 100644 index 000000000..de0b61e6f --- /dev/null +++ b/resource/sqlupgrade/Mysql/浏览按钮.sql @@ -0,0 +1,38 @@ +select @current_date:= date_format( now(),'%Y-%m-%d'); +select @current_time:= date_format( now(),'%T'); +INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, '薪资项目', NULL, '', NULL, NULL, NULL, NULL, '', '', @current_date, @current_time, NULL, NULL, '', '', '0',uuid(), '', '', '', '', '1', 0, 1); +select @datashowset_id:= max(id) from datashowset; +INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, @current_date, @current_time, NULL, NULL); +INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (@datashowset_id, '名称', 'name', '', 1, 1, uuid(), NULL); +INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (@datashowset_id, '名称', 'name', '2', '', 1, uuid(), ''); + + + + +declare @datashowset_id int +declare @current_date varchar(100) +declare @current_time varchar(100) + +set @current_date = (select CONVERT(varchar(100), GETDATE(), 23)) +set @current_time = (select CONVERT(varchar(100), GETDATE(), 24)) + +INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, '薪资项目', NULL, '', NULL, NULL, NULL, NULL, '', '', @current_date, @current_time, NULL, NULL, '', '', '0',newid(), '', '', '', '', '1', 0, 1) +set @datashowset_id = (select max(id) from datashowset) +INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, @current_date, @current_time, NULL, NULL) +INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (@datashowset_id, '名称', 'name', '', 1, 1, newid(), NULL) +INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (@datashowset_id, '名称', 'name', '2', '', 1, newid(), '') +GO + + + +declare +datashowset_id NUMBER; +hrmjobgroups_id NUMBER; +begin +INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, '薪资项目', NULL, '', NULL, NULL, NULL, NULL, '', '', TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL, '', '', '0',SYS_GUID(), '', '', '', '', '1', 0, 1); +SELECT max(id) INTO datashowset_id FROM DATASHOWSET; +INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL); +INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (datashowset_id, '名称', 'name', '', 1, 1, SYS_GUID(), NULL); +INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (datashowset_id, '名称', 'name', '2', '', 1, SYS_GUID(), ''); +end; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/报表.sql b/resource/sqlupgrade/Oracle/报表.sql new file mode 100644 index 000000000..620dd24cb --- /dev/null +++ b/resource/sqlupgrade/Oracle/报表.sql @@ -0,0 +1,244 @@ +create table hrsa_sub_table +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + sub_table_name varchar2(100) not null, + dimension varchar2(20) not null, + start_month varchar2(10), + end_month varchar2(10), + pay_org_string varchar2(500), + pay_agency_string varchar2(500), + sub_company_string varchar2(500), + depart_string varchar2(500), + grade_string varchar2(500), + position_string varchar2(500), + status_string varchar2(500), + employee_type varchar2(500), + employee_string varchar2(500), + payment_type_string varchar2(100) +) +/ + +create table hrsa_sub_table_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + item_name varchar2(50) not null, + item_value varchar2(500) not null, + index_value int not null, + total_rule varchar2(500), + count_rule varchar2(500), + unit_type int default 2 +) +/ + +alter table hrsa_sub_table add table_type int +/ + +alter table hrsa_sub_table modify table_type default 0 +/ + +create table hrsa_salary_stats_dim +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + dim_name varchar2(100), + dim_type varchar2(20), + remark varchar2(500), + setting varchar2(2000), + is_default int, + dim_code varchar2(50) +) +/ + +create table hrsa_salary_stats_report +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_name varchar2(100), + dimension varchar2(1000), + tax_agent_setting varchar2(1000), + income_category_setting varchar2(20), + sub_company_setting varchar2(1000), + depart_setting varchar2(1000), + grade_setting varchar2(1000), + position_setting varchar2(1000), + status_setting varchar2(1000), + employee_setting varchar2(1000), + hiredate_setting varchar2(1000), + leavedate_setting varchar2(1000), + salary_start_month date, + salary_end_month date +) +/ + +create table hrsa_salary_statistics_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + item_name varchar2(50), + item_value varchar2(1000), + count_rule varchar2(500), + sum_rule varchar2(500), + avg_rule varchar2(500), + max_rule varchar2(500), + min_rule varchar2(500), + median_rule varchar2(500), + index_value int, + unit_type int, + stat_report_id number +) +/ + +create table hrsa_charts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +) +/ + +create table hrsa_salary_echarts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +) +/ + +alter table hrsa_salary_stats_dim modify dim_type varchar2(30) +/ + +alter table hrsa_salary_stats_report modify income_category_setting varchar2(1000) +/ + +create table hrsa_statreportlogs_detail +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + mainid varchar2(36) not null, + dataid varchar2(50) not null, + belongdataid varchar2(50) not null, + tablename varchar2(200) not null, + tablenamelabelid varchar2(50) default '-1' not null, + tablenamedesc varchar2(50) not null, + fieldname varchar2(200) not null, + fieldnamelabelid varchar2(50) default '-1' not null, + newvalue clob not null, + oldvalue clob not null, + newrealvalue clob not null, + oldrealvalue clob not null, + fielddesc varchar2(200) not null, + showorder int not null, + isdetail int default 0 not null +) +/ + +create table hrsa_statreportlogs +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + log_date date not null, + device varchar2(500) not null, + log_operator number not null, + operatorname varchar2(100), + targetid number default '-1' not null, + targetname clob not null, + modulename varchar2(100) not null, + functionname varchar2(100) not null, + interfacename varchar2(100) not null, + requesturl varchar2(200) not null, + requesturi varchar2(200) not null, + operatetype varchar2(50) not null, + operatetypename varchar2(100) not null, + operatedesc varchar2(3000) not null, + params clob not null, + belongmainid varchar2(36) not null, + clientip varchar2(50) not null, + groupid varchar2(50) not null, + groupnamelabel varchar2(1000) not null, + redoservice varchar2(200) not null, + redocontext clob not null, + cancelservice varchar2(200) not null, + cancelcontext clob not null, + totalruntime number default '0' not null, + mainruntime number default '0' not null, + log_result varchar2(100) not null, + fromterminal varchar2(100) not null, + resultdesc clob not null, + old_content varchar2(3000) not null, + link_type varchar2(20) not null, + link_id number default '0' not null, + old_link_id number default '0' not null +) +/ + +alter table hrsa_salary_stats_report add remark varchar2(100) +/ + +alter table hrsa_salary_stats_report add second_dimension varchar2(100) +/ + +alter table hrsa_salary_stats_report add sort_index varchar2(100) +/ + +alter table hrsa_salary_stats_report add sort_type varchar2(100) +/ + +alter table hrsa_salary_stats_dim add label_id int +/ \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/报表.sql b/resource/sqlupgrade/SQLServer/报表.sql new file mode 100644 index 000000000..953eadd43 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/报表.sql @@ -0,0 +1,244 @@ +create table hrsa_sub_table +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + sub_table_name nvarchar(100) not null, + dimension nvarchar(20) not null, + start_month nvarchar(10), + end_month nvarchar(10), + pay_org_string nvarchar(500), + pay_agency_string nvarchar(500), + sub_company_string nvarchar(500), + depart_string nvarchar(500), + grade_string nvarchar(500), + position_string nvarchar(500), + status_string nvarchar(500), + employee_type nvarchar(500), + employee_string nvarchar(500), + payment_type_string nvarchar(100) +) +GO + +create table hrsa_sub_table_item +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + table_id bigint not null, + item_name nvarchar(50) not null, + item_value nvarchar(500) not null, + index_value int not null, + total_rule nvarchar(500), + count_rule nvarchar(500), + unit_type int default 2 +) +GO + +alter table hrsa_sub_table add table_type int +GO + +alter table hrsa_sub_table add constraint df_table_type_7b1e7561 default 0 for table_type +GO + +create table hrsa_salary_stats_dim +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + dim_name nvarchar(100), + dim_type nvarchar(20), + remark nvarchar(500), + setting nvarchar(2000), + is_default int, + dim_code nvarchar(50) +) +GO + +create table hrsa_salary_stats_report +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + report_name nvarchar(100), + dimension nvarchar(1000), + tax_agent_setting nvarchar(1000), + income_category_setting nvarchar(20), + sub_company_setting nvarchar(1000), + depart_setting nvarchar(1000), + grade_setting nvarchar(1000), + position_setting nvarchar(1000), + status_setting nvarchar(1000), + employee_setting nvarchar(1000), + hiredate_setting varchar(1000), + leavedate_setting varchar(1000), + salary_start_month datetime, + salary_end_month datetime +) +GO + +create table hrsa_salary_statistics_item +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + item_name nvarchar(50), + item_value nvarchar(1000), + count_rule nvarchar(500), + sum_rule nvarchar(500), + avg_rule nvarchar(500), + max_rule nvarchar(500), + min_rule nvarchar(500), + median_rule nvarchar(500), + index_value int, + unit_type int, + stat_report_id bigint +) +GO + +create table hrsa_charts_setting +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + table_id bigint not null, + charts_type int not null, + item_values nvarchar(500), + item_col_value nvarchar(50) not null, + dimension_range int not null, + item_sort_value nvarchar(500), + item_col_sort_value nvarchar(50), + sort_type int, + sort_num int +) +GO + +create table hrsa_salary_echarts_setting +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + report_id bigint not null, + charts_type int not null, + item_values nvarchar(500), + item_col_value nvarchar(50) not null, + dimension_range int not null, + item_sort_value nvarchar(500), + item_col_sort_value nvarchar(50), + sort_type int, + sort_num int +) +GO + +alter table hrsa_salary_stats_dim alter column dim_type nvarchar(30) +GO + +alter table hrsa_salary_stats_report alter column income_category_setting nvarchar(1000) +GO + +create table hrsa_statreportlogs_detail +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + uuid nvarchar(36) not null, + mainid nvarchar(36) not null, + dataid nvarchar(50) not null, + belongdataid nvarchar(50) not null, + tablename nvarchar(200) not null, + tablenamelabelid nvarchar(50) default '-1' not null, + tablenamedesc nvarchar(50) not null, + fieldname nvarchar(200) not null, + fieldnamelabelid nvarchar(50) default '-1' not null, + newvalue nvarchar(max) not null, + oldvalue nvarchar(max) not null, + newrealvalue nvarchar(max) not null, + oldrealvalue nvarchar(max) not null, + fielddesc nvarchar(200) not null, + showorder int not null, + isdetail int default 0 not null +) +GO + +create table hrsa_statreportlogs +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + uuid nvarchar(36) not null, + log_date datetime not null, + device nvarchar(500) not null, + log_operator bigint not null, + operatorname nvarchar(100), + targetid bigint default '-1' not null, + targetname nvarchar(max) not null, + modulename nvarchar(100) not null, + functionname nvarchar(100) not null, + interfacename nvarchar(100) not null, + requesturl nvarchar(200) not null, + requesturi nvarchar(200) not null, + operatetype nvarchar(50) not null, + operatetypename nvarchar(100) not null, + operatedesc nvarchar(3000) not null, + params nvarchar(max) not null, + belongmainid nvarchar(36) not null, + clientip nvarchar(50) not null, + groupid nvarchar(50) not null, + groupnamelabel nvarchar(1000) not null, + redoservice nvarchar(200) not null, + redocontext nvarchar(max) not null, + cancelservice nvarchar(200) not null, + cancelcontext nvarchar(max) not null, + totalruntime bigint default '0' not null, + mainruntime bigint default '0' not null, + log_result nvarchar(100) not null, + fromterminal nvarchar(100) not null, + resultdesc nvarchar(max) not null, + old_content nvarchar(3000) not null, + link_type nvarchar(20) not null, + link_id bigint default '0' not null, + old_link_id bigint default '0' not null +) +GO + +alter table hrsa_salary_stats_report add remark nvarchar(100) +GO + +alter table hrsa_salary_stats_report add second_dimension nvarchar(100) +GO + +alter table hrsa_salary_stats_report add sort_index nvarchar(100) +GO + +alter table hrsa_salary_stats_report add sort_type nvarchar(100) +GO + +alter table hrsa_salary_stats_dim add label_id int +GO \ No newline at end of file diff --git a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java index e5f56c1f4..0ae138533 100644 --- a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java +++ b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java @@ -95,6 +95,7 @@ public class DataCollectionEmployee { private String birthday; private Double workYear; + private Double companyWorkYear; private String idNo; diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index c4b515617..a564a5058 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -55,7 +55,9 @@ e.birthday as birthday, e.certificatenum as idNo, c.id as jobtitleId, - e.enddate as dismissdate + e.enddate as dismissdate, + e.workyear, + e.companyworkyear from hrmresource e left join hrmdepartment d on e.departmentid = d.id left join hrmjobtitles c on e.jobtitle = c.id diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index 311649ff4..3f39787ed 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -829,8 +829,8 @@ public class SalaryStatisticsReportBO { * @param salaryStatisticsItemList * @return */ - public static List buildReportColumns(String dimensionName, List salaryStatisticsItemList) { - List result = new ArrayList<>(); + public static List buildReportColumns(String dimensionName, List salaryStatisticsItemList) { + List result = new ArrayList<>(); result.add(new WeaTableColumnGroup("150", dimensionName, "dimension")); Map itemMap = salaryStatisticsItemList.stream().collect(Collectors.toMap(SalaryStatisticsItemPO::getId, Function.identity())); diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java index 8c22c6f00..7d73ecb46 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java @@ -198,7 +198,7 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal List list = getSalaryStatisticsDimensionMapper().listSome(SalaryStatisticsDimensionPO.builder().ids(ids).build()); boolean isDefault = list.stream().anyMatch(s -> NumberUtils.INTEGER_ONE.equals(s.getIsDefault())); if (CollectionUtils.isEmpty(list) || isDefault) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "默认统计维度不可删除!")); } // 被薪酬报表引用 diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 4306f6bc8..09ec20bec 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -13,6 +13,7 @@ import com.engine.salary.mapper.report.SalaryStatisticsReportMapper; import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.dto.SalaryStatisticsReportDataDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; @@ -31,10 +32,7 @@ import com.engine.salary.service.impl.SalaryAcctEmployeeServiceImpl; import com.engine.salary.service.impl.SalaryAcctResultServiceImpl; import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; -import com.engine.salary.util.SalaryAssert; -import com.engine.salary.util.SalaryDateUtil; -import com.engine.salary.util.SalaryEntityUtil; -import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.*; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -47,6 +45,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; +import weaver.general.Util; import weaver.hrm.User; import java.util.*; @@ -347,12 +346,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return buildSubComRecords(data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_DEPARTMENT: return buildDepartRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_POSITION: - return buildPositionRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_POSITION: +// return buildPositionRecords(data, salaryAcctResultValueMap); // case SalaryStatisticsDimensionConstant.DM_GRADE: // return buildGradeRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: - return buildStatusRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_HRM_STATUS: +// return buildStatusRecords(data, salaryAcctResultValueMap); // case SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE: // return buildTypeRecords(data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_EMPLOYEE: @@ -365,8 +364,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return buildYearRecords(data, salaryAcctResultValueMap); // case SalaryStatisticsDimensionConstant.DM_SEX: // return buildSexRecords(data, salaryAcctResultValueMap); - case SalaryStatisticsDimensionConstant.DM_JOB_CALL: - return buildJobCallRecords(data, salaryAcctResultValueMap); +// case SalaryStatisticsDimensionConstant.DM_JOB_CALL: +// return buildJobCallRecords(data, salaryAcctResultValueMap); // case SalaryStatisticsDimensionConstant.DM_SUPERIOR: // return buildSuperiorRecords(data, salaryAcctResultValueMap); // case SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS: @@ -391,13 +390,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return new PageInfo<>(); } // 定量-组距式分组 + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { + return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); + // 定量-单项式分组 + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { + return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); } -// else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { -// return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); -// // 定量-单项式分组 -// } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { -// return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); -// } return new PageInfo<>(); } @@ -1112,9 +1110,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List sameSimpleUserInfoList; Map> map = Maps.newHashMap(); try { - simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : getSalaryEmployeeService(user).getEmployeeByIds(employeeIds); - lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : getSalaryEmployeeService(user).getEmployeeByIds(lastEmployeeIds); - sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : getSalaryEmployeeService(user).getEmployeeByIds(sameEmployeeIds); + simpleUserInfoList = CollectionUtils.isEmpty(employeeIds) ? Lists.newArrayList() : getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); + lastSimpleUserInfoList = CollectionUtils.isEmpty(lastEmployeeIds) ? Lists.newArrayList() : getSalaryEmployeeService(user).getEmployeeByIdsAll(lastEmployeeIds); + sameSimpleUserInfoList = CollectionUtils.isEmpty(sameEmployeeIds) ? Lists.newArrayList() : getSalaryEmployeeService(user).getEmployeeByIdsAll(sameEmployeeIds); } catch (Exception e) { log.info("获取员工个人信息失败: {}", e.getMessage()); return map; @@ -1596,76 +1594,81 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // result.setList(records); // return result; // } -// -// private PageInfo> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// // 分组设置 -// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); -// -// Map empIdYearMap = new HashMap<>(); -// Map lastEmpIdYearMap = new HashMap<>(); -// Map sameEmpIdYearMap = new HashMap<>(); -// -// String groupBelong; -// if (StringUtils.isEmpty(dimension.getDimCode())) { -// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { -// groupBelong = SalaryStatisticsReportBO.G_YEAR; -// // 年份数据 -// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); -// } else { -// groupBelong = SalaryStatisticsReportBO.G_ITEM; -// } -// groups.forEach(k -> { -// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setList(records); -// return result; -// } -// -// private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return; -// } -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + + private PageInfo> buildRationGroupSpacing4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + + // 分组设置 + List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupSpacing.class); + + Map empIdYearMap = new HashMap<>(); + Map lastEmpIdYearMap = new HashMap<>(); + Map sameEmpIdYearMap = new HashMap<>(); + + String groupBelong; + if (StringUtils.isEmpty(dimension.getDimCode())) { + groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { + groupBelong = SalaryStatisticsReportBO.G_YEAR; + // 年份数据 + handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); + } else { + groupBelong = SalaryStatisticsReportBO.G_ITEM; + } + groups.forEach(k -> { + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + Map temp = new HashMap<>(); + temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setList(records); + return result; + } + + private void handle4GroupYear(SalaryStatisticsDimensionPO dimension, Map empIdYearMap, Map lastEmpIdYearMap, Map sameEmpIdYearMap, SalaryStatisticsReportDataDTO data) { + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return; + } + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { // if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { // empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { -// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { -// empIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { +// } else + + if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { + empIdYearMap.put(employee.getEmployeeId(), Util.null2String(employee.getWorkYear())); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && employee.getCompanyWorkYear() != null) { + empIdYearMap.put(employee.getEmployeeId(), Util.null2String(employee.getCompanyWorkYear())); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { // if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { // lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { -// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { -// lastEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { +// } else + + if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { + lastEmpIdYearMap.put(employee.getEmployeeId(), Util.null2String(employee.getWorkYear())); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && employee.getCompanyWorkYear() != null) { + lastEmpIdYearMap.put(employee.getEmployeeId(), Util.null2String(employee.getCompanyWorkYear())); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { // if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) && employee.getAge() != null) { // sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getAge().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { -// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getWorkYear().toString()); -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && StringUtils.isNotEmpty(employee.getCompanyYear())) { -// sameEmpIdYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// } -// +// } else + if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) && employee.getWorkYear() != null) { + sameEmpIdYearMap.put(employee.getEmployeeId(), Util.null2String(employee.getWorkYear())); + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR) && employee.getCompanyWorkYear() != null) { + sameEmpIdYearMap.put(employee.getEmployeeId(), Util.null2String(employee.getCompanyWorkYear())); + } + }); + } + // private PageInfo> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 15746671c..bd1d032e5 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -1,10 +1,10 @@ package com.engine.salary.report.wrapper; import com.alibaba.fastjson.JSONArray; -import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.WeaFormOption; +import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; @@ -216,7 +216,7 @@ public class SalaryStatisticsReportWrapper extends Service { Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); // 列表columns - List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); + List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); Map resultMap = Maps.newHashMap(); resultMap.putAll(JsonUtil.parseMap(weaTable, Object.class)); @@ -232,7 +232,7 @@ public class SalaryStatisticsReportWrapper extends Service { * @param param * @return */ - public Map exportData(SalaryStatisticsReportDataQueryParam param) { + public Map exportData(SalaryStatisticsReportDataQueryParam param) { if (param.getId() == null || param.getDimensionId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } @@ -259,7 +259,7 @@ public class SalaryStatisticsReportWrapper extends Service { List> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); // 获取列头 - List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); + List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); // 组装导出参数 // ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records); @@ -268,20 +268,33 @@ public class SalaryStatisticsReportWrapper extends Service { List rows = new ArrayList<>(); rows.add(weaTableColumns); + + List head = new ArrayList<>(); + weaTableColumns.forEach(weaTableColumn -> { + String column = weaTableColumn.getColumn(); + if (CollectionUtils.isEmpty(weaTableColumn.getChildren())) { + head.add(column); + } else { + weaTableColumn.getChildren().forEach(children -> { + head.add(children.getColumn()); + }); + } + }); + for (Map map : records) { List row = Lists.newArrayListWithExpectedSize(records.size()); - for (String k : map.keySet()) { + head.forEach(k -> { row.add(map.getOrDefault(k, StringUtils.EMPTY)); - } + }); rows.add(row); } String sheetName = SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + dimension.getDimName(); XSSFWorkbook book = ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, true); - Map map = new HashMap<>(); - map.put("workbook",book); - map.put("fileName",sheetName); + Map map = new HashMap<>(); + map.put("workbook", book); + map.put("fileName", sheetName); return map; } From c7286fbae4362fbff3dc0c22083dd37aab489675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Apr 2023 17:18:20 +0800 Subject: [PATCH 057/245] =?UTF-8?q?=E5=AE=9A=E9=87=8F-=E7=BB=84=E8=B7=9D?= =?UTF-8?q?=E5=BC=8F=E5=88=86=E7=BB=84=E3=80=81=E5=AE=9A=E9=87=8F-?= =?UTF-8?q?=E5=8D=95=E9=A1=B9=E5=BC=8F=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 191 +++++++++--------- .../SalaryStatisticsDimensionWrapper.java | 26 +-- 2 files changed, 109 insertions(+), 108 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 09ec20bec..7e779c950 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -384,8 +384,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // return buildAgeRecords(data, salaryAcctResultValueMap); case SalaryStatisticsDimensionConstant.DM_WORK_YEAR: return buildWorkYearRecords(data, salaryAcctResultValueMap); -// case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: -// return buildCompanyYearRecords(data, salaryAcctResultValueMap); + case SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR: + return buildCompanyYearRecords(data, salaryAcctResultValueMap); default: return new PageInfo<>(); } @@ -393,7 +393,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); // 定量-单项式分组 - } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { + } + else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); } return new PageInfo<>(); @@ -1526,63 +1527,63 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return result; } -// private PageInfo> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// Map> simpleUserInfoMap = getSimpleUserInfoList(data); -// if (simpleUserInfoMap.isEmpty()) { -// return result; -// } -// -// Set companyYearSet = new HashSet<>(); -// -// Map empIdCompanyYearMap = new HashMap<>(); -// Map lastEmpIdCompanyYearMap = new HashMap<>(); -// Map sameEmpIdCompanyYearMap = new HashMap<>(); -// simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { -// companyYearSet.add(employee.getCompanyYear()); -// empIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { -// lastEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { -// if (StringUtils.isNotEmpty(employee.getCompanyYear())) { -// sameEmpIdCompanyYearMap.put(Objects.isNull(employee.getUser()) ? null : employee.getUser().getId(), employee.getCompanyYear()); -// } -// }); -// -// List companyYears = Lists.newArrayList(companyYearSet); -// companyYears = companyYears.stream().sorted().collect(Collectors.toList()); -// -// companyYears.forEach(k -> { -// List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(noGroupingList)) { -// Map noGrouping = new HashMap<>(); -// noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); -// noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(noGrouping); -// } -// -// result.setList(records); -// return result; -// } -// + private PageInfo> buildCompanyYearRecords(SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + Map> simpleUserInfoMap = getSimpleUserInfoList(data); + if (simpleUserInfoMap.isEmpty()) { + return result; + } + + Set companyYearSet = new HashSet<>(); + + Map empIdCompanyYearMap = new HashMap<>(); + Map lastEmpIdCompanyYearMap = new HashMap<>(); + Map sameEmpIdCompanyYearMap = new HashMap<>(); + simpleUserInfoMap.get(NOW_INFO).forEach(employee -> { + if (employee.getCompanyWorkYear() != null) { + companyYearSet.add(Util.null2String(employee.getCompanyWorkYear())); + empIdCompanyYearMap.put(employee.getEmployeeId(), Util.null2String(employee.getCompanyWorkYear())); + } + }); + simpleUserInfoMap.get(LAST_INFO).forEach(employee -> { + if (employee.getCompanyWorkYear() != null) { + lastEmpIdCompanyYearMap.put(employee.getEmployeeId(), Util.null2String(employee.getCompanyWorkYear())); + } + }); + simpleUserInfoMap.get(SAME_INFO).forEach(employee -> { + if (employee.getCompanyWorkYear() != null) { + sameEmpIdCompanyYearMap.put(employee.getEmployeeId(), Util.null2String(employee.getCompanyWorkYear())); + } + }); + + List companyYears = Lists.newArrayList(companyYearSet); + companyYears = companyYears.stream().sorted().collect(Collectors.toList()); + + companyYears.forEach(k -> { + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + + result.setList(records); + return result; + } + // private PageInfo> buildRationGroupSpacing4NoItemRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // PageInfo> result = new PageInfo<>(); // List> records = new ArrayList<>(); @@ -1669,39 +1670,39 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary }); } -// private PageInfo> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { -// PageInfo> result = new PageInfo<>(); -// List> records = new ArrayList<>(); -// -// // 分组设置 -// List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupIndividual.class); -// Map empIdYearMap = new HashMap<>(); -// Map lastEmpIdYearMap = new HashMap<>(); -// Map sameEmpIdYearMap = new HashMap<>(); -// -// String groupBelong; -// if (StringUtils.isEmpty(dimension.getDimCode())) { -// groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; -// } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { -// groupBelong = SalaryStatisticsReportBO.G_YEAR; -// -// // 年份数据 -//// handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); -// } else { -// groupBelong = SalaryStatisticsReportBO.G_ITEM; -// } -// -// groups.forEach(k -> { -// List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); -// Map temp = new HashMap<>(); -// temp.put(DM, k.getValue()); -// temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); -// records.add(temp); -// }); -// -// result.setList(records); -// return result; -// } + private PageInfo> buildRationGroupIndividual4Records(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { + PageInfo> result = new PageInfo<>(); + List> records = new ArrayList<>(); + + // 分组设置 + List groups = JsonUtil.parseList(dimension.getSetting(), SalaryStatisticsDimensionSaveParam.Setting4RationGroupIndividual.class); + Map empIdYearMap = new HashMap<>(); + Map lastEmpIdYearMap = new HashMap<>(); + Map sameEmpIdYearMap = new HashMap<>(); + + String groupBelong; + if (StringUtils.isEmpty(dimension.getDimCode())) { + groupBelong = SalaryStatisticsReportBO.G_NO_ITEM; + } else if (dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_AGE) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_WORK_YEAR) || dimension.getDimCode().equals(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR)) { + groupBelong = SalaryStatisticsReportBO.G_YEAR; + + // 年份数据 + handle4GroupYear(dimension, empIdYearMap, lastEmpIdYearMap, sameEmpIdYearMap, data); + } else { + groupBelong = SalaryStatisticsReportBO.G_ITEM; + } + + groups.forEach(k -> { + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + Map temp = new HashMap<>(); + temp.put(DM, k.getValue()); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }); + + result.setList(records); + return result; + } } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java index 4327c7d8a..fe1ad13ec 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java @@ -81,24 +81,24 @@ public class SalaryStatisticsDimensionWrapper extends Service { public SalaryStatisticsDimensionFormDTO getFrom(Long id) { List statsDimOptions = Lists.newArrayList(); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_SEX, SalaryI18nUtil.getI18nLabel(98622, "性别"))); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_JOB_CALL, SalaryI18nUtil.getI18nLabel(173995, "职称"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_SEX, SalaryI18nUtil.getI18nLabel(98622, "性别"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_JOB_CALL, SalaryI18nUtil.getI18nLabel(173995, "职称"))); // statsDimOptions.add(new WeaFormOption("", SalaryI18nUtil.getI18nLabel(173996, "办公地点"))); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_SUPERIOR, SalaryI18nUtil.getI18nLabel(173997, "上级"))); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS, SalaryI18nUtil.getI18nLabel(174007, "婚姻状况"))); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_EDUCATION, SalaryI18nUtil.getI18nLabel(174005, "学历"))); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_DEGREE, SalaryI18nUtil.getI18nLabel(174004, "学位"))); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_NATION, SalaryI18nUtil.getI18nLabel(174107, "民族"))); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE, SalaryI18nUtil.getI18nLabel(174106, "户口类型"))); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS, SalaryI18nUtil.getI18nLabel(174105, "政治面貌"))); - statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_AGE, SalaryI18nUtil.getI18nLabel(174001, "年龄"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_SUPERIOR, SalaryI18nUtil.getI18nLabel(173997, "上级"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_MARITAL_STATUS, SalaryI18nUtil.getI18nLabel(174007, "婚姻状况"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_EDUCATION, SalaryI18nUtil.getI18nLabel(174005, "学历"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_DEGREE, SalaryI18nUtil.getI18nLabel(174004, "学位"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_NATION, SalaryI18nUtil.getI18nLabel(174107, "民族"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_HOUSEHOLD_TYPE, SalaryI18nUtil.getI18nLabel(174106, "户口类型"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_POLITICS_STATUS, SalaryI18nUtil.getI18nLabel(174105, "政治面貌"))); +// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_AGE, SalaryI18nUtil.getI18nLabel(174001, "年龄"))); statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_WORK_YEAR, SalaryI18nUtil.getI18nLabel(174000, "工龄"))); -// statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR, SalaryI18nUtil.getI18nLabel(174003, "司龄"))); + statsDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR, SalaryI18nUtil.getI18nLabel(174003, "司龄"))); List groupDimOptions = Lists.newArrayList(); - groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_AGE, SalaryI18nUtil.getI18nLabel(174001, "年龄"))); +// groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_AGE, SalaryI18nUtil.getI18nLabel(174001, "年龄"))); groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_WORK_YEAR, SalaryI18nUtil.getI18nLabel(174000, "工龄"))); -// groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR, SalaryI18nUtil.getI18nLabel(174003, "司龄"))); + groupDimOptions.add(new WeaFormOption(SalaryStatisticsDimensionConstant.DM_COMPANY_YEAR, SalaryI18nUtil.getI18nLabel(174003, "司龄"))); List salaryItemList = salaryItemService(user).listAll(); groupDimOptions.addAll(salaryItemList.stream() .filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())) From 1641b70764d3c5ec4785bb8a3bd1f9c8020d3f19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Apr 2023 17:31:43 +0800 Subject: [PATCH 058/245] =?UTF-8?q?=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryStatisticsReportServiceImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 7e779c950..2f7ac0a35 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -109,7 +109,15 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary @Override public List list() { - return getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().creator((long) user.getUID()).build()); + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long)user.getUID()); + if(needAuth){ + Boolean adminEnable = getTaxAgentService(user).isAdminEnable((long) user.getUID()); + if(!adminEnable){ + return new ArrayList<>(); + } + } + + return getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().build()); } @Override From 20e4856c23dfc1f7b0ec0030beb78c10294393f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 28 Apr 2023 11:18:01 +0800 Subject: [PATCH 059/245] =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryStatisticsReportServiceImpl.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 2f7ac0a35..d1ab36680 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -35,7 +35,6 @@ import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.*; 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 com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -778,11 +777,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } private PageInfo> buildEmployeeRecords(SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { - List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List> records = new ArrayList<>(); +// List employeeIds = data.getList().stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); - List pageEmployeeIds = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), employeeIds); - List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); +// List pageEmployeeIds = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), employeeIds); +// List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); + List> records = new ArrayList<>(); + List accountDetailPOList = data.getList(); Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); @@ -801,8 +801,6 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary PageInfo> result = new PageInfo<>(); result.setList(records); - result.setTotal(employeeIds.size()); - return result; } From 0aabcd047111d439576de1fd8f5c5984e89bbc8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 28 Apr 2023 14:37:59 +0800 Subject: [PATCH 060/245] =?UTF-8?q?=E5=B0=86=E9=99=A4=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E7=9A=84=E9=A1=B9=E7=9B=AE=E5=A4=96=E7=9A=84?= =?UTF-8?q?=E6=89=80=E6=9C=89=E7=9A=84=E5=80=BC=E9=83=BD=E9=94=81=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/SalaryAcctManager.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java index 8894536a2..1c786c73d 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java @@ -254,8 +254,21 @@ public class SalaryAcctManager extends Service { // 7、查询考勤引用的所有字段 List attendQuoteFieldListDTOS = getAttendQuoteFieldService(user).listAll(); - //核算锁定值 - List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); +// //核算锁定值 +// List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); +// Map acctResults = new HashMap<>(); +// if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { +// List acctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); +// acctResults = Optional.ofNullable(acctResultPOS) +// .orElse(new ArrayList<>()) +// .stream() +// .filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())) +// .collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); +// } + + //将除重新核算的项目外的所有的值都锁定 + List salaryItemIds = calculateParam.getSalaryItemIds(); + List lockSalaryItemIds = salaryItemPOS.stream().map(SalaryItemPO::getId).filter(id -> !salaryItemIds.contains(id)).collect(Collectors.toList()); Map acctResults = new HashMap<>(); if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { List acctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); @@ -266,6 +279,7 @@ public class SalaryAcctManager extends Service { .collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); } + // 8、查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); formulaIds.addAll(SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId)); From 0d6355ca4a80453148e4d4869ff8a741905ff2f5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 28 Apr 2023 16:04:52 +0800 Subject: [PATCH 061/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=9E=E7=AE=97?= =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E7=9A=84=E5=90=88=E8=AE=A1=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctResultServiceImpl.java | 5 ++ .../service/impl/SalarySendServiceImpl.java | 64 ++++++++++++++++++- 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 04c2c5eb4..8eacca950 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -297,6 +297,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 查询薪资核算所用薪资账套的薪资项目 List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); + if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)){ + // 是回算,获取回算项 + List salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + salaryItemIds.addAll(salarySobBackItemPOS.stream().map(SalarySobBackItemPO::getSalaryItemId).collect(Collectors.toList())); + } List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); // 查询薪资核算结果 Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 01bfb5162..80505f6c0 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -18,6 +18,7 @@ import com.engine.salary.entity.salaryBill.param.*; import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -26,12 +27,15 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; +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.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; import com.engine.salary.enums.salarybill.SalarySendStatusEnum; import com.engine.salary.enums.salarybill.SalaryTemplateReplenishRuleEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper; @@ -149,6 +153,15 @@ public class SalarySendServiceImpl extends Service implements SalarySendService return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } + private SalarySobItemService getSalarySobItemService(User user) { + return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); + } + + private SalarySobBackItemService getSalarySobBackItemService(User user) { + return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); + } + + // @RpcReference // private FileDownloadClient fileDownloadClient; @@ -1300,13 +1313,58 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override - public Map sumRow(SalarySendInfoQueryParam queryParam) { - Long salarySendId = queryParam.getSalarySendId(); + public Map sumRow(SalarySendInfoQueryParam param) { + Long salarySendId = param.getSalarySendId(); // 获取薪资核算ID SalarySendPO salarySendPO = getById(salarySendId); if(Objects.isNull(salarySendPO)){ throw new SalaryRunTimeException("工资发放记录不存在或已被删除"); } - return getSalaryAcctResultService(user).sumRow(SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build()); +// return getSalaryAcctResultService(user).sumRow(); + + SalaryAcctResultQueryParam queryParam = SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build(); + // 查询薪资核算人员 + List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user) + .listByResultQueryParam(queryParam); + + if (org.apache.commons.collections4.CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { + return null; + } + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + // 查询薪资核算所用薪资账套的薪资项目 + List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); + if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)){ + // 是回算,获取回算项 + List salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + salaryItemIds.addAll(salarySobBackItemPOS.stream().map(SalarySobBackItemPO::getSalaryItemId).collect(Collectors.toList())); + } + List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); + + // 查询薪资核算结果 + Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); + List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + // 是否是补发工资单 + List salarySendInfoPOS = getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).build()); + List sendEmployeeIds = salarySendInfoPOS.stream().map(SalarySendInfoPO::getEmployeeId).collect(Collectors.toList()); + salaryAcctResultPOS = salaryAcctResultPOS.stream().filter(PO -> sendEmployeeIds.contains(PO.getEmployeeId())).collect(Collectors.toList()); + + Map map = new HashMap<>(); + Map> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId); + salaryItemPOS.stream().filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())).forEach(item -> { + BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())) + .orElse(new ArrayList<>()) + .stream() + .map(SalaryAcctResultPO::getResultValue) + .filter(NumberUtils::isCreatable) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap())); + }); + return map; } } From ae719ad65bb8317bcd5314b212c7e1e77c065aa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 4 May 2023 11:56:34 +0800 Subject: [PATCH 062/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E8=BF=87=E5=A4=9A=E6=97=B6bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsEchartsController.java | 8 + .../SalaryStatisticsEChartsSettingMapper.java | 72 ++++ .../SalaryStatisticsEChartsSettingMapper.xml | 321 ++++++++++++++++++ .../po/SalaryStatisticsEChartsSettingPO.java | 76 +++++ .../SalaryStatisticsEchartsService.java | 37 ++ .../SalaryStatisticsEchartsServiceImpl.java | 104 ++++++ .../SalaryStatisticsReportServiceImpl.java | 13 +- .../SalaryStatisticsEchartsController.java | 78 +++++ .../web/SalaryStatisticsItemController.java | 1 - .../SalaryStatisticsEchartsWrapper.java | 51 +++ .../impl/SalaryAcctCalculateServiceImpl.java | 2 +- .../impl/SalaryAcctResultServiceImpl.java | 38 ++- .../SalaryComparisonResultServiceImpl.java | 11 +- 13 files changed, 785 insertions(+), 27 deletions(-) create mode 100644 src/com/api/salary/web/SalaryStatisticsEchartsController.java create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsEChartsSettingMapper.java create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsEChartsSettingMapper.xml create mode 100644 src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java create mode 100644 src/com/engine/salary/report/service/SalaryStatisticsEchartsService.java create mode 100644 src/com/engine/salary/report/service/impl/SalaryStatisticsEchartsServiceImpl.java create mode 100644 src/com/engine/salary/report/web/SalaryStatisticsEchartsController.java create mode 100644 src/com/engine/salary/report/wrapper/SalaryStatisticsEchartsWrapper.java diff --git a/src/com/api/salary/web/SalaryStatisticsEchartsController.java b/src/com/api/salary/web/SalaryStatisticsEchartsController.java new file mode 100644 index 000000000..991c25382 --- /dev/null +++ b/src/com/api/salary/web/SalaryStatisticsEchartsController.java @@ -0,0 +1,8 @@ +package com.api.salary.web; + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/report/statistics/echarts") +public class SalaryStatisticsEchartsController extends com.engine.salary.report.web.SalaryStatisticsEchartsController{ + +} diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsEChartsSettingMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsEChartsSettingMapper.java new file mode 100644 index 000000000..d9c4d7ada --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsEChartsSettingMapper.java @@ -0,0 +1,72 @@ +package com.engine.salary.mapper.report; + +import com.engine.salary.report.entity.po.SalaryStatisticsEChartsSettingPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface SalaryStatisticsEChartsSettingMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryStatisticsEChartsSettingPO SalaryStatisticsEChartsSettingPO); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryStatisticsEChartsSettingPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param SalaryStatisticsEChartsSettingPO 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryStatisticsEChartsSettingPO SalaryStatisticsEChartsSettingPO); + + /** + * 修改,修改所有字段 + * + * @param SalaryStatisticsEChartsSettingPO 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryStatisticsEChartsSettingPO SalaryStatisticsEChartsSettingPO); + + /** + * 修改,忽略null字段 + * + * @param SalaryStatisticsEChartsSettingPO 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryStatisticsEChartsSettingPO SalaryStatisticsEChartsSettingPO); + + /** + * 删除记录 + * + * @param SalaryStatisticsEChartsSettingPO 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryStatisticsEChartsSettingPO SalaryStatisticsEChartsSettingPO); + + /** + * 批量删除记录 + * @param ids 主键id集合 + */ + void deleteByIds(@Param("ids") Collection ids); + + void deleteByReportId(Long reportId); +} diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsEChartsSettingMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsEChartsSettingMapper.xml new file mode 100644 index 000000000..35c17deb4 --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsEChartsSettingMapper.xml @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + t + . + charts_type + , t.create_time + , t.creator + , t.delete_type + , t.dimension_range + , t.id + , t.item_col_sort_value + , t.item_col_value + , t.item_sort_value + , t.item_values + , t.report_id + , t.sort_num + , t.sort_type + , t.tenant_key + , t.update_time + + + + + + + + + + + + + + + INSERT INTO hrsa_salary_echarts_setting + + + + charts_type, + + + create_time, + + + creator, + + + delete_type, + + + dimension_range, + + + id, + + + item_col_sort_value, + + + item_col_value, + + + item_sort_value, + + + item_values, + + + report_id, + + + sort_num, + + + sort_type, + + + tenant_key, + + + update_time, + + + + + #{chartsType}, + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{dimensionRange}, + + + #{id}, + + + #{itemColSortValue}, + + + #{itemColValue}, + + + #{itemSortValue}, + + + #{itemValues}, + + + #{reportId}, + + + #{sortNum}, + + + #{sortType}, + + + #{tenantKey}, + + + #{updateTime}, + + + + + + + UPDATE hrsa_salary_echarts_setting + + charts_type=#{chartsType}, + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + dimension_range=#{dimensionRange}, + item_col_sort_value=#{itemColSortValue}, + item_col_value=#{itemColValue}, + item_sort_value=#{itemSortValue}, + item_values=#{itemValues}, + report_id=#{reportId}, + sort_num=#{sortNum}, + sort_type=#{sortType}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_echarts_setting + + + charts_type=#{chartsType}, + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + dimension_range=#{dimensionRange}, + + + item_col_sort_value=#{itemColSortValue}, + + + item_col_value=#{itemColValue}, + + + item_sort_value=#{itemSortValue}, + + + item_values=#{itemValues}, + + + report_id=#{reportId}, + + + sort_num=#{sortNum}, + + + sort_type=#{sortType}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_echarts_setting + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_salary_echarts_setting + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + UPDATE hrsa_salary_echarts_setting + SET delete_type=1 + WHERE report_id = #{reportId} + AND delete_type = 0 + + + + \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java new file mode 100644 index 000000000..d41e84287 --- /dev/null +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java @@ -0,0 +1,76 @@ +package com.engine.salary.report.entity.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @Description: 薪酬统计图表 + * @Author: wangxiangzhong + * @Date: 2023/1/31 15:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//hrsa_salary_echarts_setting// +public class SalaryStatisticsEChartsSettingPO { + + //分析图配置表id + private Long id; + + //报表id + private Long reportId; + + //报表类型 + private Integer chartsType; + + //统计项目 + private String itemValues; + + //统计列 + private String itemColValue; + + //维度统计范围 + private Integer dimensionRange; + + //排序统计项目 + private String itemSortValue; + + //排序列 + private String itemColSortValue; + + //排序类型 + private Integer sortType; + + //排序取数值 + private Integer sortNum; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 创建人 + */ + private Long creator; + + /** + * 是否已删除。0:未删除、1:已删除 + */ + private Integer deleteType; + + /** + * 租户ID + */ + private String tenantKey; +} diff --git a/src/com/engine/salary/report/service/SalaryStatisticsEchartsService.java b/src/com/engine/salary/report/service/SalaryStatisticsEchartsService.java new file mode 100644 index 000000000..d819230b2 --- /dev/null +++ b/src/com/engine/salary/report/service/SalaryStatisticsEchartsService.java @@ -0,0 +1,37 @@ +package com.engine.salary.report.service; + +import com.engine.salary.report.entity.dto.SalaryStatisticsEchartsDTO; + +/** + * 薪酬统计图表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface SalaryStatisticsEchartsService { + + /** + * 分析图数据展示范围设置保存 + * + * @param saveParam + * @return + */ + String saveRangeSetting(SalaryStatisticsEchartsDTO saveParam); + + /** + * 分析图数据展示范围设置删除 + * + * @param reportId + * @return + */ + String deleteRangeSetting(Long reportId); + + /** + * 分析图数据展示范围设置查询 + * + * @return + */ + SalaryStatisticsEchartsDTO queryRangeSetting(SalaryStatisticsEchartsDTO param); +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEchartsServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEchartsServiceImpl.java new file mode 100644 index 000000000..6828d2899 --- /dev/null +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEchartsServiceImpl.java @@ -0,0 +1,104 @@ +package com.engine.salary.report.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.engine.core.impl.Service; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.enums.sicategory.DeleteTypeEnum; +import com.engine.salary.mapper.report.SalaryStatisticsEChartsSettingMapper; +import com.engine.salary.report.entity.dto.SalaryStatisticsEchartsDTO; +import com.engine.salary.report.entity.po.SalaryStatisticsEChartsSettingPO; +import com.engine.salary.report.service.SalaryStatisticsEchartsService; +import com.engine.salary.util.SalaryAssert; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import dm.jdbc.util.IdGenerator; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * 薪酬统计图表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryStatisticsEchartsServiceImpl extends Service implements SalaryStatisticsEchartsService { + + private SalaryStatisticsEChartsSettingMapper getSalaryStatisticsDimensionMapper() { + return MapperProxyFactory.getProxy(SalaryStatisticsEChartsSettingMapper.class); + } + @Override + public String saveRangeSetting(SalaryStatisticsEchartsDTO saveParam) { + SalaryAssert.notNull(saveParam.getReportId(), SalaryI18nUtil.getI18nLabel( 152562, "报表id不能为空")); + SalaryAssert.notNull(saveParam.getChartsType(), SalaryI18nUtil.getI18nLabel( 177912, "报表类型不能为空")); + + SalaryStatisticsEChartsSettingPO salaryStatisticsEChartsSettingQue = null; + List pos = getSalaryStatisticsDimensionMapper().listSome(SalaryStatisticsEChartsSettingPO.builder().reportId(saveParam.getReportId()).chartsType(saveParam.getChartsType()).build()); + if(CollectionUtils.isNotEmpty(pos)){ + salaryStatisticsEChartsSettingQue = pos.get(0); + } + + if (salaryStatisticsEChartsSettingQue != null) { + getSalaryStatisticsDimensionMapper().delete(salaryStatisticsEChartsSettingQue); + } + Date now = new Date(); + SalaryStatisticsEChartsSettingPO salaryStatisticsEChartsSetting = SalaryStatisticsEChartsSettingPO.builder() + .id(IdGenerator.generate()) + .reportId(saveParam.getReportId()) + .chartsType(saveParam.getChartsType()) + .itemValues(JSONArray.toJSONString(saveParam.getItemValues())) + .itemColValue(saveParam.getItemColValue()) + .dimensionRange(Objects.isNull(saveParam.getDimensionRange()) ? 0 : saveParam.getDimensionRange()) + .itemSortValue(saveParam.getItemSortValue()) + .itemColSortValue(saveParam.getItemColSortValue()) + .sortType(saveParam.getSortType()) + .sortNum(saveParam.getSortNum()) + .createTime(now) + .updateTime(now) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .creator((long)user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + getSalaryStatisticsDimensionMapper().insertIgnoreNull(salaryStatisticsEChartsSetting); + return StringUtils.EMPTY; + } + + @Override + public String deleteRangeSetting(Long reportId) { + + getSalaryStatisticsDimensionMapper().deleteByReportId(reportId); + + return StringUtils.EMPTY; + } + + @Override + public SalaryStatisticsEchartsDTO queryRangeSetting(SalaryStatisticsEchartsDTO resp) { + + + SalaryStatisticsEChartsSettingPO salaryStatisticsEChartsSetting = null; + List pos = getSalaryStatisticsDimensionMapper().listSome(SalaryStatisticsEChartsSettingPO.builder().reportId(resp.getReportId()).chartsType(resp.getChartsType()).build()); + if(CollectionUtils.isNotEmpty(pos)){ + salaryStatisticsEChartsSetting = pos.get(0); + } + + if (salaryStatisticsEChartsSetting != null) { + resp.setId(salaryStatisticsEChartsSetting.getId()); + resp.setReportId(salaryStatisticsEChartsSetting.getReportId()); + resp.setChartsType(salaryStatisticsEChartsSetting.getChartsType()); + resp.setDimensionRange(salaryStatisticsEChartsSetting.getDimensionRange()); + resp.setItemValues(JSONArray.parseArray(salaryStatisticsEChartsSetting.getItemValues(), String.class)); + resp.setSortNum(salaryStatisticsEChartsSetting.getSortNum()); + resp.setSortType(salaryStatisticsEChartsSetting.getSortType()); + resp.setItemColValue(salaryStatisticsEChartsSetting.getItemColValue()); + resp.setItemSortValue(salaryStatisticsEChartsSetting.getItemSortValue()); + resp.setItemColSortValue(salaryStatisticsEChartsSetting.getItemColSortValue()); + return resp; + } + return resp; + } +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index d1ab36680..c7c115e2d 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -108,14 +108,14 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary @Override public List list() { - Boolean needAuth = getTaxAgentService(user).isNeedAuth((long)user.getUID()); - if(needAuth){ + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + if (needAuth) { Boolean adminEnable = getTaxAgentService(user).isAdminEnable((long) user.getUID()); - if(!adminEnable){ + if (!adminEnable) { return new ArrayList<>(); } } - + return getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().build()); } @@ -325,7 +325,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary allList.addAll(list); allList.addAll(lastList); allList.addAll(sameList); - Set salaryAcctEmployeeIds = allList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toSet()); + List salaryAcctEmployeeIds = allList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // Map> salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(); Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); @@ -400,8 +400,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_SPACING.getValue().equals(dimension.getDimType())) { return buildRationGroupSpacing4Records(dimension, data, salaryAcctResultValueMap); // 定量-单项式分组 - } - else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { + } else if (SalaryStatisticsDimensionTypeEnum.RATION_GROUP_INDIVIDUAL.getValue().equals(dimension.getDimType())) { return buildRationGroupIndividual4Records(dimension, data, salaryAcctResultValueMap); } return new PageInfo<>(); diff --git a/src/com/engine/salary/report/web/SalaryStatisticsEchartsController.java b/src/com/engine/salary/report/web/SalaryStatisticsEchartsController.java new file mode 100644 index 000000000..08bce611e --- /dev/null +++ b/src/com/engine/salary/report/web/SalaryStatisticsEchartsController.java @@ -0,0 +1,78 @@ +package com.engine.salary.report.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.report.entity.dto.SalaryStatisticsEchartsDTO; +import com.engine.salary.report.wrapper.SalaryStatisticsEchartsWrapper; +import com.engine.salary.util.ResponseResult; +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; + +/** + * 薪酬统计图表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryStatisticsEchartsController { + + private SalaryStatisticsEchartsWrapper getSalaryStatisticsEchartsWrapper(User user) { + return ServiceUtil.getService(SalaryStatisticsEchartsWrapper.class, user); + } + /** + * 分析图数据展示范围设置保存 + * + * @param saveParam + * @return + */ + @POST + @Path("/saveRangeSetting") + @Produces(MediaType.APPLICATION_JSON) + public String saveRangeSetting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsEchartsDTO saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsEchartsWrapper(user)::saveRangeSetting, saveParam); + } + + + /** + * 分析图数据展示范围设置删除 + * + * @param reportId + * @return + */ + @GET + @Path("/deleteRangeSetting") + @Produces(MediaType.APPLICATION_JSON) + public String deleteRangeSetting(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "reportId")Long reportId) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsEchartsWrapper(user)::deleteRangeSetting, reportId); + } + + /** + * 分析图数据展示范围设置查询 + * + * @param reportId + * @param chartsType + * @return + */ + @GET + @Path("/queryRangeSetting") + @Produces(MediaType.APPLICATION_JSON) + public String deleteRangeSetting(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "reportId")Long reportId, @QueryParam(value = "chartsType")Integer chartsType) { + User user = HrmUserVarify.getUser(request, response); + SalaryStatisticsEchartsDTO resp = SalaryStatisticsEchartsDTO.builder() + .reportId(reportId) + .chartsType(chartsType) + .build(); + return new ResponseResult(user).run(getSalaryStatisticsEchartsWrapper(user)::queryRangeSetting, resp); + } + +} diff --git a/src/com/engine/salary/report/web/SalaryStatisticsItemController.java b/src/com/engine/salary/report/web/SalaryStatisticsItemController.java index 86258d8f5..81384cffe 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsItemController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsItemController.java @@ -34,7 +34,6 @@ public class SalaryStatisticsItemController { * @param id * @return */ - @GET @Path("/getForm") @Produces(MediaType.APPLICATION_JSON) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEchartsWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEchartsWrapper.java new file mode 100644 index 000000000..a29a26006 --- /dev/null +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEchartsWrapper.java @@ -0,0 +1,51 @@ +package com.engine.salary.report.wrapper; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.report.entity.dto.SalaryStatisticsEchartsDTO; +import com.engine.salary.report.service.SalaryStatisticsEchartsService; +import com.engine.salary.report.service.impl.SalaryStatisticsEchartsServiceImpl; +import weaver.hrm.User; + +/** + * 薪酬统计图表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryStatisticsEchartsWrapper extends Service { + + private SalaryStatisticsEchartsService getSalaryStatisticsEchartsService(User user) { + return ServiceUtil.getService(SalaryStatisticsEchartsServiceImpl.class, user); + } + /** + * 分析图数据展示范围设置保存 + * + * @param saveParam + * @return + */ + public String saveRangeSetting(SalaryStatisticsEchartsDTO saveParam) { + return getSalaryStatisticsEchartsService(user).saveRangeSetting(saveParam); + } + + /** + * 分析图数据展示范围设置删除 + * + * @param reportId + * @return + */ + public String deleteRangeSetting(Long reportId) { + return getSalaryStatisticsEchartsService(user).deleteRangeSetting(reportId); + } + + /** + * 分析图数据展示范围设置查询 + * + * @return + */ + public SalaryStatisticsEchartsDTO queryRangeSetting(SalaryStatisticsEchartsDTO param) { + return getSalaryStatisticsEchartsService(user).queryRangeSetting(param); + } +} diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 7ad03955c..043958a12 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -132,7 +132,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc // 7、查询考勤数据 List attendQuoteDataDTOS = getAttendQuoteDataService(user).getAttendQuoteData(salarySobCycleDTO.getSalaryMonth(), salarySobCycleDTO.getSalarySobId(), employeeIds); // 8、查询薪资核算人员的薪资核算结果 - Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId,Collectors.toList()); List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 薪资回算时回算前的核算结果 (没有回算项) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 08308f804..cc8ff416f 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -182,7 +182,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) { return Collections.emptyList(); } - List salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpIds(salaryAcctEmployeeIds).build()); + List> partition = Lists.partition((List) salaryAcctEmployeeIds, 2000); + List salaryAcctResultPOS = new ArrayList<>(); + partition.forEach(empIds -> { + salaryAcctResultPOS.addAll(getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpIds(empIds).build())); + }); // 解密 encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); return salaryAcctResultPOS; @@ -193,7 +197,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salaryAcctRecordIds) || CollectionUtils.isEmpty(employeeIds)) { return Collections.emptyList(); } - List salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).employeeIds(employeeIds).build()); + List> partition = Lists.partition((List) employeeIds, 2000); + List salaryAcctResultPOS = new ArrayList<>(); + partition.forEach(empIds -> { + salaryAcctResultPOS.addAll(getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).employeeIds(empIds).build())); + }); encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); return salaryAcctResultPOS; } @@ -237,16 +245,16 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryBackItemPOS = Collections.emptyList(); // key:账套中回算薪资项目的薪资项目id value:账套中回算薪资项目所对应的公式内容 Map salaryBackItemFormula = new HashMap<>(); - if(isBackCal){ + if (isBackCal) { salarySobBackItemPOList = getSalarySobBackItemService(user).listBySalarySobId(byId.getSalarySobId()); Set salarySobBackItemIds = SalaryEntityUtil.properties(salarySobBackItemPOList, SalarySobBackItemPO::getSalaryItemId); salaryBackItemPOS = getSalaryItemService(user).listByIds(salarySobBackItemIds); // 查询薪资账套中已发补发的公式内容 List expressFormulas = getSalaryFormulaService(user).listExpressFormula(SalaryEntityUtil.properties(salarySobBackItemPOList, SalarySobBackItemPO::getFormulaId)); Map expressFormulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula); - for(SalarySobBackItemPO salarySobBackItemPO:salarySobBackItemPOList){ + for (SalarySobBackItemPO salarySobBackItemPO : salarySobBackItemPOList) { String exp = Objects.equals(expressFormulaMap.get(salarySobBackItemPO.getFormulaId()), 0) ? "输入" : expressFormulaMap.get(salarySobBackItemPO.getFormulaId()); - salaryBackItemFormula.put(salarySobBackItemPO.getSalaryItemId(),exp); + salaryBackItemFormula.put(salarySobBackItemPO.getSalaryItemId(), exp); } } @@ -299,7 +307,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); // 查询薪资核算结果 - Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId,Collectors.toList()); List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); Map map = new HashMap<>(); @@ -356,7 +364,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); // 查询薪资核算结果 - Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId,Collectors.toList()); List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 查询人员信息 List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); @@ -379,7 +387,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); // 获取回算公式 if (isBackCalc) { - formulaIds.addAll(salarySobBackItemPOList.stream().map(SalarySobBackItemPO :: getFormulaId ).collect(Collectors.toList())); + formulaIds.addAll(salarySobBackItemPOList.stream().map(SalarySobBackItemPO::getFormulaId).collect(Collectors.toList())); } List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); Map expressFormulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula); @@ -437,7 +445,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByRecordIdsAndEmpIdAndTaxAgentId(salaryAcctRecordIds, salaryAcctEmployeePO.getEmployeeId(), salaryAcctEmployeePO.getTaxAgentId()); } // 查询薪资核算人员的薪资核算结果 - Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId,Collectors.toList()); List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 查询薪资核算人员所有合并计税的薪资核算记录所用的账套 Set salarySobIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getSalarySobId); @@ -512,7 +520,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 查询原来的薪资核算结果 List salaryAcctResultPOSOld = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpId(saveParam.getSalaryAcctEmpId()).build()); // 解密 - encryptUtil.decryptList(salaryAcctResultPOSOld,SalaryAcctResultPO.class); + encryptUtil.decryptList(salaryAcctResultPOSOld, SalaryAcctResultPO.class); // 保存参数转换成薪资核算结果po List salaryAcctResultPOS = SalaryAcctResultBO.convert2PO(salaryAcctResultPOSOld, saveParam, salaryAcctEmployeePO, (long) user.getUID()); @@ -615,7 +623,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } // 回算薪资项目 List salarySobBackItems = Collections.emptyList(); - if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)){ + if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)) { salarySobBackItems = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); } // 4、查询当前租户的所有薪资项目 @@ -642,7 +650,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 8、查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); formulaIds.addAll(SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId)); - formulaIds.addAll(SalaryEntityUtil.properties(salarySobBackItems,SalarySobBackItemPO::getFormulaId)); + formulaIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getFormulaId)); List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); // 本次运算的回算薪资项目所涉及的变量 Set issuedFieldIds = new HashSet<>(); @@ -825,7 +833,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return; } // 查询薪资核算结果 - Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployees, SalaryAcctEmployeePO::getId); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployees, SalaryAcctEmployeePO::getId,Collectors.toList()); List salaryAcctResultValues = this.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); Map salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); // 值可以锁定的薪资项目 @@ -860,11 +868,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public List listBySalaryAcctRecordIdsAndSalaryItemIds(Collection salaryAcctRecordIds, Collection salaryItemIds) { - if (CollectionUtils.isEmpty(salaryAcctRecordIds) || CollectionUtils.isEmpty(salaryItemIds) ) { + if (CollectionUtils.isEmpty(salaryAcctRecordIds) || CollectionUtils.isEmpty(salaryItemIds)) { return Collections.emptyList(); } List list = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).salaryItemIds(salaryItemIds).build()); - return encryptUtil.decryptList(list,SalaryAcctResultPO.class); + return encryptUtil.decryptList(list, SalaryAcctResultPO.class); } diff --git a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java index 6b364347c..10349c244 100644 --- a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java @@ -109,7 +109,12 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) { return Collections.emptyList(); } - List excelAcctResultPOS = getExcelAcctResultMapper().listSome(ExcelAcctResultPO.builder().salaryAcctEmpIds(salaryAcctEmployeeIds).build()); + + List excelAcctResultPOS = new ArrayList<>(); + List> partition = Lists.partition((List) salaryAcctEmployeeIds, 2000); + partition.forEach(empIds -> { + excelAcctResultPOS.addAll(getExcelAcctResultMapper().listSome(ExcelAcctResultPO.builder().salaryAcctEmpIds(empIds).build())); + }); return encryptUtil.decryptList(excelAcctResultPOS, ExcelAcctResultPO.class); } @@ -159,7 +164,7 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); // 转换成聚合dto SalarySobItemAggregateBO salarySobItemAggregateBO = new SalarySobItemAggregateBO(salarySobPO, salarySobEmpFieldPOS, - salarySobItemGroupPOS, salarySobItemPOS, expressFormulas, salaryItemPOS,Collections.emptyList(),Collections.emptyList()); + salarySobItemGroupPOS, salarySobItemPOS, expressFormulas, salaryItemPOS, Collections.emptyList(), Collections.emptyList()); SalarySobItemAggregateDTO salarySobItemAggregateDTO = salarySobItemAggregateBO.convert2AggregateDTO(); // 薪资核算人员 @@ -183,7 +188,7 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary excelAcctResultPOS = listBySalaryAcctRecordId(queryParam.getSalaryAcctRecordId()); } else { // 薪资核算人员id - Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId, Collectors.toList()); // 查询薪资核算结果 salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 查询线下导入结果 From 2d609ef49d73f33b2453c81935925023b086492b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 4 May 2023 13:57:55 +0800 Subject: [PATCH 063/245] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsDimensionServiceImpl.java | 30 +++++++++++-------- .../SalaryStatisticsDimensionController.java | 2 +- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java index 7d73ecb46..63dd95d1d 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java @@ -1,6 +1,7 @@ package com.engine.salary.report.service.impl; import com.alibaba.fastjson.JSON; +import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.report.SalaryStatisticsDimensionMapper; @@ -8,8 +9,10 @@ import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstan import com.engine.salary.report.entity.param.SalaryStatisticsDimensionQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; +import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.report.enums.SalaryStatisticsDimensionTypeEnum; import com.engine.salary.report.service.SalaryStatisticsDimensionService; +import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; @@ -20,6 +23,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.beans.BeanUtils; +import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; @@ -34,10 +38,11 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal private SalaryStatisticsDimensionMapper getSalaryStatisticsDimensionMapper() { return MapperProxyFactory.getProxy(SalaryStatisticsDimensionMapper.class); } - -// private SalaryStatisticsReportService salaryStatisticsReportService(User user) { -// return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); -// } + + private SalaryStatisticsReportService salaryStatisticsReportService(User user) { + return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); + } + /** * 初始化默认维度 */ @@ -179,7 +184,7 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal .setting(setting) .remark(saveParam.getRemark()) .createTime(now) - .creator((long)user.getUID()) + .creator((long) user.getUID()) .updateTime(now) .deleteType(0) .tenantKey("") @@ -202,12 +207,12 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal } // 被薪酬报表引用 -// List salaryStatisticsReports = salaryStatisticsReportService(user).listAll(); -// if (CollectionUtils.isNotEmpty(salaryStatisticsReports)) { -// list = list.stream() -// .filter(dim -> salaryStatisticsReports.stream().noneMatch(rp -> StringUtils.isNotEmpty(rp.getDimension()) && Arrays.asList(rp.getDimension().split(",")).contains(dim.getId().toString()))) -// .collect(Collectors.toList()); -// } + List salaryStatisticsReports = salaryStatisticsReportService(user).listAll(); + if (CollectionUtils.isNotEmpty(salaryStatisticsReports)) { + list = list.stream() + .filter(dim -> salaryStatisticsReports.stream().noneMatch(rp -> StringUtils.isNotEmpty(rp.getDimension()) && Arrays.asList(rp.getDimension().split(",")).contains(dim.getId().toString()))) + .collect(Collectors.toList()); + } int success = list.size(); if (success > 0) { @@ -228,7 +233,8 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal } } else if (total == 1 && success < 1) { resultMsg = SalaryI18nUtil.getI18nLabel(176149, "被薪资统计报表引用的不能删除"); - resultType = "info"; + throw new SalaryRunTimeException(resultMsg); +// resultType = "info"; } resultMap.put("type", resultType); resultMap.put("msg", resultMsg); diff --git a/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java b/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java index cd62346f7..df2d61b3e 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java @@ -86,7 +86,7 @@ public class SalaryStatisticsDimensionController { @Produces(MediaType.APPLICATION_JSON) public String delete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody Collection ids) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult, String>(user).run(getSalaryStatisticsDimensionWrapper(user)::delete, ids); + return new ResponseResult, Map>(user).run(getSalaryStatisticsDimensionWrapper(user)::delete, ids); } /** From 85bf7e003683c34397a0427f4f7cf797bc0dc6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 4 May 2023 14:36:49 +0800 Subject: [PATCH 064/245] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=88=A0?= =?UTF-8?q?=E9=99=A4null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../po/SalaryStatisticsEChartsSettingPO.java | 4 ++ .../SalaryStatisticsReportServiceImpl.java | 45 ++++++++++++++----- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java index d41e84287..0ffb3d7e8 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java @@ -5,6 +5,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.Collection; import java.util.Date; /** @@ -73,4 +74,7 @@ public class SalaryStatisticsEChartsSettingPO { * 租户ID */ private String tenantKey; + + + private Collection ids; } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index c7c115e2d..813b57ef7 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -217,16 +217,41 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary po.setSalaryStartMonth(param.getSalaryStartMonth()); po.setSalaryEndMonth(param.getSalaryEndMonth()); - po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); - po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); - po.setSubCompanySetting(JSON.toJSONString(param.getSubCompany())); - po.setDepartSetting(JSON.toJSONString(param.getDepartment())); - po.setGradeSetting(JSON.toJSONString(param.getGrade())); - po.setPositionSetting(JSON.toJSONString(param.getPosition())); - po.setStatusSetting(JSON.toJSONString(param.getStatus())); - po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); - po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); - po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); + if (param.getTaxAgent() != null) { + po.setTaxAgentSetting(JSON.toJSONString(param.getTaxAgent())); + } + if (param.getIncomeCategory() != null) { + po.setIncomeCategorySetting(JSON.toJSONString(param.getIncomeCategory())); + } + if (param.getSubCompany() != null) { + po.setSubCompanySetting(JSON.toJSONString(param.getSubCompany())); + } + if (param.getDepartment() != null) { + po.setDepartSetting(JSON.toJSONString(param.getDepartment())); + } + if (param.getGrade() != null) { + po.setGradeSetting(JSON.toJSONString(param.getGrade())); + } + + if (param.getPosition() != null) { + po.setPositionSetting(JSON.toJSONString(param.getPosition())); + } + + if (param.getStatus() != null) { + po.setStatusSetting(JSON.toJSONString(param.getStatus())); + } + + if (param.getEmployee() != null) { + po.setEmployeeSetting(JSON.toJSONString(param.getEmployee())); + } + + if (param.getHiredate() != null) { + po.setHiredateSetting(JSON.toJSONString(param.getHiredate())); + } + if (param.getLeavedate() != null) { + po.setLeavedateSetting(JSON.toJSONString(param.getLeavedate())); + } + getSalaryStatisticsReportMapper().updateIgnoreNull(po); // 获取自定义统计项目 From 59b64b48ae0f7da19b3a33e5c992bc119cc041e2 Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 4 May 2023 16:14:00 +0800 Subject: [PATCH 065/245] =?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=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=97=A5=E6=9C=9F=E6=A0=BC=E5=BC=8F=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 25 ++++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index fedf06e52..c269dae1a 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -647,10 +647,10 @@ public class SIArchivesBiz { InsuranceArchivesOtherSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesOtherSaveParam.class); SalaryAssert.notNull("员工id为空", param, param.getEmployeeId()); - if (param.getOtherStartTime() != null && !SalaryDateUtil.checkYearMonth(param.getOtherStartTime())) { + if (StringUtils.isNotBlank(param.getOtherStartTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherStartTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542532, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } - if (param.getOtherEndTime() != null && !SalaryDateUtil.checkYearMonth(param.getOtherEndTime())) { + if (StringUtils.isNotBlank(param.getOtherEndTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherEndTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542533, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } @@ -665,11 +665,11 @@ public class SIArchivesBiz { InsuranceArchivesOtherSchemePO.builder() .id(oldOtherInfo.getId()) .otherSchemeId(param.getOtherSchemeId()) - .otherStartTime(param.getOtherStartTime()) + .otherStartTime(StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) .underTake(param.getUnderTake()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .welfareType(paramReq.getWelfareType().getValue()) - .otherEndTime(param.getOtherEndTime()) + .otherEndTime(StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) .employeeId(param.getEmployeeId()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .updateTime(new Date()) @@ -705,10 +705,10 @@ public class SIArchivesBiz { InsuranceArchivesFundSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesFundSaveParam.class); SalaryAssert.notNull("员工id为空", param, param.getEmployeeId()); - if (param.getFundStartTime() != null && !SalaryDateUtil.checkYearMonth(param.getFundStartTime())) { + if (StringUtils.isNotBlank(param.getFundStartTime()) && !SalaryDateUtil.checkYearMonth(param.getFundStartTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542530, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } - if (param.getFundEndTime() != null && !SalaryDateUtil.checkYearMonth(param.getFundEndTime())) { + if (StringUtils.isNotBlank(param.getFundEndTime()) && !SalaryDateUtil.checkYearMonth(param.getFundEndTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542531, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } @@ -723,8 +723,8 @@ public class SIArchivesBiz { .id(oldFundInfo.getId()) .fundSchemeId(param.getFundSchemeId()) .fundAccount(param.getFundAccount()) - .fundEndTime(param.getFundEndTime()) - .fundStartTime(param.getFundStartTime()) + .fundEndTime(StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) + .fundStartTime(StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) .fundPaymentBaseString(paramReq.getPaymentForm()) .supplementFundAccount(param.getSupplementFundAccount()) .creator(employeeId) @@ -768,11 +768,10 @@ public class SIArchivesBiz { InsuranceArchivesSocialSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesSocialSaveParam.class); SalaryAssert.notNull("员工id为空", param, param.getEmployeeId()); - boolean c = SalaryDateUtil.checkYearMonth(param.getSocialStartTime()); - if (param.getSocialStartTime() != null && !SalaryDateUtil.checkYearMonth(param.getSocialStartTime())) { + if (StringUtils.isNotBlank(param.getSocialStartTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialStartTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542528, "社保起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } - if (param.getSocialEndTime() != null && !SalaryDateUtil.checkYearMonth(param.getSocialEndTime())) { + if (StringUtils.isNotBlank(param.getSocialEndTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialEndTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542529, "社保最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } @@ -796,8 +795,8 @@ public class SIArchivesBiz { .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .socialPaymentBaseString(paramReq.getPaymentForm()) .socialSchemeId(param.getSocialSchemeId()) - .socialEndTime(param.getSocialEndTime()) - .socialStartTime(param.getSocialStartTime()) + .socialEndTime(StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) + .socialStartTime(StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) .creator(employeeId) .nonPayment(param.getNonPayment()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) From 3e8ac01049349921ac8fe35c7389fdbbec2fb900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 4 May 2023 18:07:35 +0800 Subject: [PATCH 066/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/config/MyBatis.xml | 42 + resource/WEB-INF/lib/QLExpress-3.2.0.jar | Bin 0 -> 239182 bytes resource/WEB-INF/lib/pagehelper-5.0.0.jar | Bin 0 -> 64807 bytes resource/WEB-INF/prop/hrmSalary.properties | 5 + src/com/engine/salary/constant/des.json | 2127 +++++++++++++++++ .../engine/salary/formlua/core/QlExpress.java | 63 +- .../salary/formlua/core/QlExpressTest.java | 27 + .../service/impl/FormulaRunServiceImpl.java | 3 +- .../salary/web/SalaryFormulaController.java | 14 +- 9 files changed, 2221 insertions(+), 60 deletions(-) create mode 100644 resource/WEB-INF/config/MyBatis.xml create mode 100644 resource/WEB-INF/lib/QLExpress-3.2.0.jar create mode 100644 resource/WEB-INF/lib/pagehelper-5.0.0.jar create mode 100644 resource/WEB-INF/prop/hrmSalary.properties create mode 100644 src/com/engine/salary/constant/des.json create mode 100644 src/com/engine/salary/formlua/core/QlExpressTest.java diff --git a/resource/WEB-INF/config/MyBatis.xml b/resource/WEB-INF/config/MyBatis.xml new file mode 100644 index 000000000..31cc6f0dd --- /dev/null +++ b/resource/WEB-INF/config/MyBatis.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resource/WEB-INF/lib/QLExpress-3.2.0.jar b/resource/WEB-INF/lib/QLExpress-3.2.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..52f48b28979e94c7f852d64d475e6d32bc752377 GIT binary patch literal 239182 zcmbrk1CVCTvM${2Y1_7K&$MmZwr$(CZQHhOcTd~=XY1Uv&mZ5uH|||gYrPe*GHc~q zne|knWF>$>AOZe%&4&_8{=M_h2gILWDIvvQG-A@ibh7^>`vEZbhYY&q;M4lg>!3e3 z@_#3j`XwzUETo`FD9HQj4B(Q!V^RRWSEjeKte4K_9 zH_Opi@8;K_lrreUrAejsz8GEf&2LKiMyNBtC9~nr|>)*T=6_> z8sp(!Ujbg~)A)v*Gl#oc=q~kg;az(z{>YY8a7#ll-$~EvQ*+D~B*Gz!d*hH)N)`$c zND{B&m7w8+4^K-jBb5!{LRz{$S8#sX_pW?~koLMy-Sx)IB=5Imx~ixtXlNFXG345l zEaEsFJyb2O3%f6@kTJ;aep}fC7uL84!M-zPGmuy<{njuk&~tpb!`GQgs0y>xVRe|2 zRFQ^+pJGf2a_+Y@89Po@ZB>xSOrWQ#OP1roxjK1w(y+)y%Jl7xwZY0b=(Th!) zY>W%#b`PP_VL7q4j2>ib1Wi^Mz4vuow(4--0`f6!E3G`iZ4dfqZh(DLx7y9^H0J_LoJX#wJh(dezC1s{ zb_t%S6YE$a5Sx{36;0DjGgcYuCS)Uoh}-z!<){aCm7XbpJ^JW(AOhI;elhNT2_|}f zWAeRyeU(hnlS#`EB8-50Qlq1~k9^R$c;QBFdLxeMKBV@E4x07LCM^=AyFxtvhN5Kl z&}MhudATBv>&|$x>-f$M)%GR?PP=46&RX_ucj{j$G<-J1hb2A83x$21U0Kf)8Rl3k z@lt1wC&FN|JQR0obs^Sofn5%ZX?;_gNWi3JA>F0IZ?0`P2xNUIg##yeZ3AzQhtS*iz1N zcDiViJY`*{m)CriaHyVET{T~o19+D-nSyDPu#EZ@2@;R-@JRCxr?T+SiysZSz3Uz$ z2+B-CMJ2SMoQpauZywgXN&G~v-^C#cxj}f@A*%8Si^4dHIjq4g2!V^GUK)+TYH$?O z&OT~$;FFt3czKl8?x~tS-&z@hjm6~tzrf}n#?+8KHD37#HF$sl0Eqw6m@F;jjU1dT z|7A<@6Vg}=$iY4))`t4=vB8ar$owh}v|DM@r`p?3G0}JVSSjKhr7>_ePhk$`d91rf+QbdB&}QL*LxGMdM$3 zGbe_-Ysi!2jmT@hv7>(YNj$zdl%L_HL?KXu7c-N8%{k6gMC5i$6K96`8?q|KFx|o+ zAfiC5!tX_P6*7{DggF4sf&vkE8r#_&mU{<3tcmF9_SMR$`X$-kbU%m^f|X=K%%8386Ybd=S_?2dRZQQO~If9CSb9=&+$^n zp`PEfb&ct@K|fZqnII5T!CtsryT#Kq{1J9R`yBkXrAv)%vzIRGS!%IUcxl2}r3bwWebfb%njGP^m}Mb)oa`lRoaHq?7t*d9{N9 z0I>e&Nf-KuC-!Ht**Mu77)jdb85-ID1Hh9Mr5vz?;Jt_>FpavRQ7G*5L7)kA4JDqy zMm*R0;He-PMqyv5Lg5C?d7N3*ep6PU98tnz+xudZTVuD{`5Ux~QeaQQl)vDJjc2|9 zE9RQ0gdg0c`wu)#K3sS&d^#I@`@Af$`r0X?U=OH8Lx3V=D%}uj$2X)Pxe7(sP^Jzh zGM^xK2Af5%Ah`wd)+ZWfe&y@SbjzvPsV) zW9#gPr{T2l&+D;V*Y8%VfOHY7Q9l$*!Vzduc3erkh-Nz1V!?twFd8T`W23G*OG_qY zy{I;2ZiLd;vQgKjP^AqGUT}nwbADjilV*5OXTI=-7HGR;`BczqaP$z+c+gzfPQ~25 z&ToYM?9{%mfP@H3WfdU(DJhcCbRiY94dky4B<~J}Y`!Po1d@;d!_Sx!UVg0Fu?Oft|)*GAG z@L@A$J$s++r7vQr&X7@O!M+yt>^D}2UYY73;z)fsil*ExE+zJL#R~u)W1))~?$RK= z>-Dq>7n_f_t;PFSN{dVPyPk>1``1>r0 z@-0L%dTKuZ2t<6y-sCqA9rW1N9i2)I#DD=hgh3h)J|B+!8Se5=jknk8QjPXsKBo98 z)WO+(t=ctE9#MJ^d|B&TL5cUUF@hvwhyxzW<`^B!my+rs8E zVtHE`nL^bmW=cYJdV+_c!X9bJ9z*u%*+O+CNjr)c z#d^Xo3-8cruuIDN6wM0PM-km;)sB&8L`F5omP-zM3vpsi4HNsMPbOV|e+9%A1fepj zttagi>$`t|4VPK&!Y7sKh8`203WQ}p8xhxq6FFANw?;Gb3V`J#aI%TvtzA0K%9f~c zcz~6Zoe`kBqRz-2Or+*6-8arq-i_*^%jr+d!Ip?ca~~Pb-lK_Q2ZgYYF^n?|=NZ`r z=aS1k&OiItJiPGz`&!o(@O;V#1pp|40sx@;tF`WCt!HIsAggDuXXT*uCsg~#0&h~f zwoy<*_qO)f*w}Wib+XXYPfO7G%}SoZ?vx?0`oggGqNg|dbIrlsC5Or1OO5r1Sco_u6CI z<1>fq03e;dv_A-zZG5iGUiD23lxaROrr_5oHd}2!8AtudRm1j6p9s?HO)A2g4KR3t%}ra%-Kg@nWaBbF z+o3FgGX`(Rjg?Gwc(mS?W6z0Uzp6 zf<}iwdg3_qrAQ*G%Jcd-I_M(egT=wfpc?)Lj2L&wwhpkV=t z&y)A{YAqfZPdc*8>;6-se~T94hza5@AFc!C@^+u4bNcOGpYE+|7G44VnGkR*0&tL+ z+O4#kl;C4lQsT!K-I8S&Qz>c_d(>B{8Sz3uRldpwxYN1@_BrHCdN+;Q)~sZg0uu|W z;}mdoZK-K>FI<{W;y%R8I%EO|75T+Lzc>XRGTPNeLsH%iwUxy-Pf{LSp(%|#^P$)U zI4BSe&dKkhy!Z*N20}ZC8GXE_kI?oPBcsZEFbWRx24ar4ws70zz~(E)!U$x`AGVI_ z;%LWq52&!ZyyYAnw;-s!w6q(`{J|mZe1)hSu0Y*3x?F%ZT3!R_mqe$g=ruhcugv4! zAqFWkZW!Y%d99Et5tcU2FF5*6VD}Y9;oc+Un@$Cu3L@C^ZCnXUcR|5+cB0bETtmNl znC2>9vdHXO`>ri9gHAx|y^n}tk(0MkQ+6nxHHIs+yp5oZ`1E1FH8vZsE1gAtPnGM? zv}zuyd`>gnIEYj|SGe%x6b#ceBQ7M0DE7a;Za$EQM#)W}DgdKWIgE;Ote}(p?{8QAq1yOxJU19!@bV?r~z?K&|vJ@+7E+ zX*7~D+NHL+qC(vg`%jLjnAQ;|IX}s240vYolX)#NN=!m#7vrhU>$}HOn^AbJQBw#O zI)82Duc!+zgvgv}s9uebm6jY5&le0L2Kpa$BJEE3*PtlNL0BN1E6ZC4pRfW!9=})* z5Pb&a{)TPtE6A1mmEdneY%PX3qQnniPW2TyaBR%&FBYbqQFZPSy(-|E9ZxQk@B*^_ zbIWzZUxB(7JrOiaUTp#81 ze1PqGaZm07u`Zws#SNiGSfO%JY>wfFNulPHl9#ns=&J~&;XErUx~^o0zgO}p-TFEy z2}M16LxNLyCikBJop3i;VLbV*JyEZ$(OE%+b^rkjt=xJJ+`>V37*KZXe1DyfWcYBS zjxNGp+xRre(OM~j)*q1#vjtmYP1k8ZZX`Q&lID)%Xl!sL3Z-+sC+Sx;s=RW&YzyD^ zW&eCzb&i<~pJN6^l+OLI(Wt~MRzVZ3)`&jZK~x>`keWMe8LTtD6yYb>UdgwRyd6Q+BghlFz70k81`~Y->8mdDo za_ekN^IF|y@Y=F%DBYn2XGLn(R!lyR>BZ$)D~9HJfq zsG2pjgrcmd1Q``+m4)FDNxug{KU`zJ?H6u8ArUgV9yLNAy>t>S!hn&!YX~|i`E{Y8 zDlDTD#_$;y27RPNdTOKNSTE`Vv1yjIgs8zh?sm@;ReT6t?D%)&szd1-GekX-r3nz% z^pl2PRc%$AYqVcZd#hNQxq80YuXT8--2iK`Ean;t%?du(<0joAEKgvzfnANp44I_F ztP3YfqON=7gai!X0IjWQ;v<&5emr6S!S`Qxarjho__yA%Ktt47fQ(4~mBRkSZ@;RA z{40e5{?<{Lyu-k6AQ*Kg4xNXyCqg_dFoiF|GYryKo&iWpz^627#W_}wQ}T_w+=U3P zKasw1X7%vDU)w{9007i~ z;p_b~pcD98w)MY9b4AK(4oE7fU+U&g6H){pg>?1*FE7X@B>I5-b zt*5#64fHeo^0ylsRf6{5bSc$eGz&$#+pG=sP!D6tejoz`gP(9X$X+)5Z$42oCX zroc#A2(}1wk|6hBQkLRp)Uh{qs8P0enkhe=d@Z+FHg6-EIywI_nQz`&{9EjF2Ok1L z3uW3fE^w>DfyTYsNai|+J5{|WrNeL|^>N{{wxs$H4JDmh^jgSbowc)F;@8`BCtL~K z>{tNcut@-89Q9X>*s7##dGwUIjCM7nx=bw1QCG#G$gza+QUi8Id#F*06e3!+8!eQD z$Nh8k`;zeZa-|wl5<|9lW7arHcu|95lBu&0|Bm{0s#rvaRiBYHt-J7=+ zj^o#GwL5#zg$%p#cO}hZj{UUQn?=0Po$|7^$=4)rt*N6ijFmJb{CRmQPNx>bXmz01 zujz!_*wtbKva2OKP@g$F=$Ui&AQQFO!f4Qsq=e4sp1o^M?EyZ=&S;-=(LERxn{!tv zn+sR)Yw=LlGy|dfmn-OCl$YAart`uKx2$ls(6*|Q@A6?n)24!66G0wn<0>8 zB6~Q4zCw!D^)y@|tgz5FSZ-uuHK_S%F|KG8Oid+NAez|=#>|;5Sm>e1fCWKQC(uRX zT60_8&D%}gF+RzF=WXpVHQkyWIVm!A#mR>SYD}?7-&KYdt3HvO5U$9Oa#f^WB7-is z8?`MTv5Gq?Z+cT%X)WXx%b}uqZlRp`xOG`gJryhBllHSWn@rb470YSs>J2xxdD}oy zZBE4a;fCh?AhzSO?To1a{&9;YJD>K={|0A5usI`lUnHmQvIjW*mae=S1nxx#=}aVs z$NfW8fy@)9$Vv55%A|hpate$;!paAd#!srdCQGWKnGOcS(5ox>7xy3zhtJNyBx4Xy zW3kKGcWfGzElpON-_6S|Tqrax>{lplUGfMA6H}ci@VJUA1Cjz(=v4yKo_3pGb)IOk zO7e^m=Imj;Dis8#`Hs1OxvNeiTe_^x7uFU;6B{P)m#|`c_k#mx9&@c3d3x>@*aH}A zjE;yQ`8fF-+i5nws)h{=E#n#EvFnVro_+r0$?F~{P!&GdEkZF;Yt_fwxq$y0AZj~~ zhaDTN0XSsgA#|T>+6-e8ia(QxY7KlUsQ(*g)eZ?gP(5XyNAwqNUjcDZ|B^QM@EVZQ z`whDZMrJS4;`k!=P{JmfULqO&U|PQ_$K?pUBA_nTi-py0&EAYR6}c;t%$x(dOpB<^ zFs5E$v2|d3fcHUZ55J0CsYTdayCSx-o#1}@x5!729OoD4tpa7Xnm)YS5Xj&Wxz{MN zOUo!OQJbey(`YqQI{&Lu8N7%LHK|X?iy(Wn)ex9Flv@0Hij=}CAHuY({D@DW>NIs30cq#k`FJPBsl z3fJwE6Ohp%CO4F!jZ39w;ktmt1mdGbMv9j(#I%`6#nG=&S19xBau3KAHz0}#76xqu znl~O4B3!P}5nAQif*@t}LBnPO<Q8tvzUYZtsCZ8XUjW<`M4kAO>>s(9I?0D(V%d}f3+x1ADuu;0Z+7za zIdOM0;&++7D+dgFOZ!h~zaSMN3Dw!Z3-(hlSjkK{#WEC*|A%RcP42!0(exTWfkBhc;;k zj>IHjup*e6J6BlsL&5-1c=ly?M=&WxV5qEUna}h1g}oNZ-42>L`q|MEqi4j}oQ>km z>s15v)UYthKfgo51Jep2t26|}G862d8xJ5A%JyqFBux;T&A}=cQ$XLCU-Tgs@XfjP zFz${7io595j}8%}DI&PQ6+jGIn`?`z;Rk+2a2v>9tZP73r>d+Osv!>6w^JKcRwlQ3 zmC#jA)+8GgG@vYG)2Un1rJ6`lQwn%>sbGHbQUL)&1w1(}+yJ2a+3>*)|oi6A#Mwt08+z2 zI-R!z<#OWwu`gmV%Mixq=m`t%D7jZ2{MbSZ!f!&0=#^|nS+X$^gI=&09ZTN=!&;Pe%m9=3I+9u2w0LFkh*?lzY%eQNNZv)8f5c^6VjR#;s5$E^ zOAvL}gg&(jmCd!13q(q5eEWIgaKP=vX~KnA2DqSBZ7dJzqRs10gSQA1alRpi_nR2Y zTRyFsxZ9U5IO>76ScJuqw4aH%jU{MaksPeZK$y^AzDlW~PbImj1Q9|(ixA71fR_nv zhQP~cd(TZuOC60RhVp$WHs>G{!~JUPj2^B&^X}nsa6#T!jCX{Cna)Drlr_tqR0jfv zE5iLH;?4f&AOzQ=uMq}yfUT>K9{}2}9!^j0&QuO4$;Uwg0L*jgQdglTjwq-bjVVc2 zPKC(c9xZ%%hOaVPQ2ZB!EA4=WiVsG2#JMS!8E9u=QsG1$GSv%OKiQbt8TK$MH$dr{ zvvxn}Oi4+A$6YuMH%SrY#rXwoUy6{~C$S(z{Y}gXE%_0G?hpF{IxY1;|;vwp{iQVttBXog>ghHAUH!8uboV zn>VhXvCW}-((}5|IdY@|)nn70H-~$oSA`kDOM~DIn>47kNMKwy_{G^Vn9;rZ_*`)2 z6i)S&{S&;iybaum#GV@*f}fV0-)V;;#|}yNLbSv>yBpxur0Lv#*O|?e_>PxjIU(kr zaS<^Up;}q8d8`D4$>rMBx!k=UYJelHH+tF1l<(#F=gLy`+?rA=b3wYz5QlN zzr7^0dreqyKiP2SxRh{(v~gd%hH0uvl^}d|j>#forj`_b{`&CFwp8#wjn1^d^NB`e zjgGb&XBBT1eR+W{M@yb+b~7qC@m$oxV?jr^Z8QUS3jw)HqNvm}x4E{X*5C?r!gRLE z9(0E>v5ilF!4y!yF;Zre-iL*m+NP}O*rGKt?-3@P5P~3KJM!J{2)v<|HNU7(eQ;9h z7F+bFeg2pd3rmtxC_PId;>&mqyIG+38&=C>U=5@3)Y%rCBEF*DGtzkFtKO&PsriLr z#`Sro8_t>bPD`8`a$pG);5azI4pzi0BlPT38;1yyR1o+5KT=?( zv0+k+e@>ye{;75_{^tl--pI{8xRz*0i~)>3UH2(-!5QdAe0 zc$KVG(jXXuD^$;r2NmpltE0A1O}`wT`jbck*AWycb{dW@C^&#FU}B$U@0HM(5b<;v z_UZNUt>Jxzb6j+=0YVfdc5>&6;{8mtDSbde8*%69GdRqX32qDO@R)VSFO9XLg^p@#<)8?|>q z2hmg!L5t_`=+P?%N=~4Q3XZ^-sA9#$7IPY2s2d78NZw}3QC<~dnB0Uoa$&lXA&Ryd z6YENjU=!iOJ(N8EA~Np~&MB6`41kzm%)||j53Q0CMHv`No=tqJMh!JpW~V>oEJnFn zt3X%{e`pjjn092`Ji4V2aG?Mu>R89odn<7wI!Zx4)E{HGw!;;44n-VO~DP1kjuaVtP?4_ceovk@|U0*I4AbQ z0jAS~)SJHE4QLTqbX49zhO+>QWD3p4J??CS(lG{3^z-i}dF7QzOs+4>wajnp&yAU7 z6BFf>9-WS~&DPJ?br~J&>PgFwo3r)Fswj&H7i-U^w%T1Zaw1;t2yZZ_&kQ`anxf@u zpSq`8{dEJYz2oEg%tk^{IaS`q0b}-rW(lmS>d7jf)|->xYT}J=_fd~B$80CY3uV`y zpK{8a!O`E0*=6L;I=};U0VCSUI&b_K>363-F)JM+G zndg)j$~M;%53~%x(LoyBvBvviCc+<^^LwSq3#kM(+RaBq9vEerblX>qeC$gHdWxD+*O)a3KhwNh5b&vc)C?^)EmnOmR7Jn)o-Zav}nbB zE8cSmuTc*O0*5T-W3dzqvy~IwIouFHXuS>jM#O9*|JcVf`zAEU-q~y!^=)FZZk5O3 zBtLm0;ghR1#r!RerPBajm_7H(!j&IGS}uTJ+9_F1(v=PWPZ5Lm53yXCN1I*{j&|FLz-6Ll{I z;{X60s{e1}>i@o9PH8}RDlRSYolHw^8{Q%6_WvY>|A`8r1_;XFJB|n<21NP;Ob{m? zJd&8n&KRf<1#B$O6rxYQkmO%VxVXt&=!G zbR!1ue%tGL%j4?%Yo_fa+v9pdLWkQ89)L7Lf>94^yEg^v)jk2-W>^Ecb4dWMg~GK1 z9C>pXZi7cQYNK@$$FnVg&V|CY1>FAO(&Ob02DIl4kZyYd?wP{12i)@ofRDR$w}m^l zBxNgaR~im_z~+9y1=({HnCL+tj_M^8Ji1To+B1@Ydpd<|vsIm|`2oSRubf9J7R@zVBy36l514~gTI2ejwf4`VfN z*8!IuqNVNDt-EJ;7;WnXk<4dz7>}_wh35sbdprg2_P`?YV`MWW$Cjvu>P4ZuCvP_c zS9Q>mroRRGBMsdAH4oKi8pS(rmyV|vdFObd2Kl22{QQ>9^R)`gX9UQ5hHz(ZLa*93 zP~p1$mWQqT+E4x?0Q@`DXP?c-`2hUmPQd#`0@XXv$4JxXes|{C@m{@WidqmzNPH@4cSJoXzSKa%Ly zh=mSa@d?3hjPUtj_tCUlMvIIGbQM^ zI{1TOo=7;%;Ds?=Jc7X!qaxG}*RB%%8Z`*o1qcYg6pEjKhOvYKKFVAUL`1|3 z^UmJ4pKc1i;Y&k=is|CUGkNQEKgpY!XBW!}$oo#?MRWb+Td@hq(5p1Cq6d#bh+wMv z(D{w&+u8G3KnfJ`bu28xOy^F45aG?NLO}=eIB8fz^a!A5u`HrMGsY``X%^*;wQQxx z;Vq(OHxv?frcc8w!#S0`y%V$tO-s4kiq6RD7DX)*j2k&ReB{;m-DtE5dn1c&bLArN zBkO21%XTUZ2`I0av=`0iY%L0ZRWO>Tth(gRS2Ksnr32^nVpgkKYSfXyhnfGWE(u$W z4Wm}6(@8#p1!^>k;-f|@j$Gi`Xz-=#R&#I4caN5`(9Ql_i6R~)(fCPzndb)lq3^9r z6cISUz*M7$(-b3{DD9<|ObiXx*l3z3JRiw?YfjV5x@r1!7>Fx4b>2-lHYJnHMOVr~ zGAJ#jQQ3qmHf6ypaw3(16$*-4#VKPEs_`xxQAVSNH3t->v={snNvXWvhp9k?hNiZW zL?doFZ3!`Ss8KX@3Z>76;U%8j) zR7K-xd@rT&VN#a{W+=$(+Nk63GFU+ubm_YClOu6^F4UFbqtpfPpPcz|{HdZcLa`%J zt%*@=K`H_?r~z4=3TBAD#n-I3=r2r98=VFs>#J6D$I^*eo|S|XS3(_7`0xyymv z+vN55-Nuge$_Zu~s&f0Qr6TRO8 zg>Bt(+6rd;pgay81qmo3zgdj<)j3#Kv9VN+Ffb3y(E3|Hcldch7^X=4>wJjANQBN&wg8Lfay%F2qvQ9XnUxEVqVEVd1rtuluPIKv*D8; zCu^xU_!iI0b^ELEq0b4EhGpw7h~AkucXk*1nZj3-=wyJYQ!dfAE%hn(fDn$KGSXU2 zDVCem(b)1&@{xDFlBP*m+=SIf-?vd@1PfG|2i^Hq<7hX%oe0RPBU`hK;{x=sV252z zmDXWKydxvICq`8pIm`Nz%-XW6IjG$A*Y`QN0bi9}u-E+9AwS)0eF=rdha!`p6{e$m zDs1i5)rk?Ksee?F`kY(Qu9=T&hyjYl#X^t8@2#z(5vdugnZN%iL{KXcS_a2zWF9H(?tXzZ zU?kIJE|n11{>Ga3z>z#FIDOVV7ZB+Qr*+4G^}0Cqv1Km=EgS)JXZY%7zEOG`yEX6( z=4YqfdSNg-Zp^@ZClY~KG_T+wGn^EKFrDzPYidaM_amvn`^@*W#uz%_S8JZF5a-75w^RcLyrg+X=45Lly}T%oN&y>;U#f6j zzl2DQ$+t()tA&O@oo+)jGdj#X5C=koup2^FX)L}krIt+(!zZ6&RTtEC{s>wO=FNB4 zv8BNBmz*^f-$rRoMDjuo1J&l&cOTE1{&c*9Mir`+RrsHpfIpv-VA!Tag0|RBX-ic7 z0zov^@7qano79#=qWYq^E^IrBmuqYNy@CEsmMytfx`? z<5qzv`$&M}MpXk1E_uxC=SXP;h3o+Re?%VvLv!4BwCV9+$BBKy3z{99WwM2I;EpI> z)VLCcnoCujm{$Z4OsxtyTIKH2uhZc3814heQ>OUS1m1Rmt6+1>2T`DsZ(#?mr?wJ` zqsSG9+Jmah0?9)fFM&V47^?3u3$kDtN%6YJ)yHRP>wq}hRbU`^4TgmsvOaveFXwEs zV=Ax{z>vfgs*mZP2=!0dBeCIzv&zomUiiOdGEa*ZVZLo~m`Kthn$KI4!<60qG;?An zgmaw4u~ZW>Pl-OcF;lgO zl&xd4=G!I4**+nkXT6)b%a3j{2rkal5U{l2hwlK_yU+%ms+001NWMnBPW!r z5O77;Sh^j5a8p_0L>4}HEs1D_Ae>r-pb%X$e!X@o4Mf^#l|105IJ)!4NsminT0Ws5 z5k0p4z{VIJrB&b<0?Dg)1hS?O4JB9X?A*1Il^9J$R}g0c?2K&}g3XjN%F7_<^sTgM zMpk;IOaQz=CRKmP9(|GzY;A%Jy+%LT090)$Bo(~&hThT^Qx7G7gWihhRS|S#8`Sfd`h`=x}1&^Y1DX@-1`x^@VUCK@LX%Ryl-(ed%i3xm%ncx z17H8=MB%`XE}_xw!(C>2^5XCQ9KEH=0ChmkWW@`ugh1BDPa3Z7LH( zQ3`~WhyxZ?Qe1dJWpV8$L@m>=W7ir=bH(O*R}Y-)lF2lbHRR2grv62KYKM@!FRxh~ z%A}}Com_sy?5Tn{Jx1%W{TL9Tm5agK7iLO;M%;g)i4xxr(( z1Ww3OaR}63*cd~he!uc`eE&9xY8tnv-nHNLb!Ai8te7*cb?2;IGe4Bq?9rc|w(1nTFJ;m3!+^_v+JfB{Pt&x+pHAu`L&R$) zeIU!=_XL@l5US=}!tP>B>f4=K+-;tkK|$MXwn@~DIucbz;yR+(5sfEKm&wPcB4~MVc|6wvFy}XEwCrQiGyXWkXZx*N#7er!=QyFA zG9%;BWQn*&4GWFBRz=k^p?YY~>^(?9*mag=Ph38}Dv8QgYVG5LO0Cw6^UDC+XX7aQ zk(e(|GEg(?+07_Pj8teCE!C>E|KcHkdyu?JBn@Tw^XqMt<7E4eN17PHk&k)KvUkYU zYJYWGGbj#CRapk27Mz3!B7O5n*!V~LZLl{}*6J(gct?nqX5B4;-FWk6W)onz>a@)f zAW})MbH~KkKp?e}cfe?YnO_yKo#;p+hLsiy3-?rL_OsQ4UI85NO#ItW(#d35x{`{B zb$~2rx;&qCBvk}hHQD++awN^d^Jc%7?W>j@oy@jo#`cu8!aVG@m6vIqik;a{agUPO z0-J?XkJ>&*mrVDd)%WQt#3lV_E0}w9b|}}cieb*{`N;WDIK>@i zRo2+Cb8Y;m!iV;;OuPBtf7jdbP)!xm1Q3gpka{S*$}I$Le`iYMU81%XEek-eEV;>q z80cat0{8wo6MY0(bhnpbONYNHVg{J>(1C{=dj=l$-V*r^yDE0nO|!6*ww!n`|Lf7jNoV^N%s}hZz&;H|Om-*78dCB0HL4IL} z_~PytWi@Rcdh|tJkBSbX+P26rC*uRH+GpD6=PtZ-6UTBa-`b-)fN4VBh*>gj1LtBc zYdAkyAW!W;BGB8=gyr7Qy^~~m^4#O*JoKQ8z&u8p2iVitlaYSYXP+Z8;=zuM*rW5W zzzp`Qjs`*uN?;uJ+tC9R&ncjkd2&qpv!;S$=@DoGMC|d`H%80VLxz%{dk~;EV9EV$1{^IF0 zP;fIfKgw!Of*U}f97>`iz_|^jz6eY(15A6w_E)dnxw?>rmF?+i)^!T(g)hhsO);0 zFkDxq-PNp_CEMa)zoNBH5vsS~r~A}ASjz?{Uqw&+HTHG*ridl z$7_I5hiV^g`}s(yabuR^vF>FuWs6wxU=NtB6k{RSU{_VacaZFkb9O6;SM6QCnM6))#Gour z>I7@rh)md8sQgfpi=f54e|u^@sOjoT36F*gp&6qKb1$Idrp_sA92b3Eb8m9kX zgaKim%FQTjD6L6=TziD2pu7q!dX%RK^;Q9=X2Nb9(xk`pRK+*SDO_PRf@APt17SKs zKS>mM!<05cAT5zJQplc|H}FmoxJEosQW*ybbIA3($L&8W_Q(b;**TiIp?VUP&?A>l z6t#GCC!Oa;GRqEQo)JtpA)FfcCDh`Fq<)0KLn1Lo>%PWGE;<;Jv3;f)zcbza26&(HO&36v1ZhjRCmO>&YOa6 zahg=;iS3MhY2P}irfZV&IHtKy5QUg>;c>(m{cyT*^dro>FiVTHuCsp_mKAA2?PF2`guI`x{5>L6ThYN66WT|CnNnV)o9q+$9q8G~%alKxLa8^J7KT1oA% zl8PBHcr3mp95;Z~ruKpbOB_DnL$ilYml2&_lP=aDlyC?5{}_Ac;NF7n%{Mu*ZJpS* zZGB_gwr$(CofF%(ZQCa}Np9xO%$@m7-M4D0y1IJrzxM8`eyZ2%)t^T+WMvRzS{!U@6f13f3Ak5$uG`hbV5P1y<{m{q03CnmTsU9lR$HVu> z#1GcGvuMM~3lP8ax+C!=(9O61ZSX~(DbgE$2v?{#BouUpQG&&3?%_c!C!jjb#eoxL zL3x&#^zj=2j_wU^0-fp&t~CF1sZf%eNwbTjmf)b1 z3vZ{Jab&o&J5JjkWp0nLb|!3=;Ix~vJ9Zj;D?@qq0KYp9^bs>;VW`5UkJvj=ZFx@u zrrGvQ4}T4+H_EoHlWke^O#5fi26WQ={v#W|zU{9~A&7kvGZ~?QaNKGTa^S?(3uX3T zPPv0XD0q2fA9A3Uo2Kim?-TNYmE|TJWiHdCO!1JSw~lbit)H>`c?CaKIab`s|2PMa z9VkZFYj`$$99|{g$Dt1E5?m0w((Qt%*C10WC~3uDA8t5?N*YftRUnYu&!GT68Wmw* zm=0PNJ`SKQ?OQj*HZL4tnrz9?{x1zn+cCG+6QaowEhENozjgYkb$Tyt`$*s32YwlP z;X6|b48sRHa;zRNJL=v!=;-^QK_g>#gZ zszTLXATBXOERlA|K*Ic&5MR$o&}Uig0jpVYd+E_)7Y4U!kiIJ!(SqH(DB5bt`C)4v z22&X=YcPIP?%GyQG??dLUwM#z@zU-y;lnVWx9=oRW;A0R7KI-awYi^oy;l?;mrI|5 zk@G=oyLEqDMIvJR+*ma6prn*V#dP5D1kzc!ga(6Hb+DoXoeUZH1rRJx{JIWy>T;sSv^* zr((e`E(^H9fFP6?BLQ&u^?Dq&`N|O}rF|*u;GE*QOG@Q=dsa!`_=6?Zwp5baKw!mf zTczzr9`G0eBO;Doe?_p_r0-Q9DBm&Vy=iywQ_8hsedff1WZy*OoG=FK^uF;Ws?M+H zP}M59l9goq>=+p6bmD|m{g8&p8$u##gO0$ zzv#sfl(0eL5|mfzbE(`44wr+lL?fL(7+BO)M^I=wk%n8Q_N3xaGhb6^z@ap97SbuZ zoRtGr4Xt~RAT|4JlkHdByr-zFLdD++*H_PwB&QbP9V7c?-!^OmZeyi|+bx7u$UANn zT#S2t3^k-tHI&g+#8It?!>WiwobW@OalviS%i-yI$*m29TJ|h$JGS={Xl4ZHqhX z{li=unaq|d>D(}A&Vp5*#p4ipxus>MUJ*4l%4v#RXtVP_zNZDqxxD|5xJ*Ip{AQEf zc(XZE$G{pu9EarYBJG0oydg%S!t&L5V3UT38I-QbhIvdiKxtT@bj_zQIh$Jcq14J| zU}9$tO8F{gQkVtAkQH$1r_ap$)T7`pg6(}IA*^c>xHnc)$uN_s73KvKhWIdlzi6oz z2FYLs70W4)$cGfEJkqv z{ts4++FcU)=qEdXlw!+{Tbzfu(}iHWuP=lE*xX;K!0L$(BeeL|>k`QB1{EGcpb2Q+ z1wBiv2b5x_##c-pt?ezX9vSCJMy*e`g>dnK;<|Glo2Zxi^aj&+$lRzQ-cjFQg0Dtg z8?(*3w$Zw9bnQ&LK6q6?(7LO%3fak{y{mQz?F)8om@ZfHWfR@mY^q$cwk?-?Ck9Xi zArvepqgB1awGG+P#xu!CU_F4qG=g`nXalE>tD2J>548Bye>${Hc#ZP4Jvx}1w3~Ap zU`a~V5>M164e24cO|nbC@VwoA|9>p6|Bg_xt230QCISKqmi*5=p8ruI{l9K|*LXtd zCoeaDbGoJ4nKEgl$M*>kaR+CBG7uRK5Fw@tpv(LkE94+aVn{R|m;xR45p)o)S^;zD z2RjQyRS?z|xVCDZeb=?Jvbi>GIM`6zwA@sKe)!)0pk+>imEP?oeCzR=*`E2_cA9nM z-+8?V2@+AJ>$xH1-@PdCdSi>ROB+IGUw?&D@oEd%#QlmpZch0`PZ}eo@ls3hOPp&q!RmJSbz`A&;6J zE67`ZcVaiCx$=pC?km^&*=K!^6{D9ff?#aauj3UC<9lw{Zldzrv0;1o`}%;O{dJVi zcTzO3{gs^Vt762?>K`*g&4HWtKc^VK{R20hf6^G=6T`i(_jcOO57N%_A^Q@$ZHO6F7>cXLl2CE}qkv9mCG0IF-PGP(V1L6X1=OLgIi!>TLwm^w{scRY1vKdZ^Q z`>&2=ot_u6!Tw-BA(^hOu1@8sl>MnP&4A0Sv{IO0a_1ryug&YWzsV-^IeOhNr|CZu zVO+?V`)C&D-h4`>oxfqd4jrnwo{yi`pB@oWr)RB$8+OK85h=Rf2aum!LXxkDX`KXT zt`;iP!b`XjE$}t4ErGFY#U!-M01CN7H~uVIl|75ohbZ-)B-%R_I)aakS=u5DA2t_= zJZ^9(eNCiLPM?fXHBny8=Ag&t@$h>gQqm!B!Gi$GIH<004L05== zSQbtfyp$BEi!6XI=BnfLClgy{7U7|+wq6#7(O>>#5AP$Kp8q1>G0gh6*cUP`%rE2D zLX!%~;&jgWI7{+Nj+(`9V=0nGCs-JqI~r&Uw*+LYW^JcKvetogiTx4a$1?8pH9X7d zPI#?$*S<-=;4ba`_leQ;3q~T?P@NC@-rTJki#G_%Y?=b<{j^N3lLLJnF%f$d>7R;G zoubv{rdEE`wbdclfaVkpn#e(FWl61p_D^-h`D}vXnwHT#JcSV1Gjaq)DMvtL%5$EO zs=Sj&!%C1|imn8UdC8O^jd^*ZKdl<`F-4X^Et_9jm2j)23X#4MEki^o6z+* zVicUe!0dx2voKA>3^HB=;c>~|pS?u=;aIkx-*~UP z?Uw4E+x$dgQ;7ZpI!u+|Cb2LITH21t-NM}%f}=t#4Dddh@#ZuPO39arH&Si@Au)X7 zkCuukvJ=rxZmkpD72F#sk;0r5CLpzbJZBkEYK;PQnkI$3Axwo4&@o?=BWG;Kvs5#I z3+PI2Zj<`oY9&zxB2$R(rp~W7C&mO`Wu7V7Ob0EVal9c@s>0%G%B0qEVE(Wd@p;YZ zGrK~tBCa%B%lMY?S-*3#3?h|HSb2O$G;Hd-nW7+3~0N*n9GdPa#dNYWX%`FoWvN9_}>(~UtCq`lDqlFAiP{H&{((f>i z4<@7~HnMSWvUqtIP_5D*7E!hBpf$#d2@6!Rw5z}0mO+W_C6Ol9Vx7KB#;1q}B$%ka z?7CfsXCljloNp}PQVi}&sJN^UvY=1a^7TxN$qfr;I9g0nmxL&-z-`75SxlC&%CJ$3 zzUS8JqYX;918_y$5RHZS^cuWDBBz*Lhidz$l z>5?J+Smb})f{AkMmo2Q=Y5lv(ASq8X^9ryN<*aPkZCQC@s19>6654HbCsKw$*Jq{q zi`=>lBRL?%=s5u{X1~H1PSBKw+jSKLZwc$AGsJpHCL|p#m(Ub+6BSIhP)nXN%k(gR z`kI@V2c_Q{Fv1Jj@hfbi>Fe(*iE7G`PF;qX={F?^XZ2}({lZgwj|*fg_m2zmXJxwY z*oLn*oq0GbEGs|W_HoPFtiPI>G;PY)6dFVUECRt1F@Ko05o zN_U~$lGm`|71U?U7abV)E;Y7DQ5v;JrW(um25DcI*#j>9={{jR1IW?@Kbrs3hNDdwGtt-r&^7!rdcm8 z=wwDZhtx`$<7&W$*m4&1@M(oa9|kZ@14OUlYK`TTnsGyg)?HW|XBFJyZcyg@8$7hg&x#Id!?bQ)FZ-xn$mA^;G$8H-J%@P{2srP_5my%a8)t;O(% zkxR9^aU0K*3e#;^&ku&W2WS{k@oMfvOm*tSh|cZD-Y6ur^9W*xP*}H?GL%Ix$+O$#B(%Z6HyEEGsCT$L=>e{fWXljvGEf2Wr+H{fG z!(|(ti_+?js=Bff*$MGK^4%s!*>PXpXD9Qvdc~o;v3O`oC++Rf6!)?glcjrSmxpL| z9je-3E)jSaP$_3(6wILeyNR%4v%edCW90VzP&|yTHYOskQbh#Z|i))}OOvNF| z%+@IB;$({~hX0l-ToOo`lr#RKe5DNjY>*HqDNy9qis(p(tGk77HnM|e;-GdpU2pQf z*FIi`O`|)^;GB=GH78ds?d zQ0Ji)Mw}I%nL1cXmpN*xDNn|qbr6>-Mx4H}vK;fZ4w-Dq%5DTf^e*Z*4t?&@EV9&B zK%xXl3fPLTVXqDa73tLrkf87sC>d4Zj+Ci zB%v#U9M^($PHbUciPR>nU5ufG>XHewETT3GIf+p=B_G)0j5g}BQ2?% zbs%Bt!jD=5)x2UZqoxaY+AKY+M6R$HZ4tX-fIsqQ!BHT5IXnsT#v0!2EKern>LC|8 zw22n|I+WLe@IErEs^pP!g2d&)+c+3I9Ci*tJ17^~HTW3d^wG-dShJ{Mt*9Qy=c**3 zS^t0npDAgr67ZZs>86QlW|``MxNWXnggXaSjrpRiwBNCHG~k>aeO9R0YIQ=W;IUH? z1K4e12#Ow&2r#dH87r=d%VQEA{~hkKP!hn}<62Uj zqq6VrM6*z0>wNk}9VCsEbU+$b!9u)_!a8S@JHATVI9#HG@8-FFxu9e^PTnrTC93H) zAV2Q7(x~(r(*r>rFDNc&?k8sE`1IUI0XlV|^?WD7#Y`M^Qv~DrN!h4UgcOa#6l?iR z0B6j^)$;A4VrrIv9c33yK7jYoA?zt~SV@dL>`S~etT|W^E5+O#R}D@j})_D_Tba`tm6YUt1d5J>myQwZ9J@eD)h4Dl>Y@r*Sep?GdOAE9)PHeXM! zU@%`#vOr6)H&dt%>~kBH>(@KK;+ac+Z<>&s|CcW`9@wWQ^fuW0GpZ-=8A0(JyzvEKf5sotX99CQvRf}Mt&Xnxp`>ctE>j?_y{@ip=2 zj<=&`GWdjvf-L|)YU0;%bGbEu6FminYPJyE|3O3fYX|7dz_Sy%J@(48B(bAl3IZ!FgjF+}(xG8ZaOqE5y3@5-B1yNfFMOeenPJN@@JK824!m`m~*T^HES;jjLjqx##C9};WHK)&a3AeBHv zej2nJL|`|Id24f_kiT5~tYB4rB}_wMl)WvTY9iW&@Isgrlg2wFsVWoMCA@}97~pRY zwuZT{@KhY(33+L{A^Q4VoO?Ls$>mY~HGEI)9R@<8>8_|Nj`3AN|I2lwDB!w-Jzn0| z$-sOSl*^3VquwLRb)E+xCu)&j8rVoV0ZaunQ9{99P6W^uH3^ykK3=a_GEx8#u$#wd z1vvz*wB?tA*Ek4*1^$d8|6Awy)3J^S*(^rA%*O}CErtW_h#t2*j4{=zQ-7iU=_TgtoG5g}PSn3w>g`&EQ0xZrcVct8g1#i&7V_pkAh%-%JrF+5=+%@hssTtW6pR4x<9GzZGgH-AT= zoF^$3vb*TK_cV|S@Vk+x=<_$>vB1)g!ed9Lc|pMSQF}p5LAcIYS6wT6xjl%1$dx4+ zk;8F1)Oe8}o9Ua~77OLfG+&+?RV`E%_f!Mbifjt-f-b%@c$^`*_gu4t;uit&%9T8k z(3a>p1N)$4*5hc_Lo~}5onX2DIo)e`88qcb5YPjyr#Fy?pF1soW426O*@Jl}7{vAl zmX&A)Z@h_DF}pbvz}`#7;j-t68|p3KiFewj+9c^^tA>R}Pl1S> zFlfe4-mH`xBY){>x%4^;bi;*=QxA7U;wh+z2nw4urU-Rk{Luu|b7JUz?=H1@0|M3mpJW>k-rK zEmB6Z?Ja8Q<1eHzfT9G!h{kR}DD#g;02H1byI z5cd6xVcIR@P&gsPZE+Yc1vNx&evbHbwsR1YEcchs%0s0mW0o`e0Y8)@~n7xM{*wp0%=Wac6 zi_;wrT)Y6*HF46}MRy$F1_$3$YSj9_0KoEVj;UzuZiFfK_;@4v1_|Mk%Ohm&_s|zX zNDFQd$UC&yF^4P!=3{+&iTac1RX$>>^#Fvzx|RRR$U3;WO}5d`p#8rM$^<40Rd|4| zansEhKQQSy!1y>f2#uO>VS20^@rur|5tiEY>qiA@5y#+|5`tu%s2mV~r{II~Y)O}( z#VYm=y88c`Rm$*B$@1UT&7{DfSF=^3o>c&jN^4}?HOGBFni$cb#xbk0&TejWSeY2X zqMi)p)3`52?PPKoopOF1rdjzLLwRU;Bv2PjFZU4&c(*uz8(gJ) z*fo_()IDUTntE_%QoXKAu5t2-mrnYoJUhqzw?~^lxWQEcPq>&shvL|CtpOTCNAn1j zrODl-fZ$DB-xut_SGIvVk`Ee6wTcX&O225CVd)}(hM-8XS!poFB*q_-c-q7P6z*7~ z6Ibk@dIQ6PDSBkxWu$Y!HtT@GUZRSjqNy)HnEzP+ZqJqKWfShfgG*dLBXJ=r3zq?s zANu`z?X+TqFE46Ww=!Nh;<}iTrMDVLyj+nmEttZ87#aP{|8+gS6|oWiG(mZ!$Q*m- zzt(=LXvRVI)p6nB&`Tl6D%5f74|X-}+>e^0Eh#=Cfx6dyeij0Zmj|z=qNdKuNH-#jT#3^*|uw zzR}v)Ig{e%dkQi7_U{Iv8&@&RH;vri$S6cunTsx>fny1 zA&YFH)N}vje((L|hG}xF5W!dXzX{EX!*O`(2sKSY#EQO0Ax#YrQqr#7<3P~L_CB}I=ogXa60y6 z2s;HHu?kawb-n-pXbk?z`R5THLBJ_DZP(%kQ*nxHL5bZQeyV!3wF*^a#f7-cauNQ6(b z+zQ`dJ|C^dS9-%vG0DEPfW%HD$k$3Q^Zlj*1cP#2&8AhzS4(LhRwgExwa^!U4W1^P zi}seV%Ve2Nk#&*n>iz7*T*<&qmAJRLT7_2MnO-D7ZX`VFK3;{&k%s``&a1+pZnr1y zVc8{SbX9$SO;k-StNXko9+P~Z{iy`zN?Nl2;qm7Al$A-@<&+nGSy+c+8 zD#XddX#%aA77T843^&CMxFzFTU`a?p<7cH{UBLJAC7An;9l3S+TCY;?TzaCLua+C* zt8+@;w9gMNPfU99c6V@3=yrvAk1=yTi* zQsMo3q&z$Xq2q*Z=~ey2670~bPt4{+`tC2H;V+=Yf1KbfZPeGpCe+tyKbJYfU{6_6 z8siKNM$3Wr>3#(WjuuBj7qSR^k0SXVmD{=PnP1a^$hrnjd!He z0)k)E%N^nR@OCb$3q$IS<M7DJg5{?ui|1Cz5He zWVE)k8I}K1Mqet}Wm4qjE&K}jsO+2eFuX5mv@6vTK?Bb{Quh>}h(cQ{li ztP`pV2q!!OqjS3g=m2To+nBSE6l>Uw5K9r^(HxIAFv-|5-FRCQQ z2Jy+4ol0^6dnU@MN&f^$`&`|C1;#lKuI;v*?4DZDfG#Lr=i#S9adU~j&`8bQ6oBl9 z>qMgC%bZG7G%Hy2BoK{-!tV@Un|wo{2jbT?f~2%vA<$=(^qf2*S&yuVH#`w)esS0@ z81utUXTon}i~YL%gx*k%e{ed(y&-Hp;##k6&in+0VQ)Sg!@Xe^|NLJb4Y>LU7B2rG zO&yjo#O2LH{DXK0`A&#^JXM8G7N#d`o3mrqxUNjTqSh^a`AeG}8&auyQN+GUU zt03(7oJV}b8`%VH=?ZL}S~GhZuiN2iN8t96wlqul?%kz*PH;Fx*6a#a$MUOI6VnW9 zg9phyrmKH-42|dY_sGs=XK7k(4J}yhDxqHoKISgKfc~;TR;vP~4rgDw?xG~?ik1ms zLoD}~_}!ins&@h#J$uWL8}mz1A7Se``fiP*AADgj+=hH>xAsYE*0gP!3f1=p5!$1x z4~EwnJjYAtMDb#eQ--%MZF`MUe3yjGA26lbdWC@cML@umItL{MOC=&*Ci&J9WtVf@ zSm}odJTHx74R;;1X03l3G00 zPz-FD8SAgeJ#9@Ec&jZcH;XMKOdgc0X`ptv9(DeV!I-LX)jp53_i`qNvra9}FBgQ)SEq2MPixaJ@{MM(aNwEEWle5U^$iQ zPxM5m%o6@ZL70+(6O|S&_z%~{^O##A<$^Z`d$}`$4sd%s)-s6h%}jxD7X#r9j7<{g z97<8*PzZ}CCj!kBQ5xZxNjy`?#h8ITw7wMFXVhMvU!N{kW7q+9$cYFDYk=<|EY-J` z4PdnF$CM427oQP)^PnoD;t+ZfMV9+49-U_o(3e*mKpIJr*B-UAhcA5jyDr0{=dXcP zWM!(DuCS;{m(5HES*skQKUtt)jGGw#Rf)Q+Olw&oMpLM%Ak3&>mb2w8ylB0ajyqI; zTc9j$geszFc7QJ8079hEp)6?8q11g!cqj*@sjdtN59a3rx7QiLfpha^-b*A#$H_y1 z1`!P)I=VY{ypNf%@x?wn+#G&8LWW}yKRv``E%BDT)6zqZd~?LaQY^u}ln%6Qh>GFH zrcBKW?waQPrB!5if)@XC4s!O6&t&&6bfP z&;5MMx4yQO(_g5&(X95}*Ezvu2IpCkFXwwxQ~z;o!flS7=?Bt_2LFM2C^bmfTl6d`@~-=KG}^)ih?+igJ%spL`w!v^`%g87V=NYE|Hc7u#ANV0c8YHgL+aPgLV zrN2rl8gEI`#G7>z)QNIh{Ks3x1g&t+N+l5ZF4-`iN~Nk!q0t%76Y^3~@z!JP!ei`A z!^WooI)3#0Q1Ir^8J+M@z!2FuB@vYM9o$GJTWXY_;)CGi+g?EG_yi{&a30x$_8>W} z-Wb<&{Lyjv?WxOV<;dGi+%PTbZ<|gWUV$ zDab9&_hpXt?VEJzl+FRqzc)Z?h%A%FHkh!3k`zd1fSsr_snk5UaX|ARUijS3!4Zg<_Jw47{W?wqod zG0D>kPRB(L%h)dET*gtLq*J-rQ|Z%+`-h)*T>)gX3D#=yGfLOcvbm{8a7-Q`$uu5` z>}x}O^36EEJ$(P@^jMxIbrG6!=UJxhuD!y-B}k1)LGen>&kTH6m#yUPwedf?%~4yY`4k>4h~KX?&}J!>k7^%27dCige(Tm3YS+s z)F|?qJ=Epw^IcrMbcAdrD?=y-KC?IV)HRg2P^c^h?qHoMG~i#E4kHy1s;QqqzJP5T zgJ@@!uYh=HZQWJFpb}z$^k>i%Q_bGjLcy_8%M^ZYo+!5#4NSCRczEW`gR}yT)blr7 zH0;FqTl;$m=X(ih2IqSPBHFvT6c!ffoUECVvA(gsArLSbdVVjKy1%z7Vq5^+n3>t0 z|08Dr=D>mB9{3{9|517)nQYKn^D`MhKa;`mAK)7Qb29$_OjT^;`k@1VT(OK+Qe7dr zT;ne0gjQ$30}zietXskxE84MrwZi!F<04lgd6xPZ9`PS{vOW$yLFxzM4f^&FwNoOB z)J{W|G8uB-BHAEpMX>MlX%1L4XZ8gRJc1RYWP+8xn)ZUyRz)-bFvi zgwZEQ!s;Rapzu@crZgNp_>6s1Ll&`lxk(tSBahHN`xJ`*RyU8d7J_K$*9pp8XP%z2 zE%*lguUwIwH31EXAEybJAKyRT|M2VoyFH(fwVjcbQ;$*861l8BRkL zs+6cS?Zm;%1*$5?X~MLlc&hJYWkX$r-@mK^l$pYAR_k`XKD+Dm+-B>(c|3pRL%6Y! zFrW@YV9yZM8DO3&EA4UA5e5>L;Lihw%CU6;PDWB{3ke=s90I2cD#yJxW6pF1+Ht zxuy~JT2C2Bqn~2*PO-+cw=W>5T5oaw11GBssg&s3Vy`n50Tz`=KfxT6Q#tT_r1*q1 z!S7Y^fy{U~t2zrU6*up{s85n_x(jZE$UWfFiJ6$jeq$h+#iO2EFit{9TKQKRk)5vfSgabi#4$93ew~W4LgFRgqs2(y&KbZ12 zR2({a_s_Lv(BR6`i5YOTj7vusnDNev$>m(G5DwNp!zA2XsHBY5n+dZH*R$R=1?x!i z^D`B*^13)e*ewMgqit_BS;#VCjt?}tjJwHpCaSQmt0wr?o^&j{VAz3sN}PRJl72=? zf2uR>cHdxWbc#D4aE2(}B5f;7B0jXxQ%4f>kymHZRBnpb)Q<>(-KG9IN`ixBgQ`-I zk*%4qXAW4Z!cilk%8d{U{T#oE;m6`$>B>_^Evn@dmkJ#piT|23Q#2rOGqK-fzLI4# zb?VpfpzOSomhvh=LrXiap&E2GRO+CnzI12mWTBATwb03 z2SfBIQH)RQcu(jas63yCR3%(RTq`q>lp#SeD4bEAxhOw^+(3>+n;e1TApC(}Au<*I zH+u=87@q72fJd8wPRtcoKJSRY^AE_tu?xoxA@|c(WN^2@oMqNXUDWd0yvk^j_o*~` z%&2Mc0Bq_*~5A97E_Jhk&9sQkO(eq9O;T^_UWF;kFfY@t}KJi-;sIDm|`*xOt4J z&>QVe5e3qKXP&)V0Lp<~JRxPI(QK>QFoztYTs%+o*}Pe>>?y~1!ZFA2{N()T*`a%0 z!sqT<32MRO6&6@DD+B1)KnP+@<*U)zr~p8lGjSGlVXybUDy+Z%W0%+uwTb`7;NkyD zVI55j{%WX;U#>Gc3(j-cS#U@pWjIG~?8vlz62 zofeVMpS6WcV~Z7<_aF0O4x`~&M4z`sI-I-9hH9_c3lGYMj-_9(8D_ZDp}zNE@Gzb*5@)GVp5oelvy+GjEzmEoW^(Q@_24a5D6;+&cSDm1CHUkof&N4~#M zX)PcbepNwjzE^rmdH3a1JMDs5Xt$;9dJKzhwY!v*PG+MrGSm4~M{2wI`9*E=5;lDU z-n-g1q55+AKG9HQ#3lF|l!sT2^(kT%on9J4PdJoNvpy=8@>kr1_nTg{IqFR>q9lD= zfZ2U@q2gb?+<|yd(|kNU*fi`;a=2DlncviZWSCf}!7jx9?*ZduyMtOf7xy#vF=*2_sshS7CKJz5m2j2}&MIbqW!j0- zF$J7Dh);F25HGz>&Syy ztE|Si`cN&Xit<|&T(8ui|1zYbWxSHVnj&pqYNg&`G+)Zk-e=KddpyGJkJ>8QRx_pC zW1f7fuh{hu zh+p7PF-KxBZ#xgaZK z(*)G%>|hU?AD=R)CbZP0f08&QnRC|;>`)Y|Z5iyoY+*S@-=GRgdVW(0o zp8YYZAa;ur!@JHK|ex(-fSpoR{XMNU~HNJpi^X!3%+&d}F*t-*o-6@r}xZ@~{)k9(eX9ZoSXi zWH{kw6u2~8rX+M|kM9tP75f+ja;!BZur6zQ=$i#VnizjKu z*OX$7CYJvGc65P6H0%_Yuzhc8|8c>cCY@@LX~tKPu6^6Z5Ofg2Z%vC~mhoQx&XRLZ zEmGe>H%-;F$L47*#YkJGws_}Z3PchuX6Pm|{VKV2HdVBog6SqqI(Au@#Yj4>${GOj z6cy=y`F0bXl{v+|5*f)uf^EB zZM1<_SX?0#IEhUxG~^>0n7ox%XtLbXS8iHKrwW3SXB~F&yVjjihJ|@f;#_92$$(>% z$F5wNKoU1JAyv`8;Ny(YG(7iii0KIrbDf_I77uJ$@&+Sw-oE%*@sM1llF+1an;@2j ziX~|D2Ab%gwB|ZKe&6;GhN|C%aM1geL!Mkn zsj5c}+vzV=NwPbuy%4c3>X&+?1?#a+*eYP^?jWtL9XO9r#&tqdkg>e*4)n%BPy8&iLIC*;FQcFAQ4CmM zK)l_pSMcZveW-VTUvSwkI~nNrygq_t{2(v4ebNwd;Fgbr)&}Se;jUkL+U6ckjFhOa zU}d9z;Ce7%feXxSsUZA&MU3%GnDOM|`$AoEw@sAB0Xz0R7~ zrLCXl{rE$Whaf{ZCHtopzPZ31aO?~~gqfQWgbG>8pPk(>{*W0q;~ z6Kasqr;Uw**Usz0CG5Jrw2G{C%ea!4^Fw_F?n&S#;odrG?}s~Ro8aC$bj_N-5n!6; zV!d#`<{8Rn!x8N(4l;xwY~|#YeudfEo!I?XHSq@PW%WICdKs+=sNAL>mkgxv= zO<8JfjecJT>-h|Y>vr6o;M0)n_aP8p{9QqC9Of_XA4%NA@=h4x1NYm)RmQSR%q(y< z3q`1U@%2?Fm(y90aq5oS%uL5f_x)Rb!eA|5I=z1e#hdBC%3GP+WWDTAn7QBPN_K5o ziWK8CDmyjR>At~wt;86*(NyE8meV|9&!)JdYvy}3jTve=IuSX=l%%+={(woa?-7wa zxi~sWt+D00RQPNQ&CfQ+A<)-0xMC|e&zQ*&^MwK{h|eBID?8L<3NM$4mTBUgW^k>I zTM8GO-f~JUsC2*wZ0ml$&M+!q?l*nTD!ajNTxC1L_TDxFFwun7q9&VeD&$SIbdpkm za0_nMe=jdZ*q|b%bkv{Wqw(o-meUx1SpPH*=B9dIGTG>^+z}LY;<3f9H8oyR=e};3 zTihL_ooxyZLe|7Qnn|))MvhD#1xVpAaRdl(@4od)U1<=f%bQG4G8>gG)78PIrSWTO z1?xel8ifQ4Lvz4OOHgBi8aRpcBgQfyJ89Y_(cWST>tb9!qMT*0%WSif-04N==Br#!x08+k zNlDM?bAHP2hoz)HplJWA<(Ig(wlU@gRf#pgg_Cw#sNJ0ol!h3ZZ$uKR4AnbO9?d&+ zmejjoPdeMw+^1z`Y))IUAzRToS3J`|W!Old#!tc}N;9s-GKOWQEMUs{Ut~avrNTMp z#VC=!ZSnYdz(ZN`Z9RsC^NR+Yq zH)`-BdX%HFt&0g|$2@D$CCo28W@F=Y`tAxH2X8^M5ep@0zqJ191qNy}d ziQ~b${WOoPP1Vs(nQh1Fidgu#eYtnw_vB@F$v^aORUD`UVx(esTn_{?Po$-pp$rCX z7YSTUi{MMF=2J)=pM)W65@_UK)Me&mNR-5Yc6({Bg+;1;hb2t(`~LpX9j#3&VFlCH z5x#06kZ!eMJ+$;TtFw<^(}gTd*j4PYLE8_hdc}5qMpWwOKD@wPB4Pqhmem3B6iME! z=!kY(tJrJFqAEfBFnU=e;C@>5gzk2*Fyso`dKj2tPt?;@z0?eW9-(!dQGlH6;Xp=f zM3^MN`)EVGtpYl0$T7{28CaBN!GRTAh_LY)6;W0u8$0M=fvFz4ON}E3L#V!b5A3)f zobSV_cDT;R$KO)PrN8VF#f-6}19f+xsiqAyQKtg|1Y<6}7`EJ&XIjDrv?D}IMA2LW z<@lHNpt3Ah!-}41^g&{n9Zim*cbx)HCJQ~XzoF7;0uNx%Ye{LbxY&$%*?yDkQ3{Zk zLt^uCj5Z);L0Sv4CREQBwE+13;XgBJRFK`+Sd&r-=<1Xa;MEBb+0`DXH2s#)MN1;K zwkAHm7O4}sBV1vGs*^O=+WH5ias{l)v@7?5VKLg3jV80UJ@dOO*aa$?;?{jC#NKj35%$4H%#6v*tn%GH z@|+&>hV_2=enR+raFCJN`#|1i{a6-bw-sE(Dc?5)$jcP#S@?YW)McRAsmIA+t8KeDgg%VbA_&o%S(?^l23=#gKe5Ofl(Ndews(S)|%~**LKg z>43p*Dg>QnJA~3BBX+|!4adNmf6Vj*(yNnE7%>15g`H<&tdUq}5Pm(#a;G$D-7OsL zlUUe+G`2wro!8?~$aYldL3{qJv9&z|k_YLU9cZj(r-(K>Iz#z4PbszcVq*@4ge{ME zfA)<(xK2WX&N?etzEZAhWSTKPdcm$l#Zje1#X6n?d5`EqlVlKhE$s=L`j`hH`c?Z> zNf;k@!kx0+Ye}%opYFr~;)3Ni^HjKwQqHzb*q|b#V^d3CC=ZPdUQ#!B(b{Jox~W0- zD(-IP+j$G~3AF?;UJ0PnB^a^h6cWaJPNDmeT7TQ4g%dqK{cOhlnm_DZ7pg&jjKxj5 z(@tY0(yS)3LnLJwap{xQsH_lRN;Xp>0}?|Z)D7BpCT-@*k)CZ+QF-u1(I;L92GZ0^ zwpJJaw&~5b_R1Cx*tdw6VyXYRL#u@TVh!4!6qS{b%j+;*%V-W^cGtT1HZs7&0q<$P z!|Q3i1Hs3Bo&PmzN&qchO*H6TcUGLQF{QM=bZZP-uK+9UFTM4~cKsFO8Urp-_UkJsQQ@zc z>FR$_B0{$5S%Iu>k8DNp2yLawk>yJ(OkZ{C^ueL1#m5IEM7dpFIHUVhpOKJFy0UNI zk#@K?4mqgWgRim_>1Ua6d`oz9!1L#ed=$A}4`~fswt3x(!X0D1E=;T5D08p;=7s90{98?=C4~IFo~c0UXc#IB>kUGc z_ls(>JI4f^3L4v)o-85&7L|0~vzXeP-%>pa%_J%`4w)n(J>(|jTd3Aus#5#3QTUec z0svXZ&Ouq@ebWcD^6p1x2sMwZr)sE_t;|Jdv)j&%kv}Php#m?Vv$EdUBIRv=4r#ba z(uG84%-;XrL1D0UgVan|lwe(xk!f?uAir#%dZAiS7wHzgM2poU-M3-iF8$-%!TyQ( zFSO0z;NTyMlJb|LB=qkAgPZkNSNXrZR9<9JV#@8o6=I;X&{;$V zj0_V5_CLSj^FHWd=q z8$#DppAGG^(6c4>)*ph0qsDR&W|h!kj$%fKiKzxg!kl`^0yZ?9B>Tujtu~tFnEQ|- zhB2^$rF|n=Ls`p)EW2C8uO`o_i#qPU5J41>%P6rJl0HSi){g=$CK z#}*Cfb2{kMIq`{Re4RB~OJkysFZZ;g-b89`$}~D*!mEoO=Lc}kR&kfNnlClcU6ECF zsFjR4Cyv&foWHb6Dx3`4JQfsP0lRYi)8dG3`Tpb-YAdeUimSG+X+jb3$iLjd2JhPO zuT=ClUOqRRp#32(y>EG22P#ooR5^BNua~{V%y?qID&`uO9GTNQ7tU*lFEsNzs{Xm! z#9N_D^JZ$o^tG2Lv7?;$p6vE@7ubc2q5{CvVtiBN=8R5;t>a>`H5YcQlsWwwjTYPg zj>%BTz3vK^celE5{{+QM^wau8h;l&5RI_xa4nSREmS#<&oe70wk)YwEIN)!FRmVQl z41mf|XDZ(%CZHa*86_??G8izWv+@cq$H@y?!?*P#V}e_Pt;1M2G_(_6xkJ>lgxz{tNuJq zU*{y+<5la2jXht=bBV5&f^lcHZcj}2GKVs-d-CCyqv6AWjBtqppp^vL8;}$EYn?6#Wid|3f}ipuExD z`^=iSp>tBqK~S`=(e>M;zlfzSvEp7EP`HAUzci)t8PWCcs0DrRnB?eKrEP|ZtE zG)?T!%?pd`s|&J(ba?GG8E@&;gi!lJ@C_mr(8L9{z7lze8kSYL{@$xe3kwbiGDJo57|C^Bd%{?Zwup+@!KgOd-rl4$##wAqVW`#*Bjnf_a1>y zp83AV@t^H}=)D|o8h!rHCBci&YDgo&GeF)!d6pRC6BJU|;2PvXD$Wt|7$OBKCFdk| z6%=a?&i0?cF(=mHSo&Qmr^G{x9CF3RXjNE+{dw4_9oCK4n&9bO>d0wYt#HPMB}{a_ z*rvA^@+BV1Tk}XuaL`Wpd8a4nXOrI{pdSjhT9{gkrWrnt9Q-Bg@iwB=Neh3pr0Ll! zRv~{KhXp(VccICAk~DY((xNQ&Nzs=T&Fwaw_W-9r4~|ouH0KN_VGn;XFsB1uua^@YIvEn_Ys`!E>>rz%oupVa!U;=x$xoTZ+S*nrPHwn7+5KDno@rYTPYy#+S z1E+0tcQ}pioVM91f|(TYxRu7b<>Jx!`ph!MCLz0cf@athf2+A!aj+F@_0Jmki5nH^$D>N*`ab8r)@_b> zN~jk#detc0N!Mwpcu8uIf6*+r%+%xq)me3SK{(4|Am#`qKzo}rc;CEB{zukL+E08B z;@e?wWl5f~qge3F4`v&iP;PVYzn?AaTi4B3W|Guk8cPai`UL6M-t|QdsjR9$v6;~g zhnB&6@w`QbmT%$Fw+GwEdTRH0pX++FN+(y+$$8FNqcCsz(T|ylmD&ne5vzpud083X zE^C+Te!1Mf46dH5HeDNdeQZXfUhDa!fdv{4A+Gq(M;(>zk;_#8do2VHwk9@wA?j7| z^+l*7m(|{&1vPGYDAeD;1rO!6i3lp5vA4)rD!jg9s=wj=O2|;Tm3@mkvu#hsUeb>R zUqj00oXDB9#?%rn1tTH}}xFLvW-VJA7M)xPz@R z7!M_x)iW;bXRYeYy+^l|t?@o&uby%OYT;o`*ie^G|LKAjGnt4+W%WmgIGdHkfT)gT zXIyjP2MnaPb!hFSUNy7VHSJ#=B~gZ?jh#@4JJ6zgXHxwl1deuUe9L%QaT$tx%J{ws z<5vvlov`+ni0*dONhAGwpx81Psc%jl{;GQx&#VzEOxIOx9t7LSFhUYdS zLzR+0aVInFwg?E1zMAHpn63{kJ`&!Drg-t#{RR6n3nM4#$ojbVP~wV}s#``}*0oE& z0Lf>Ju2Z3Yj5ZU+aTD2{8sleo;Tu`9NcIw4&yVzYtdy9b?EM&(1pTrm+R_s$;+Q&c zxhwSyiXd)I)<_FUV8b3|q<%LsNkrdKz^8iPgBCYmY zgkMjWJ@#xn7k)ddiya+CzjvEob(_4Vs+YZnVFd%mwSt&2PtYY*^fJos?CY0~Ac?YT z^=!|UGg22Ea>LFxY4n?<6Ps<$ESj#^24PnELQfeX5pRj%0O|L@xhWIOqUKN1cuQGZ zUA4zUCrw{P{)AsAGTOu z?bZNDT$h!M0g6ChA{4J=jkRm$UA!gL&Mb{CNLZW7T2cOYPLg1GDSVw9jNxWyiO)MjuukPs1xcDXRWXRM7>PT>58=(GaO9PV;Ox{+1P zOEJEyZivATNu4BYFbBewW7_hHoXU6i(PLkQ?Wm@12 zq99_s818?I8~^fU6f7lQ`l z&{;9_T)Q}`Dmj9*pIniliO`-hF&RNJR>{bI%85LmSU)cGrqH3hUgGmJyxp(JglA5U z##YDrXG;22V@KrEnn7eoQ^L{@%C0TcPl$hR%Fk7^zI&dhl+M$a! zCRLr&%lZKC1yhjlr<~@Iv5$# zKfTV0wIUA~JEW3BLtKPJR8g*Y`#bWsJ#^;@M}9|h>Z_bycqHz;e8_*bjaf%%@2DDs zE4En&*U3Pv1J^DDb{_->A-d?>>j}hl^4Ua4J&DR7+K*;Qv59PW41@1ykkk#${X=!2 z(9uo3H~nlOloy5hmnoVo|5Ezdcgggc`?KN6<@{xlc@&4MMgw3#ZTHdHRXlWmqc~{ECB6pTuiZ(ZfMowF%z^R#rS9g z)ELV5YBpH>Rrq!pQwAP^+mLLB`rfd+e=rR`wi?7o!`X{ zYBPRUOfrJP4%fhK$mFsrwq0ZffJ0$mZPTcu+wqNU_cX>RQZY?t;$YnYt0%@m>Vt@YEmTJ%7OVBn`{vRJ;mB;j<6 zFI>~(pTJ3+>qjx*kW*a%a5LPJ{9N@Mq^JHl^SLPMg#o}iO>m}uRZaB)Xm)RMb#i7~ zcIizHRpCE2J5ZeE=YY4NyW@&9t(fVN@!ZF z{a>sAlUBqDst1MhB3?|#9XW}kEX#tKXP9>4MWAyYma+;Kl{c!RdEdEN?Aehc6?>1B zfQSKR3M-nbnegLrB^ZY{Ac_JqibAP8j+ril%3{7X$YQuBi{0)@6RpQD<~FJ&yeO?b zTxF>2oqz&?Mu5M_t1h2n+6m(r+C9(D+h>2z9`z9+>cMvXlh0BfPN}ZnJ9tbo;{{n& zTiC9oTa_wP7-+@C@DBFR6}^_euGjT7yWNKU_cXHqv!eeo&6PL)3WEHP(k|6F*Z8_5 z_<RyUT9j_q2XeY@7mLSyq?~4{C4}6z6}zy_ewUkC&TK)lsl+yR?0RX ztUWoltJ>~CAL*@^J^&BF{Z}txzyw8BOXDVUa6^tH9-Vqqr6Eg1P)Ce+r+RUMdTtlM^EiM8SmSgNu27HE4@cYq|hZLoj8{sl>(ZxNx}MTf=Xn(Y^D zOVK8yv*ih2&DJ-=WvvAe9GXcDaQ1adO=;a)7G{hPSg|fu0iK@@---a%q2Au z_JvRa(x#_U$(&%eOKU88>ongd@+&%!NL&EN;RwwUq9CH5(vwVV-?bhSo4L`f>xXN*Zkp7YPFrfAmOgC!MbcoiMbZ-_SdcQB*Yydv@ht_1-zA^rdNP32 zEDKpr?E!&7yoFi8jA&n%1adZ)!bqvTV0%a;? zn5zCHdGk8CGh0g4t0{x@pM~0rlNz6pa8NY~eAVW?vW;wFT@_57dSHGy3ko2WQ-9e zi(QVFrCd}C_G7SwSl{)Vl zZs|f*YyMvC@&a9?iBVGpq$A>uc)Vxgzd&QXENw+?7WUkw-VKkK#*eiED2%*3WbVum^FT zp1Gtku)}-7Q@^l20GgJqOAzEtW0qc^CCl?HT$`7Lrp=C+wJc7MaRT6O9p_ghv2rOBW^9?g2Crmqo{vgZU(V4c}7-Cso-v zezc|xB~DITRTNnB38)CW(tN;4qv%KgN=@j}+U1>KYJ~iQmu|&qZh6-{W(87Y_(XLf zE(Hrx&HjMnvk@OqOA8PrO(Ve+L|b{PLaQ9OFxGYlnUe&BOJPRVg&6~}VDPi6R0NzR zNgt5f$xDs<*%HF|7(_@ZS>5h^F|TK{(@yn^$;fX6h!?@$ph7>H;0$V>xa+8&rTVbm zvu>S76LwK!!h`aNGJB|ePczEUt&5K}-M0K==5sA+PO2m-tAoF;d$e1_8S6-OzpUl) zpT+1UR!sb>!~5kIuRQwK=->zg1VrI~M0WlGjjHB$7XP75{FmkBKX7tL)7MM&5c|{L zJ}J4ZJVpIGd=bPjc{j2#0$c5dPv+1Z2}BBsL;09Bj#RRj3+T|#c6bi6d3`q?;}eSY zLGHov0yI73qa%*i_Uul>)q<0c6~R|q0bjFU*JRe&Npl4P(E3P3XI~(0@fm@fnO&oUG|z(?pzuC2n>~O8iFPD)SkpC3EcOXF*lx*`~vlG)@alH zlkO*6RvFVN^}J9FoeSX%-FK<+5+;_(F3<1IIS6(<5K#U~$ixC+FiHok)+h=vc0>AV1Cv$2#2ci#KO(76N<6F#?-Md>vP^nM952w{Te>yf$!) z&L#Tq=5S}^WAn2lrM^C8qb|G?=Yb*1MkY+O%^sPygrt^!;C-*afx{f!zqXu2cO{8g zm2F$KZw0+u^NCUpmf?@tqo+K{9M&ohOHm>LzsVAXyDlDmAyAvPiPQv?wF$Ou$W4^h z-8xMm0;!foEl9*)thDz+5AHkK2>_YBM4iO6h7hza!-5HnqK`x=PyNtkV5YUrao)tt zv+QS5WOD1&?+(K%TDd^SyhwcSy1VyLl5roZK8dnUegv9YVBc=erKTCx=t6`Koh zx*FEZvXf`w0uYQ;Ttz$UuyHh8!x6Z??>=%mmV*$Ng+^kmsF1N6A09H9i>TULwkk-8 zKsy|TwXqGmgM?NX8TQsWdS%j+MU$*wx=$*N;j_L2vqlLBzPd$yYf*R!8Nbv?Vb3Y- zW~}Ihf@b?qJ7mb4X_!n&0#{5wtOgf+VWO+>?v(S*()bk_wO4gHdr$?@A83t2dR_vn zG&QukaoOFnW=jM(M10wdpC8K-E*jcVEc|A^E+ka7g8Tj6I&O7tvFFg?v_}4rGcG@{T5D@UaZLB`?3i-d-NlxAay(J^m3ddY&h`AGGD#pX<9TQt`?=(pL3?`Orbs5&z7 zW`jHUwkhZZg=yB?su94*reex29=-tieviQYnXvm)EY zjNY^LChJ5GJxB>jxc~jp@dlY{)nx?mU}q0x-*uwr~v>nc8v{BeCL>xwj!YsL&~K7!Sk&}Dl+Gx3bBM!2-+ zoJG?#m#3bX1_4aB9?h%DA*G)I4RXu=-PzbZ`x~1O8)Bl)0?kbGI8#fwqnlu2NQXgl zST0_o?hYRxA9WkNDJE~s^qguY#k~1Y>(`_-zdpjlEhMXj$u|tp(Gj*TL{8zIcfW}N zlDaM#k&k`*r0S6EGbh?*a=&$CLJ0uWVZ z7;`O&@t6{@FTlP zACJWiVuy3_B>D7#iNy=bu4u^!y*1SC55+5%jP86eo-)1m$rs7<7Y?u3U6zbC5`pgP zugWSeu`S685BoYObbmrJedrX<2N=S+ysQ-gv2)GvK9{Yzy(xSpB1I#r)@y%Y*;l3t z?DCthw-OL43Fk}R-1X*mok|D~BysNMIh3_S^6)T;LzI6^m_Y2k)`(UE(1>G14KM zYcY)f6q%GP21aVWXKPz(_c8!0C1LR>FN38T(D`FIpQ3q|zp*-fVlCEUor$j7j5RM>7N5%vIj! z@_Ya9t{ow(a+(#1_JsWwT)W0oW?^X9N$T)gyqS*1muBpDHMuoPJuUl)nmP=YRX!1D zy!KlmR3rav%+B1{ zni?Fr4v;5U9KX3K#!{a*?h$=8s3?-9H zf@v+3B8GjRZ#XuCNnkzVJB-{gGx~@)z{8MgY{FLL@0=?k{cqNWPB?nkymQ;DGj;<6 zv5VW->1acNx-K)ToW#0?Cb-1OQ5;dXDOy-SYmVDcNP!BHO)BR2f%G9?xDj_yvc9Lp zW5)yb)d60;i6HHIP@1`}oqFnxzpjcfI#`JZ*#|*zp=<8Hq>mjm>c1U zPrcDQmG``#A_F$JNS>EGt33C9QtmYnUwA(8qwDK^2eGUdK_XgXB?q{g>|xbmu!Ao5 zs8&@!Ohv1&@tRv~iyku9++pK~koFY+DB49^q%KkGK+|8H~~ zJ4aV@1#?f~uXUM!sf-_?4SEMv!O#&&Kg`e>D}=#`sgQzLq*8m}vnw0^zrq+ayn&+o z5b^Krhnlbq?E7^CM(4|cOafWY$iKGXsebf7>O)UssY-s` zG($nxq0cXk)8G79{-V)&#s<0`w1Sdx*!b?Y@D7S?9)XZ%u zwhPP`HNy?L7BL0c4V7I6k}Fcxyq5rUcB+1qN6ga14UxU`Bp`Z5zy{mH7>Tzrz5^#_ zPXC>tpAdOf6bwcgzmy|lPP_u=SFFlqA=!S)0aj^6@t^dB31#->XjWkgn1@|D@hibm zd0R*+Rw=&J?w-3*u+NxdudXKTxs@ZOh4j@--(SAR z0o%Em{vXTrzrZs3+oa)kWf&EVc_Q&F7A|ZE?|@~ytnf|JR=^@aJNVI}r*I!evR41G zO?yoP?YM_NJSPej)wT^NCp#MZh6&fv_vyVB`Q5*1rj9jqObzF7@Aq++vJMmS2H(Xz z@1_)e83VkyCuWX;{rf6(PGi`^uw|;8J@wc@%{G7)cmCa131`A2)051fcCts?$L z)wHdfm~GDTE8Qn(W%sMy$5mp^-${yNk;6xiIYH7Y7S(j}59 z6}<|?a{yEZ68?5F$=9zwh117g%(*SbmG|twTjqC&Vme`nWe?Bd)^X~p>eF|)f)1Hm zsFVxgQ=glr;;Q;NP%oKakoJpcT-be9qr6ds5zbTJc>chz?6L%H;wenp^L%DE@+F1$ zN4&z)`Hi#>fs_`tM=9*p8(Z_3mQ5eE*Fl75s7{?heuE9bHn(2&_y9HBn$=A+MGCH* zC$eZuoAbu=MBSag{OtCHex&ixu2iKNV)#UmRV=UoYpc(?3!=kl7WRx{7K?J7Nx}-R zbP?sR$%DK_ey}-Zpzwur1Yxl=h(6mN)j<#+<_KpUc=lPYa5ki=tq zoRcX5;R|J2eMKuig0k7{A5`$7kf_a>umQsBmG*6vxF>4^XVVdaqMQQ+M`|5{Gfhw- zF~5Y@eWJu#gSONfg9Hvskh+5cSlF3v;6j++pmQ5modhb0;PFToZbu4{s;Z1%R)fW4 zky}{FR#~Lov#IP8j|s*~s_^YK7D&2d=_o`Y*PlU-Be%maD9xEiU6{@AUQs7t{IJFZ z!s12P1sfDT`JYYYJyPNNLAtuycG!UlmK6v%MWDZ)O~+=ooo8Nmi6Gb?(RUx z2pu5{%70(C4^@U*li8v~fx7+qe11fk|4EeKa=meDE>v$Gq%cw=8)Roa-(`uzK3|D* z*xQtQ28VBHKZ0;{l46*rx6gj9ak8%2i0{o_Q!neds8=sOTPF@eVXPD%o7)Gt{4SSH z*XH1-#oFInhwW0mE4|HWCvq=BOJr0`0+y^e(ODLKRW)-VPg_(_Z^CP_Vya zU~SV6#`HwQq(!wT^6HShxTm9vN&NaBb>ylZqSHyTtu|%__Sxm?-|&lph5OiWwp#Pf zsE((=uyvfRrQ0}_ts!5Ytr6y+LJuKKkxq@oyf|b$^dE7EMoE3g?p+b-;7L`ZSn%SH zjS4~ItCXgBy$hd+Xk1<2+grqw%DNM+-1K^H0}Uy>9bc>StjDNMIHt2Ez)i`QtG_gq zW{#3RHut%q9of{=*re(-&X;Kd(C*e>M9TwbMa3DKyWq4k=v+zLqJY##d29Ahfo^q9 zC&#tE;i(=~i(+DYiM;Xa^63DHq3>j^$N};nf3Wx8Zs2cRSB3NN`iMp$Y+(3?k|%em z(V)C2sblxBrkQPIAEa-l&S&x(P3fyY1l)=U^|?a#7a+5@GK3H!N-Q&T z2m4@hN`8(1W%gGys{_Wyy<)xK7Ud+1T;%;?#kxyik}UpH-(^{Y6vmIqf@QhQ)kkc+Bt7Y{{^P3{wb z%6EFtGBpB^Giw2K4cm)eGEq%*CZSot(_>*EW124-){~1>!=-0Qd?Yiy^DQXT`7R?K zsv2hb^)Gz#=qdlXu9izM3mj%Pz%gM#u)s@lu|4$xa z{O^H8)7s5S)X~Ar+RfV0;Xi0gt;VY->LSKRnKZ9;h6?l{G2?d#IaC`oU=dmr3M_`G zuC;Y(1dqJJe2^Q30)Fy~p)kG*?L{fS?_`To7#pI{S*o)q&G@?c*2 zb3@)2O-};bAAbaV@Aj_^{osw@1z<^H{2zfJ%VWDf+#5)tamL(aAyUGli&9ANQp>Jb z@cq33)Vu{Gq(i1Oa_AaJO%04vuQhs`SU>2G^+3K7jfL6v3fMZOx0nUMIQP>)KB%WZ z$T{1_o7O>}+j2fpdoS+};y|w8cIrT`G@Rq3e9oup3oam}6a{;O7JC*ITKayuU*L_L-*rZfmHok0CzFq{at19@wXF$|_0?d(%MT z;{H~8-4`Ppn(ibsS(L*l){e}$N4RTD>8D-|CdaQWW=l#fJ>^|1)68&z5spbWUnqYz zAo#^XQ(b1%tCZHUmx>v=;iQOvejNVy_!8?c*I>}`1l=V^muD8JVh%n6`8#Ld7Qky zCYro?C+KNguWyVr8TwHk(dOo%4mMseA+Sd&2o$a*Mgip9x_1&3#Sd zCw^uX&pqJ7U+?k5Uw_5+bJ*%y>k^)~z|C97No2G8{eXJTA`{mq^)2lS->CCgAEba_ zf6dbFP=>huwd+r-b^qy0d@{bwCeEguR)elFbmzLvM@vOJ_zi-d?!e}ZU)%URE0-0PKM(c15W`^~q$KibCiky3Zl+qQ*be?mvQ?7HBM>>;LM_okMt z44n%7{oU7xSG&tR{5B?U;@0ZD-9-%`SVt*2q_DX#AAD)Q6ycOqtlGbhk%!>AmK#U` z|6wP9!N z%^Rp{|z;8I^e|C00yeFH!)X=9);eM1{XBAssIFFACj$eLhp5 z@86$DwGl$XDV;bqN26EY|Hi|wVLEGTu0Ozb2nl-5+X? zt2uVV%3kXc9Ux|F^^XRCTF59Lfa5&n^w#i?F!8DgRs7&Cq(HETn1uhmU-aYeNW)Hc zdjQEzcND@4|22|EU{qMXX<|R(EDHlaRN)X?fr0!tS*s`Rv?U^)jr>3?dhvM(@_9%G z(cj`NplSYl6w*oDLVG_T$d34u+7mj(_2`FH=!o@yli71i+w@`7^rmV>64dk?Q2a$u zc_*5GMM?Gz9(&J=e2;AYm~_h{D`mkxk4jOX*hk~ocj3e?cY@$wy1C{Y{Fy3!veQhuy!mWyhlJ1rXncbSTIW(t+Q%-KX29-$VgPcH zyJP2_$ZGhFz7Tz=#js8jV@y%%!=Tqsk)H;&d7PIfIaNzhOt8$?P+QqR!h$2A%|oIE z#usbR=V>x*_ZEpll>dZW3R@Fo+Z->a znv)TSY2ZL~r-DFU)?6n{$DDohssUuR0}H?V6>cgfqEQ1Zk|B8lzIu?}0I(Y5Rvq-T zOnw^shu(pJ&PP-Q?4TixnWj3C=wi?_Z4lgy#SNU$l9$k*4vyuIZ~x4?Ey7eH$iIZ; z$uHxR)Fa~1DX_B;#Y!-Pyd&mw-nyc5UlyK-31mr;93Q(Wh{Zk^xf z9dEvUEKmOe#p*vczUXWB;0td?IUX1#svZnu+8P#b$9ux4~O!boS=gDD0(76De} zxytCN?%|jA)YWXm@A5zT34)7SABm2JB`g!M(?Q$O%8sx_HO*0Hx4Kia6BA9ry2Y() ztg_R2E>UTi?ZgZI`Z)TCGc^Sj_BAe~)7L2l@0h%U=w!RZX~#tc*xoqBVNl9VxJg2Q z{#@ATt@#nSF(n%$wbpD_*2u@0i*4F7nryW;#oW>d3alr5*%WW0W6GOaofyj=G8B9Z(@s$xYo}w+Os^AGuX1)9&il!jePuH2!J2B~EGER-_~=3^QB|oSUpJ~Z zWIn#DHDQKHyHw&n;bv#6t#c*iGX^wYpqsN;#aEu;F&hvn_{82Yw5@5Ps@5zvhGLC14!wF(|NGxOPN=H%qCsBiyq{GCf$1&;r&H8&d$#)Ghz z0Knym(poa^TT+^HMvaSW37vd|fou2 zrdj`*)EfoV^wZY`9Pr@}m$oUV6NDdI%wA>Bq(=^M9lPv$vl_Fno>tOD>=eOfW1dGZ zJ>pc_;n7GVH+Q3dG>-0r;IP|>F!Yeco%Q}lc3q13)SflWrjL75`cICDO$q^x(Ce7-d+_c-5Sx4V+^z^|0ax^i_oIaH#O zthVcH?8teYFW>!+MV;~Zg8EFzpp;nMH2Yf>?v=`crkZZ<`iW0n{NcT}Y!#WSE@j`h zkI&0p!?Ji6Mjzsa_)ZQ!#WCZs7bgR1_Oq8;(8K5r{nFU@X{k44F~4ik<{@9g{-==R zHxzTUfN_R#=(V4*)t3?8!u*_YL{|{;M15@iy7(4F9Cc96p&D|ee{L)HHqbMl6>l~r z*_6Zbe+i-YO@fI57c|;Jei^5ne)s^beJd8(ygskvTS13g@@HQCd8Sts2ogB53rcOT=5 zce@3;c2mhR+y-smVCw#URBz9=83++|Mg?lZ|EiC=I&r954Q=lKME6*hk7%M@Q`M~H zwRNMT~HeM`OQWG8{>9w274swEEcQ3`^QTgsI@*9sxP#ASo?Egv~y?W(KUSwjcsPpck; zVqPplGIS*#(Zz6qbZns+T-F<<@>j4|j=*6}}!yDoTFTN+kCRf~cJIuF!{7T^8tG_+>-GSSG zlMFvT{y>2o-=-nP8+9R+GwlwLmHA~1i$gHVSV%-!z5_!uFkSC>>y7%L1Q}#q#FMIF z_XOCC^peCG>&C8=g3krm_Q}WSWHmX-yjP<&(YmU3*a5>i4Q_b`C>jc!v9@1_W9`xk z1NzxqI5;oJ^QNM+46g$o{^XlH`$ICe+1ut>f{PNh4llQ-9ZASUuctYbKw{g3yNR|* zV(Ey4*LS9WB`#Ye#o(HB5Fg!Vq8roSr8e(R$tjWK%n|pHJ*-sw#2HhiF|n>)Hm9{c zHdAmkri~u5<*GE_!DOQ>C-on>u{TjhW%6N{no(Ec7)-9@qj)su1iDtN*Mf@MMTl)t zgncB~u2g%Qj%zK`&yPY65YW9iv6=Wxc|_HW-GrL6z!8#O!{jMUOS_H_G5!H%b`y}} zfphO~l#@LYxzVtYyvc$p)YZ~Ph4G&CLHhCgf&n@gT>*g5W*>TSzR#h!k+rWqBG-2g z*HalAIyzqE0=rePu;(+rTK-Gn}rS8GfP`)2SxEMsmBy)4rQ+>{e)3)y29Y4Yx?lO+VE<>9-*3#QV-6}-{V2~}rNqtv5B-cJq@aYK;K=pA@sX0(p z1^9JJuNg^?Y1G`RkThnua2xZcS&B%8c`kT!(8iQpR7U?2Jxm99Hi&GOa;CmC)_2Y` zo%I-R?7G?mDYK_*=Rn;&o3CTJ#338gG8?^)8Y^)<*fRB)z%SEP9|jQAW}lS#Ap84w z^N3_R!z;qg9x@^Y#5dSB)n}J6w;;bi`Gr*Z#sy%`qE=8;C5iK&Mexe%*(&1_yMawn z%Nd;Z6+?BC=VuLovG3L^Kbo)V*OJ<~ZB&SdCE-$d!a|UmVw5_ulXcFk3bnW?{je0c zV`Y#C5c!QUETz{O_NTsJBRt*s`=cA&!e)3qEbk4YY_fd?SRR7nGmk#H()RA@DgDkM zW(GaZ(>3s#JUw6rV|SiRRQ%KX_om7sE(AHQ1yPNWYl-7;_N@Z3b^L-m=)|o zsEhM49L-AXwI`yy!!tqJ!8@=)4N^=SWLN@1NQ9`+`6{pGhQ4{jr zA(khMIIar*C7R+Nf`hJTwK(sGS7V*Wr&ka>ue*Q0`@=#8g9X5)DG~HH%)cS?#HYg9epP+c3doKcMa4)xC@b>WAy!Rr@EMT7?d5&a)QNoA#ne4(KGaZ+;DA9**01=W_2N>Nj?d#&$qB`U+;$Qr6h-S(w{VV%@1g5Y z)=({4GOWoz9hR9V&5D26tkP#yyPHA2x`z+1frH8etbykcN9u}8R=QiHJL^{DR!$b3 z#%J8W@pS^nU5$sZbBD3G3C&+NzLC=3NcnEy#NbN}vD76-oes1Xm(MeYIP+!#C+tjM zHWz^l9?6S^h>uuP5}9D8kC_Gp<~qlr8R-66@s@gZHI)n}#k8iaSy1pJEKu(A_LJm? z(#^QmZORs8c0uG2sl4`^vwHeGX3+geR2E*Kr7!Zypc7Yv%)2xABQ7PHBAJBYLZeG~ zWhW^5LF2&`+4z#Y3;ZRkjRe%wGjp4sNM1j>r)znPeqi_~j7||tf z8l#G_ly70bhx?(+7 zLTT09Ov8oV9}4X}^rt5~+2#xO_`9aRkqQJMuDGZ^Bnk~|a>mz8html3kI)Dtrt(Cp zqE`??5swd_rT|EPWbC=?759(c@Akm@kj5w9c`B_tZgg02kXa) za?AsQWc0Z~j(-Vtbf#L1t^!Nhs*ayf{OlkRr&A2A^bxjg+kuCUpD&EYf>hhdd!|`6 zHDUy~VqJ;@#pbscBYLkXwQZ8Fu6ux=F3kFw|AAbi2}3;ce_*{|NhYKBgayR0&9gBCvc!Q z7j2DAgkU_tpEi;gx_K`n)*aQPH;wq4rRj{9U;Km8hJ5LVwF3zVqS2V8n=oX^t5`~}6ZJ*KO6AD?xX6rAZa{k!p$Sb zEQP@K1b53Yw4hap+a0^O(W3FvSJSKHxxV)|I?;}oN;d_Fn3;tV{y|d#>z7cZQj9on z7qY+K#JY?^1&N(=l9D@LGMl>?4Kpk{0dsv0O~=O8bRP686-D_I4}G@6EYe>E-9Oqi zyR`-#LKTj$-n7FBNL)eJv!OVQmKipAHda-LEreImrAVOWJBal_R!oc=)jSKzhcigM zB7^JyHN!Q-1|jLrMLmkS$uMvkj@ML(=~%n)w1kQwc}yC zX+hDQ^LVq@s>Ai0EM9ZpT!^oHaI;KeAG$~vjqjjr<*55{_sLRS^g1pSpXtsb0^hlG-DJ*uWrHpR_)8c(#i@wkr+_Bj%9!AleOAho8^5 ziHZ`2>%AZs94}bg94~153p=@4>AOo`ZO*VT=CS4+%W8Y2=&Gs4GArDo<2&ewBTx|(qAzK7|Duy7eju6tJX@UCsk{t{eLIw zrfe_yQ1tGL3Vmn0<}}Z)HR&E@mJPfVRZ3@qf8$7504i!I+<}w15w&1Fnj&Y&qJ-$j zN^wFBb7ep4_FPY^q!lZYJvROH^p;)Qh|{s-jsZ2AqwIh7x~lkYvlzCvsNr9oi{}Q* zxXw5FaHuv05vk43HMqEjT)OVv^PMX@X^ivWeJ0P{LCPkqn%as$>E`(tAU|y5s4xbx zSz>0(A&!6Na(24cqgxCY#m%m8zhSS;gCEe=`$kU!>5!bW03}+~$KBX=2us@BDEESS^YOe5>OpoW`EF!2Nk&##)FTmt=hm2w`v08-Lq`gp*8!94|mjUTQ44sW)!atXVeLH$}I*3Em+3&GBw2AG8NPhpj&#TA#N|bv;|kLF5cH zi3tK=&9FkVivHs8S(L@umc?OUzaA!{ArCi7;8@1l<{o{4|4$?-H0(t{^sNnsd?U&K zyCwVkYj-mIt}6K7FfvO`+x^>U@GlrS=ORU@K%k>7V5= zzL2@!1Q_fZnriPO23~0XhCnJ^y-^XCoC}2CSu&5|N>CWLO)Az~O z-~0I8?|e81h-P3F!K|PHxS>{TojzHApsi&|Qh!N)+d!u}mF!Dh`zVvo3_$xNWks4@N%H9Fr$14`(>vqgz&5bp_!919 z6HWlwccub1_wVpS9b)A9HyiP3Gh^_>Or5!+=2X++wTO#JEj4|*T&*Xq$wjt9uXfjR zgeu?w)NgP}4VJtRt7T{{T=L64I%y8992roCj$%LC##|VTtQMbV3H$q)X!iICLo)!C zcunfGdZ=QFyU=ewszAsZdqf!ZIVh-H=KLyaUGx#|XB@fc^?U+n$|oIlR?;MA!yu0Z zNAhY##?{>b-({}ajs%9L`=5zO2GB7}5wgDaDGM{MrClySS}~L%%tF$F?u}>)V;sGJ z7TvzmudM~xxrMou1=~~pG^$7LDaZ*=gp@RqO-CB>S81Fr+<ODcy2)*y$muF?H8gEvGNB$)|yiPY=~zYiK?78$e)z4cRLT z0*i0?3Bz3R(Gd>T>J5V_)oD15?o1Q3c>vUaeE3-iS7m0x!ZIdP-zcd7mppWtMIR$7 zTv)lqfR0$<-hWAQIO@0Xa-|;V*OVUmgAg2q45xO|lbpl}bGTsm zjI30Ay*j8ld(2A5&@{N1XOw+b3;W-F_z8A7qiAHv*S~dw`7y4#!%ADeNk`D z4DDiWRa;roEvfYl%D{Ds@Fwtrlg+Noq{wU?*rDteb+!i&6DMYCmxdfN+~$fOyiANP zNAPuXOP%uaZO=_ggkMfPYyqkTWzzi)+%|cM6KJ8nl=NY_DPqQk!EHakdsKdXC(i0L ziyt|O=$+cGxK*-zNvzTKyQr5a*%td?F&KjE7i`WxWBCHlA~oTPtj_IggpvgEG|iik zUaKN5+^(`_$ag!*^y2UU2Z(!8^&9JOMictujOh4wSoiT%GiJAqC{NkDJ|KxS-V%-F z&(r0K_a8w(19Sj-6k{JL|Hi0pAv7&p9Rn(=L1-EDm37c-v57y_WVRYY3 z;dlP3zlKPJ;Mo(A&(kuXphCgvm!AO*88@426;d)aHpb(#qL}XQ4u9*Be8=2;0!bW) zgoeM?ugT3nM-rNoz)SKh-KC=Qj0%4f+0gG|Q9!n6`*qgfkYNSv85R9z4P1gi86oPU zWTewAGVq1nM?TB)!nQYU?BfyGk}!3kC>%KKXIF|BJKxTMg>Y<#k8fmb)D1WN7Iw`< zmL%v!>&iAcY3#JIOrc3kBEuPa>$r_7a~W~ONW0e_eA=C99$3A{Wp|Tzd9Sn@j#Z7Q zg80L=u)2q(vd_h)2iC=athvF6Owj2!1E=t>1J7sVvs?6C$E3$LF@<+&4IOhvJBCYk zM*Uz7Sj}|ZN+0GJ0=cdqtT}^D)qH3C(d2dUqU`_#d1}da$zYz4MI_ezdVJgsR^w@k|Ep`Zp^6<4Av0|M&>lf-A3--eVd zm2GuwRfJDFBuFUi9t{haB%?^Iz)LEvH)0l5LP%S!#F+)<*qcJ670ZtTDdG)BI+ zPy0sc{+Ayq(XB>4>d~#qqEL}y?RFxoVc5bi4v_dow~koSz{UZ0xU1FF{0=*{^5{~~T>aK%o##dNvxy0uCv?eCxT z{M1CsH`@w3==My5L7W|vXn7bmiaV2Tyi{v>U^2RmepXi^2hn&S$oepFcl|T7NgT1)3gh#7s^G6%&1dlVHTS5v`)}zzBzl5)I5s9( zxd-)1WT)IA^N9(KY97fu?Aq^8`5ceLNU;Sklw*iPcc7H8#2_%{`B;i9di^X2mgbsC zKfmc7cc${csrm_;+57@d_~hNGsIE%ymx&va+n-oe{x82jBzBIGrI*>?3Ua-^W4fW z5%B#nS~f2^A({e(!ieAW#r6o(xo)%Xkqh*1HCUV9IlCxd zy76WSrg;K+DB4X6ek3Rog3_#cVImZY&`AW)s_UeGf{Vtl>Q@O~Sh@I4WJ(I`t?)B% zMfJ{9d>}Q<7QWkC=Fa$MZ#Up}nUT)K@veBE4>Gs^wjO8mcJsGA!~AmdA=#&BGwle* z!({BBDb>UDZ9Ne0jRhIVxyTfQ4xVH(?WPiMiYp!O=stOpIjz>r1cy7rg=HS{*-}S-P(?S^ zp6P9&(0C0-5pY&GsTykkH+Fa4Kyha4oiCFW)=oS!!X`k{ft-t>YO2gLJh*_&9!0%g zg}Wc-Bq%ZH#KR)9w`OPpQyRIBui>XZMV8Ch8GQff$BP&^ne4i2WPRkuv2vZ5~Q z+(Bs-re!=0GcBMwKEyz4moRdjYSSk+9gz&)p1u;SLP6()`+iolZ9>L7^_*8lmffg$ z*Fr2=ynRG0q{3gbNyh@p7S`$7Cth1fS|nv=4j}c1sNwmurthufieIjC42s#B+%reJ zZur^5wW^O3Z1|=y*c!T8IEf*TAUqK`MiR;rOnC+)ab?E9=s?TJgoDpRvX`Y)>8I`1 zmlzu6nY)^(d@@zcx{8CfyZ@*0X?s(VJ-$yz>(gOXXe9rZ{-4M13vO$EpU0c2=Vx_4 zEp5%e_YL$!&@K~Ug9-*h$e)_fW`Y>1+_RWdykd2K${cPnh>9MRHWW{5Xf>&OAcLcT zAvB?!p|=J*0>L`ScYVR|cZ2~a-6z4Ymqm?{lv!))z6^;ae~{NLfMt7UKGy||N6~v7 zT-1?E#2p5gj=rPDJ6|eZ>Ajo6Yt@X$hwrz01KlAS6eMA6xriVCX!&2YH*A_Lf!E}=KgqPCGCkh=i z#d&A-FMowwjO(GY8o~k|=Rk?eP*>z$BJfU8B%i?36ZC}_cd{tG-z0SJu!EHSZCOR8 zZcRWo?X^G{MjVzK0GKtFh)a|N@{FG+aAE2qj4@n*!9vmqe&l) z&()fd3co>6N~OTpd;>k60S~v~V$p4x^T;HMGQY)<9Vc7mi-nJGtBunMc;g}L5O5*w zh@BZB5lJn{Xd*ll6Zr|9b@ix2(l%bC_YU(vagdPvN4eQI27*BR@q_yxC^};HPXFQ7g-cD*GUjIMZJKAPENbc`uufWx5RlY9 zo{dM39gtj8XenIyo#>8744K`UHY&q)**$TfPyWU5ThjcMAI^4Kw~B_JrRlct)$ywH zIQyCRc%%Jwy}KqBq_j7bi0ZaAEN2G_$XoZf=*sN5kcNOr@ULNAg_o6KL4F7jU=_q{ zmU%wJH^jqnK}1Fi;60*egDk=anr@p(I= zPfa|(82tl7$Z3Zg8gkE=pnjicPoQp;-D9eE43rycAaRULSt}V zo90r+B390oij(%kEebdkHEM|cws;AZ zin`!D@_s=1V0nwR7e)I9T_~I^KZ*$j#VG147CV<%8>%|4CT~`BM9f0 zP_*4F+F9=wi>pm3vW-+m6kO82y;O96G_j*9c#5r$c6o8JtKt>wZ7+R@1fgG9HerDW zebjVD+EYC*4)3E7PSufd(}#?O>+XV^G(--^v}76W=q4j{{Z!`n3dPuIL~coL8O zJq?=>mnA?gf9b0>DyUx-zYNIHmW3u=nhDZOuJYjRm`RrQfuJBm(eIi9h~^hcan5V9 zVPQyFi~Lq6cMI70@cy{&UR)C6%jkGMR>bA4o9C4MalF*=+CRcpA8V~uH;doK!A!^C z<#c@Cn2bX&NnoZKEk9>*VO{DbEfXV-n5uO$df%urPO;bT;&6PQs7jdL?qcyf-IV=Upj-8b*|QtK7Y-_PHqc^+!1^!_EAhREYQo~p*yPeapQDE@=J1r z-UHJ~e0RI4AS2Q3M+85=OubPAbyoX&@Hk)#XyhBu}!Rj8dP zW&5Tngr2KM9RZDr=;mGMAJ=%;Z0U9mY%?*J1ih>7BI z`-Z*>-7&SWM4yBG*$5RO4{-f6Q-7khrNGp)!v{uyZHSS$K5l#@+EH*KrMW%Yj%=16&kRiuau=}Ai{iRqCq$M2I)ExAX5BUrw9fMn2m`q{yY9Y-6O&hWnfm0y)d| z$?KI}on2Z^*%>yCwZ2VT<-p`~r@zjiwF-npm%j}&ela%T0^Dh5(ag_94W!u%8VblY zQbE8m_j|vrPw2G1HLyt(lQI7pY7kkymR4D;i8ImsdD$ z1jTXr7&vWdrD-3tKh>hBmnLM{dHy*@g=|_=S5jLTNi3~X;E)0t)Adpy_;><9u2$$(@H%*=W|s#D6OoKyr@F&=`iPCbeFC*m5cP%0;Ju{F@>z}X)FoU{I*8pZKcTw6~SQZKK7a`VE2 zZ?q_`F^MqpeCQv{3TtnOnlqa+Lau>#^V*R)dn~)VB?0~1d7snmoPEdXA$2#010NYG zH!Xjx64zvdt7+CPKzYcZe8uAH2n>dx7-sZ}qANHPt7J2XM4=JUuK^$q<_$=~5W}2O zkjoji(iz6`iD-JER`i$C`~*Av%dRmkvQV$YGf=KDY*iP)njd#5^1I2HIC9VMi6woN z(Z;l-HYnPN+#8?P2DW`A#lrMU0Q-%6%@)jKKn(!Dj>ThTEs~-MkHR|F4*am>aNjaY+7O8LUj$ei9sUKJQqxEaSvK>5b4=iQ?>q zEkvD-WvgO;FTwXM^eXEtxP*SO&yHU02$C7N_v5lK9DSg<0^@ZC83B2Ny7&g& z*~g`1?}#4(Dd7vXtnzwUe5P`~-TMEVXhu1soS_Hw-5l^8OTqci#+`kpMXf4y`?FrK!2}|Uy!=XNDzMm7EGrjTmJHMnnx9Gv zHz4m6j`g%Cq6j1=@t(~0N2K?+e_!DZa3e`QNR=OgS^aketxRz^Od|Wt>nmDiqYXIT5x3xpeX%!&eMNY-Fylx9RKi&;O^Vcdi)u54 zAcQUSbIz-9iJpk7Dpkr(TJScLrPgo(?{`uec{2+s3w20Rq%rgBF$~8Y$jD5%XJNy( zc7^v42EBTt!G`zpytKA*q8-P28#s;Rlts*0=@N~F`{iHp4M$s-#=xe4vzwo8(Yx|; zU9pTPzAqF^Ht)h9A3j4^&WmtzT+2lD8u^5tEWJ3kMi8SD9gg*%>^ZYUmL}A}IE3=- zxpiwG+P=b9`JwMH(EaBl&T1Tz%`&4gT>`mRjp?9Xhl6 zt$p=hlD^NrHLP#2A=VrctphA37+9xh^b4P;39#ZQiQ#bA$!5xovS);+9S7X4# zkP2yKcvoAz&)=(R$FW6?pWk2TUv%$s{aic+yFeG}H`aB54gjl%V10M#PGKNEv`F)6%%wd#WK+{MB4o*?qBH@Y0k>K)i(}6n zU=qYr2?@k*YT}xaSG#K(q5o5`ouby3;8>0%_8@_Ddy2fu7;KsfEumTYp;Kw9MVEY4 z-6>G^i&iTq?OylVBeo|n(>$$<^;~9WusJ=oGwJv$eqTdRUN%{iL38{Xlfwj$l^REL zdjhwbR)wK6UsZIP0hHH!{TaGcT$VnIJ@Ua(5RAf}Yk%~YNIxo``9wGYSBqRjmpS)7 zPs|H47I)zDKM`gvlSMkt8hgv|h@1yhqZ75Q{ zzCre6v{mtDcp&Y4M{$hFjDAPk7^+VBx~-1)AO)j34phZ**VXbQ2$358WHgwCBkknTzNs>k-`Sk>$K9xf5lV?NejcH96^@=d1F3JYT1)$jj6GUo#Iy+v*a_TkrEyP!Gts zHG7FaG*~#()NuI+t-1UFlU#l=lfV_%xD7wTa9tL#kTrN(kS{3eOlX?}4i}Z)4kkup z^}PegeBOtd=lwnZ&a=zucY8Pn#pv(2{^{s_WAHs)XlkLC)8`V5oJVcn8lc4O9?-s+ za+XpgaQ%W4!}@BDndcy`ZLZF&qj2pAYG5h69+mNG^`~g?H@DaKFIMku=i2IjqnRwP z$wK-9!R_wj#QhgwYr8hqm;n9T!Zo!ognPC1Cm6Ktid0A1Vv(0#ot3u5E=FK}L(AY9 zv*rC^l5A;qNzXsX&aT~eY$UA;$tgCCew1!;NzWRIwlT6k=@E}I?eE@i^pkFo?2hPu z;&!j+5(vC;v(==)6szpjm`R~tCyGr?=~uQnncL@yU3@Nwk+Hw-hw8p9SPf!a8gZqk zN3a;zzHkY4*y~J2ZJb{zXqB{x5K{mZcgN1WQB_q4#XR_uift>pShySHWZiG7() zjK>M4vg7b}bkQUwaxG$BJQn9{?Y}jI3>q+>pIkVo2B>%k>_P97`x1M(`)j=|BsrN% zsoRWDx5qmkyvq^-3$+0idWHhzY(i5FBwZ8JaL}Ph3bnrqtHfHPJj=om{~&qd!zn{X zlk_E|ez6lHolz0TD@94PO4pa>U0Dc8T8eSxB_r}iuZYhmt$~%|6DH3U=f+~Jkzgs+ z9hK(kaYB4Ut^(a~F{Yeeu5g}^ml2Y5B$zP?&`?tv8Jaz5%*lW$Xxr?CjXQT5xl>gs zj@pnTT1-YPSYITu^4T!V0lhUGIR16qPKW(PN*;##t|-%R`lPy!a;p%PA{Et25+f78 z9l4-choW}I1zh_WcJ}Okqk=rntt2ZZmx8h=Rr3A4zUcGwzi8CPkKn>-ed&n8j4Z@# z;Y&XU)iL`%H z{T2g8>dI~APN8;PvcsYFToiv?3Q_k3D~?!$G4<_WjH~K9CQ(toD|(Y(komp>e?JmfyFEi8BbX*wKXkTAt$43; zpbMD1^Wl|c@d2|1&&J&doLJsz^#ssg%D+OfUy}$ipp=I>Y!`5L^L$s`m=|4-`u~%v z@Hc}8sr|+}AKzH#pX3t!e~e9KQ2=Q8ka!` z&-v%zo#zYQ>q(#lSiYqGi&3LC3loAaN-@6OPL%Y|@zU(?P3O1L$9)>8#pWq`om9C8 ziky}hG_~{8UK`x#4Hic7n}e^y+p1}|7b}laA;214;ePIQSHP!3Tgcwp>knMNBqmU* z8-`fvQl#aVGU!$r5yb(bguqHg;^)K++}Yz0~SC zy?tJS9P#4ved~C`7{?y|%VF1zA2@BJ9S#=Rr8_gg6_HVNTvOWJ|5l`j5bmE|`E5fU z_^vtS`Uj|2((FG%C$)2Xly7E#^J;%et^`f1rFJJMrFK1;E>TGu=1}qbD!}40*(g$~ zq7XViy-^En48<@Wl(%W?3|(H(J{(k*5JJKXsbNmA9p>9@ z@i+P3$w44u4>h&UwACvZ!-sjO0M@QAh65#NCB)XlNJ0FIkkJB%YnTxH+H7;?(hOXk zVPSH|ju9D4*iwbPu`_MgZ}Lp(En$E%^1ID+wMwfkwIYQ>AG z5?4}Fiwk!ty3y8juh|Z3cSOJhV5Pj@Y>8`Yq=C`Gvbcnoz?cbt^thCs!OaZF)0Fj8 z#dAiUzbHN-bXA$O9I#>a1s8K ztAZD*Ez`dg9ksL|(<6oR#%nd^IH`ENaBCPtGR&Zh76T6c=TSmO8j4>fvn!R)qSS4O zh=Bd8W-a|X;8Rv|jFH)Ru!*e%1LUurO0+=H4rxba&#zI1s~(y1A%ho12@JJ!ka4o^ z*Ndym+wE$-Hvgwk@8zy{-}i$L=@P4Jz3zBq89!g!G>63WB3@3vyRE@G@8fEj82|cP zC|iI!G*{$23yW|sB#oB!C`;Xn+AF&f9%`XsWPzLQHCHR~+E#rAae)EKH8hJj$~R>+ z))e^ckeO#%olDN5O*(5Fw`S><_U7sx=Jb08O!&oDzZVMU_(h;sGE?b>P>z}-D7Lg= z(jH>>!5Gl?w^0WrDySngdp2W8KE;yNeN|e;Au_@P$VZAu(f}mq+Q|}D3!GsbyMP6VMCd!#> zxFwyiFrN;Xja<9k*tVnD>EX}0xstA!#9Vl3d{Q!DeZT3iL-AS_51i zw=DzvLUn?JLIOSLhs$(M!GT&<@(3RlS+m9`pjReP;=B`OEEK%#Y&Qg`BgGN?1M_YE z+e!ks$@&}*H5O3fd&i@1%eXIl@;;bXLAX9*>Pa079Wj**bHS=IC(u(Tv7TJPvLTu= zShSQJ5OrOI*;%57>@+tMT^lGA>A)JQgSq0u37p5Z2VL#~nhvk&6_ke`5x~VUViy(m z+V)25sys#Kk*_;;0DT7W=GC{!R0*w%(Pk8}Ubu1`aS*3LDw+~?x1|N1@t7@G#(VVd?PyPQU9EPFgZQPx0^rsw*dg8j9;d>Op8Vkv2`&x>=% zS=C%|>55^K)69|8(R#zTMPX}S0xa$3VKzJ)9pX`6Tof&`zA<{5*Z6W&liK9ctrCQn z)7V|MZ<9TMl(|`YbcsGTZ$O_1e6%JL!d)M*?wYiB?zXobJIIne$Ls-=-7l0sMqzpg z*(*<3k<0!}WJ7obS+rQ}l1*@mx#ugjq_42lRivX^B(s^T^AW}Rf-3kfxb#zT6h);D zuGG!xjni{G%(oCRSl+~mYTO7_sAz))#^-?$6vg3nM|1qUns>iDk{xXJSElNM3PSc-#hmi`X2&o%ootOQocE-j@wv00 zw?)sx8oWOKEeoxGIC#1ETjc%qE%N@O8DRIHXTX1}yGTyL8e=JCLsFC=droS&D`r?WvYdc`1lTXFg@kOZSD{(`W|H0}%QDE5mJ$`F+SDhLZ1 z25%i9FH_ZYP7(NeORO@WcCpMj%s7uQfcF8Wt;n!l7Bs^<@@wPqdCbNdPQ^MJ@l&pK zCP+o(#^-$#P{Rsu(6iUoSfqg2C_D5$Y_pCFEHj-gYOZ>f2yC@c*ReM16*V5)qGxwy zA$QwjzrZ|g_d*BLMa=#n3*E+rDIWc1np2XqdX-+2qKuKsaM`;4IMuD)RB&f4qbIm&aRO17nrzbZD zHR1UXle5zZQk(Opijqkje8l?oVp~WD@Roj0{z)4ZUJj{JaHf~_1>=-8%|wrMYo4Y_ z0KJYO#u~!NbCkRT7cS>VyR)MWAF7PS8%`%IyB)G&S~!^2s$CeLQAhE9T^cI{jlCIG znxMoeRwpaXw!oNjn$;>G)4>P;j~XW|oVCWXL4J>+Wvw9U<5qXm&n zkaKv2gs9)>!}?Lb`4lf=($4ns&^58oIjpPk3x~BbUyHIFMB1-N2Ps*OkAC6#&(gba znucW-`gzb-hJqIFnT{#~@5vUie5}^9U*CK(^*vRRk8-LhXS)#GtHB=?4hdfR%f7+_ zR}3s~m34H;N0WW5yuD&2-kT(cGDnIti^xNUUv{q%O8&G4<>Yf1#k!ehV$SC~$hG*L z`volEJo$j-&ROFg?68@M8?u<*lHgT(5jaF!>b-5TaSZ~bo7jh!=3W2b@rZ>p{|EsX zJBl`=ovv8}4vgLDZs7s$*c%6j14@ot9@zR}|F0|TL)1##r5|--p@3;o-~ow|-q~h` zFSK5Vbz+Av;}^-Egm+sDY+ET77Brks%*z%csTU{~(eoE5@#fh-(bWvwMBX3Su?Z*n zbugJi^U}SiC5%!5o+&=kbD3oR%m=o~@0~#{rH0SD)>`}oQ}zzP{0a)HK6v>c!W?oq zzK}?LKdRoK7D+ac8?A-mkEu#fDx`20&q(Av>o)r=GxJ6&7S}nXXH_dGj7-Y3;E<%K z3H{`~UMblzX^c`WGA}sfR*s=KyHY4aZs84eavvRU&@uKf^6=k4eEkKDFXUetZglf# z$@NuPPCj}?>7NT4yAGsiSL{&Rv z!hMar+ipR2tre|s$u9I&B$g3?eH0Kdm3(Mqu-<38QGvzo zxod8Pg?Go!M&-DS46%h?>YBE=Ko#Vbisx#6?H`i(VJ?4!_8UenUGiOj?UmnC6g(N781!n)C`3mDyxjR}kb&|F!j4*3GA z!Gro|^hL`ex-?NjW0|5LSO^y*CY|lG%);^ttR7u#g)u%6OL<&bT*RNUniJeY3@hE3 z$Cer~T@fzrQ8VgVk4FjJH^B4?=c3tkYPw-Z#5d5i>zOv#M#{NYf0x!Qt%DRz#KBVEph&c^i3khk+q?+BQ|#L&N0E}HuuP2d-Bu!l2-o>Bc);knaX5GmoTa( zG6dVg*!(59q8FuC{6}VxzelhRQpTx?Dz1a(abk=-wXS~P0k*PC>TgZ?lFDEqHVnS# z?6~Ya$$_jNl=hpcIL0qU_M+psH?6bxbeNVUxXGw0-Ly2TS<-P*sdPuJ+j<|0e06Z~U707bB7U9d#%05B^%xrk-ksHvc~j z-s-u8#^X_?a z{YT)7RG%8GG)IJSM|ikL%=0kmKpa9`;_p7FuDgyf#H|v~gxyIPA~CQIio9s#?>gBS z&e04;#1fK@sCi($xS4R~jrU4WuzjEOq~AefaAcq|&>X`%T&1V!tRp)&f5kB~5s6Ef z8V6Z*Ws{4CRhbK-jx7gq+3ThJR2W(LYG}BsoVDV14S1|&Am|Q2NTtUi7FGkx&?13k z>9x!#tt|m~9Mx0NRDa{Kv~{r6>XQwpLNM1Fipw>ma~O5*77wDPo{33y)h8Wf6G&Ms z7omqs5;0A;h-@iW@0$d{25HJwpGYJT@a|(7A(vbTEn(^_1TmnbQjMX@`oex$K14FI zV1fZUT}_#w15^ZAQIX6fD4p08!!hQ;q9Zpqe-RyIn-z5o);1uzj`Ri_uJtM4sac3( zE?r)>H|~WQB3MV3X^|?Im>{uu%Z(q)B+VUiFV^y9jl)=0E6^4jKeyNDtMvmo^N&JH zeWt`=H|HMWvG7Rn&ux5!C|4GM!9f*>3Qug*XdMg`dr&S(t7OlhZ9_A+-@DH)4cTuA zOsR^Z=9H!evp%amI&}<&Q?ef`9>`o22GqB@>sK za5)B{0Oj87m`LR5pDSyJr7;<|+#qWUt`D$KxEC6uFTa>Ta#eh$f- zzzE7y1Q*<2KL5oYa`=lIlujvb~1I)AwQQX*9KZHAzK3HFljw*JVP1B0p|~ z5>+SrYxI>)xM?nD_!pb4_%(axLB};|SDXM z1n8pNXhmXO4-vNCt6n}@zHGI8ld1DKXJtT_+D_GrH;bVOQ_F-yo4e=h?(Sf;GW$;m z(a);*301q^!Pww7aVye@fyKp0AL)qfB3^OqsjD^jyRNmhDzJ##C`b~>uj=~lrjvqP zU&i!QyD~RHXl9;@GN?9k-?}0&g*t*~p*kt#`$dM*?t-KmF{4ezZk*DWL>;?T^R>@c zrG=ZJK@9ElV4A8Th-rl8eZ|-2BY)Y4f^+zX*F42vUShuYSJ(#I>#^<%=k@5OF6&jc zzp_s9vTv;+;ov>Z?Bzl^3Ir-gv+cOWj)Z+hMM9M z4`F({PpS`|V6hlD7Q3Zr;+R*z4;+2rW{GtJb~?bxFL&!lsz01ViOwDDY5JK7o;HP! zCF#jq17tHj?tk7S*A+$4k-K}n8vf;6Cbquw*4d6*ljFu#UJCmU%Fs<>P7X=IqQb+WmZV$az$32#3!ipM3`U1Xd{9bB}jq?mD{LdZL?|((R#T9 zw~z6|llkI_^ z5T7u$ckL%0l1z`m2_0LV_X(Oq7$8Al*t`x7yX-x8kazgN;S z%rd?Ye;<|%d^ffIlS%M@vV#62LRXV?{?`rjS~BaCMF$ytDro?X2$Pfu?7$EcTey*N zzy&BJ#zk!*vlX@Q5VO%jg4ERe4?3Mzg+VBI6(yYm6`X-+kguS=cZi5R*YyaS!bBAH zJmKf_7C-w_ypPZ6eym?m4#))_{R0^s_C`p`R-WTMjp2BOsNO>Z>#3^4oXFRurby_p zIxL2iVAi1tisdP=6VFDy0}NZNwH5^9-;kR}e2U3s7?~P2E=nH-Hi&Z=d3<*W4pHZj zU1u-qz$c@fn#WcU$_H z7*Ak}ugI^#4L>BbcLMs2$c0;N%5fWWY>(L9%x>ez`ucp#b7~IK*l~v3+Mi!FyBrknC25omJD~xzXb&p5 z-gko>6}6fif#$Fs_JpCNAmeD?R=tp)zs)6D`n6Ev6D(rSVcj=L?I61Dv}+wuJwfob zG*^m)HIq)r+4V506is zYdPH;Z|52IE!W%2sa#?22l0$Djm&nYE}sVILAxsAwk6tnNKPT`gmIz!;W`CmV3-_w z;l*DbZ-%BA1nh0zDFa-*)3AR$8fpf5YyJ}aoemZx;PD)E=PB!kdI-m`MFn)Bf}b9< z{N4rdoJ%Sq0ZH0dMA6sG-y=?6$$F^=0b?b#1=)0j2)(JKhcayT!m?;9f)^41|A}Qs zoyG$Vpql(akM{gG-R8r@b%(0B&1v2-aseH1>#?U5S_AhT=kj`;>!)jQMws`g$yH=w z-uN74ANWx@Xxu2qI^XB)wFvEjM?W)lLll#*joARShc$4YU>rx)R(_Hl6C>*1FT$iL zO5)@T!&{+MA6~i^4RKPHUn7{VI^fsy=K!s;&B$MvOJOjV3vRJX_zMl7E-uFAc(Qzz zLt!G)&r{z2lThr-2*41?Ip!37*GSn9H>Yre?oM#kr@p}0QK)=ZMm0=nD4NwHDJ7*? zas%zDzF;{(*^3b&VUQ_xceZat@j-H$L)i9H*WY-mXO&q+1}q93vgTAOo7hW8x#sKN zT-R1PVtW4HOIHw2suzId=P?3y? z*@UcJ{oH%{+x2si^!f63%KXF9hjt(Kj;W6#Z19fTYP2?D3A~_(XiTE3X z!H1eHZKM%n1Xe+05WUX~l{1df(I&$}H#{?K zsViEiUQ^3b+Y_zGUtDHcN0_EZ>z|65HA^Mj-wlnwD)eF#E%CfobdQw<_ z)^KYatM*q=ZqR-O@=BY^*_5zjkcio`Nap3D1B)USV_C;Dme_#9Q(TsfFo1#81;>m} zZorZip5ey&1zt|T`^PoZkOq>pvA5aO+XmsUIAp$$%=HLjL6eDQ@E9m+5^jNBlWVzb zBcYV$5>_@@$4%S+qU;^GERC`)?Tm;F+sLqO+qP}nMuu(MwryqDw(ZC;`c!w_9(`+k zcYIZU;heqKyY^gj&Bt_^e3Nxj^Qq5(&$Vt&!EOBa-ehm_W19zlsaE#cWEOcLUr;8)?F&@prztY=^jQI6ij_$PQOk0pH;4(3U34GK&w zqsX%lWD#3lMaYbjO*MFda}eF$b*he`r$7R!`S zR43Y#gNN^ry?g59r=2dz>Fsk3ij=UOXv4)@CA4y=Nl`BgYVv?|j14I3W{a>W+bl!*5gIFVI`AAC(b68hO5-z>p;PK6A_B4rpxdB$!&VI21_S^Y})>xdBUn zxthwiz&3i;joZ^WFjwMdM#hx0WOitvp1m1h7i#rK7~#k+#7L@;ee@*{;^iSBN1tH&eT zQo5PuwLiB8bry_0)Zi@w$xlbWU~jH$UMT_~RzAPruGVhP)GlD$p%uCZikj>InE`g5 zVeIy7f`sYc5wUrio`hjr=aR$A;^jM{Zr_A|ZQY6gdc?23A;3!A2rJJDVNK$B zG$v+2l8tOD!}4Jz2`w=ktT%Wiiz=JjQ|Bx!OQ>j?d-sX@{P>uGRC$B-v3WErNL2~I zR#)@jt`U8vUmcM@MIR@;H1UmZ05ch$i}Zaoh!|0MJM0vDKm#jZg4@#~6w0~;zts&^)`?Obb!$4TnNZ{f zg-pJJpSx6g7@zu|zXMOx(9VD7egb^~L%pGAA@aB_%+H6EydNG^mS98VQO+IuGW4mLZoTyKtwII7CU@U*qZE= zCAd0I!Q{c;G@weHg(2c-T+c7onc%=NE0g6CbQ-R5gSinMFSw@S@q#X)$a2?6)}W`@ z8|jR(BGQx~IH3{(sI%!E%qo`7)S|?(Q1k1&KdP3i-G19k z9E+Xa!Tr2GetFf()yw&KYTQWe>EZbLJbZb%x$(nLGU!hklt6`p!PL_YjszYYZ$DLb zfS0!?q2=ZeQ70LUvS;yRiEOdJ4yP~Jcgfmkuil5*mcJvNb_ArjV{e<9f3ii#=eH+# za1>5OQX+A6{Bq62j# z^L4-PnsAR=>Ko8NQdf1Mt4KB(W$cUDHD;r{8Lc#9#O3{rAjFQT#@RtKY@nG2XO(3Q zw&xc)B4*}pFga=GuLIr$Rx)_0O^otq{7{cn1Pkm$40Jt}WHDS*cY1=~ycGAPwhxyE zI&Ejonmxg|EIJ6OphIKDS9nHG0}&*qpLmM}u04FQNHHl2<$X)hdFP)uUcIOiFyxoBNZR{!zdQ9~Yds6h-?ScC3Z=vnK$v+gs-!mie zr;1tp312`LT<^4T@v*zM&9jB-Gn; zQ=d^--&Sgo%P`BJqYYG~*LeNc{W&czXQBwGg>-mgSVXF53TUz0gehLSn~cf|>NDmm z{kytr1TYY>jMO8AhV(PNOt+)kcqOY~&oTWa{uPL@(KUHiw~uLe@tp8c zMb`ZNFZ4ZkJfvy%Uv1MTk$28L<6XJQ;@#T(exK&~@%Kew)DwI04y=O(dwwoZ7bo@kQ)D=v{URw;ZyOshOOIM+Cb^?2KAy$bd_I&(6-CL7$R)5%#2BcP= zckR{c7q7p3fh|A&<}sWWFjc3`==oSQoW?ey6ZurKd21%)0!WEj<;~e}o!{~_6tipT z=GGs?=-C1+iCEq)uZlj_J5t_noQ#c+x){;%0KYmIY-U zPvz}&C+sOJ+DRrc8NL&C*Suyi=}Oq2J?Wf!+T=!_8kKq7p>u3_wOq9LVbP~ZaXl;< zXU{yr{CRXXoJ5N!Yts-Q?u1*Ec@7Y1{NyGUfI z*KLOyKeA3>(k%R!V$qk~OXRh)ABZ-!=6m5*E*j^ntI8j2Y7RDJr!BX|ye2?ig-l81 zagx3`!XJ<lko}TeZ7Vl&M3FqAN-P!7DAenESKN6vQis3 z1JrB7S%%|!Zsb~7U+;dS~_lx}D?brH3+YEP!wBuh^`&6Vc0CHkOp3JDrh}f2P%5}4Q zj>PcFZ92aag?k9i&f#)a9F$1K!0Too`itT|6^PzJhrit|jgs9imp5JAdpTArzYj&b zq2Mp6<=DQGdC;M2?%IH#mgp+bz+)si_Wmjl3zYIKoy<Va_`O_Ya+vl85u04Z|lsQdO-W^q%*_!jN4Ek#UZaW`)Cp45hrkQDE;hInx#0=V8WqAgm* zLs{04CRq&RhzfXcuFt+qAhSh>-WfUEX2WgBgj!K4`JDeUA*sIsJ zH}bsSorA=dpv1YVCz{2hYKjPV!Pn4x??)nU&!oSkDE5&Zsz8+}jp4_RJ_{$uvp!7> zLCiuBr%c`G7=yr=mGB+sT&KVXY52Cy{4@FMFI|Y+Z2W1+`R0#Ed+y&fAIpEV!a1#j zrz7o0A8G4zrUMIF47}np!8dotCMhVx(bI86t_sZdetU*%Dwp{7PpnRD0`1fJcr$}BTy2-0#cNs&z1apLQlyjo~p=CZ{uuFdZ2>Wu2 zVY9w>;3~biKSoJoWAdut;;v!JYW)7i;CgweKR*i)5sd&M;=hw%@sCv9|DCD(KUQ^> z2}gj6$b%ETH1Ccy%D@=Lp92?f%>fJqr``gI$cjcDQ6JSOn>UZ?l0;C5$-u-ohUE*K zV%=acD4H**!uuP3SFfx9qIF|tm6BMuLh<>E>)GMD@;#Lgmk&t3?}U`P%VghXvZC1B z5bgmRnl$7#W?!4(j<%-4Xl%$!{ZM`1J(qy@#9g+j4`IUi0!DPqPCO(&;$Y0O)I|%- zYQIG)3mJ6>%~t1U45uAa^l1$;M>%5$33K+MOkK)k^sTv6Czj~$GjnJ1Rc=DHeJ4q2d~T)dB|B_pM34??D)Q~?^~ zyRKbv3xr_1QMV)qxveo9IhR6ZH#NDiDERSg?_?YTN$--YGVnC~kA$k(@&i#A+11dXY-;nP$2duynuTz^C>O7c#%8=b%_88SOW%Hml zP-(VMv2v)oNc*9&YbEXvW?IGrpJY3!@nB4A><*}3`zxGl75z4;UUd)MaWu5?@x+?H zSmu^XT$t#bk~nyGU*e1c3J3IQw_8oL)*v}*6!2L}&mbd$>$tyq-!5`T9^KaGt6sDF zQlvV-XFi7Qbrg500j5#O$Y9DEEr58KL=9b8Hh202vJn@bC-*K*<+dS{M_sG&g5eS) zN9`Tq0{yE^Ah^yRIhO(Ddw94{{dbnlfidesPptz49wlXOfS<&W-PfKRW8_J_ zQ)Y~QGfBb1jhKvStv{4epn^Fb$MIR4bi)cp4!1*vqAIy>jhJ+>di(QRPdDcveXwr) zJbo`ohll=cE+5*(S+43*q@i4Lh)uwfZ6>S z*2{;)2}+XIu*P7KXJmirV5diqn!0o1QaK}L%3v^!DKp~u-SaRiwVye2CsPk~(3?)8 ze8Yt&z0$PZA%K;8CmO@&er3F43SFH2w7`fK3!{qsAS3P&cNO5|i~A)cf>>9C*4U|dN5#+Er@POr+xqB3bRoWB(WTaF3Il|@ej8w(|W2)Hb&Lie8#RAHfNq~Voy<})bD=*t)WY*#P0z%Bl-Z6 z;=i*Q@ee%A|5z!M{*SxCw6#fIpa+Fd9+7_UV3!m-YAgZQ+ML~V zHi`Yyjr*PPKtJ9tz~I0{qwa!C8SdrYd;IBs>|@&d-Sz^e4}Reiq+Y&f0b2>Pq*GpG zLm!l>^$wF<;!B2Mx}g{@JI9A|Ov5Kl(J;FVDfiqSKaB@Q^%OXXsoR3Q6)QVmR>v4U zq+u$YBc^z?j1r!#DUwYnv-5GU#a+LiH45_(j<^{S&lDn;S^W6~)}cjCBCValIA20$ zz4`S=?iIh#%)?PzH_0I}a^f1N!`HjcrH_6rvm;l+ZR#(>?JVgSmEy#$HMTYLZZ|6~ zn#~?vQIpnD`YHx8(^RU5npMUO#OM5tbGBJ(QumkB;&t<3bJJPGBPycH=Hj@dN?4l! z$c2|#_#bUa-9fBDWjS05TWBF8+As7_w%~WV#TBm(`fziP`_ze@Yo|~vEL3UwuC}!Y zv(@&Rx+?QIJL02r@(#iul@O=3u6jR?<>RXo(Bn;u$Xa>>eC|eB5>)WA28hSb1b{tU z=3!dNk>2*LSBW9`5@EzB&Ad&F>^ZBPmtkz*AAU5Z5uH_eP`jH0p*e)+aa_=*nD2L2 zp3z?Ln(*Lv3dV=3Kh235^F1vm=KlAkn(YqX?;e0ogAX`94F85+V`on%WMC^~ZD;#W zH%zo_zoj4pLRPb!Qgv_up8*BN?VD``j|R8>!n)@up7g5B3i#jhB9)r>4U{OW^WMn|&G$lXjWrS@lH83x z2FU|MsBGC0t~0H63y!kGK|zrk$igKJC#@KTU5bP1n}B0CqeeiUUAxH`J(X@ytKY|W zJc8~u5ZgP*g>c$tx!w+t|Ev&21q6H<wxk1M2 z1?o=rP7L1^QdTUy51=pd0}g0lFhgfHuVd}rhisqALpyB^}oS2jBn$HiO{sD zaW~upu3&OZZ>8}+1>ZS6De4p~btmBG?~446vP4AR)uQj)fB)q?CHFrnd0LX_-B3M_ zw)Q&IumY=joGzZTj?Geilnn)bmti~Qyx}RuvzSo`%uz5nHRp?x-idbJs! zn5(!|Nxb^0*|AX6V_77L2S*h6!s)(zc&|@|Cx>NHKlHLO&raK=$U}xosd1%^J(OCK zqe`D8lra)2lG2rFbs`^3EbqyW3UxJ0?UpOhTuwZ;9Ew<~tEnpMlDd+#a{T;ukz6hG z5FH(O!_R821N)2aCuRB!UMu_hLe+`kbVa?$_Z9GqM1Xo9X}kC`BGMzU>k+hYv1i~A zSp(9a_(>(&vhf1%8g;@-_Q{e}$0*Z>5y(h}711=@BXwsq!%3Y1<6UEu8?fb{-C-zW zBIAdZT7*N~%aF;P${~LbXh9?F(U+l$NDOTPnR80Qv<~+GVDMx0o{TEBYR@AkMZNeh z_UrT*2Gvs1u~@G|hhJ{wzNyZU(_W7@BgxPIy0^cLSBiE4IB8G-D;n#6c+#vb4F1VZ z$X3=;THr_dLQ@nJqG)Z2hzQGjltf6@LOeWoE*TKQG4<9Sh%lHhBBe;l-S3?R*B3Rz z&iPb`F;j#ui#h0QfB#g}61i55=@w+kEm;y;qvx@5^<-Ot#k0VSGdu&^DIt zbL@BScp_cFB4hfib*?iM?W`%k#1@RwD6nKTzKzdRcAA_OD%%DgoEM(FTPEuWf?inZ!27-t4b;sAYO`_D14aT7T%4orI%*EkF5%&XgcpMp{)+Us z1W(AzwjAo1-_t_+ZPoiIJUr0IsOhBQrSd*V@-E$b@tD>3`^ZX^i{eBQI0g18n@l|Z zv3SISLfH-L{M*#2(_gK!Q%ZfZVLr`^_>o!lNZdusSgnboxlx5#Kp4$~`cRabRbdrI z!;}`~$H_(F1-RSLh}49L0=f|-#L8U}`j}Ldx?*(^EFoVLS4L^wIBFs7TI`Y?31=M< z(GaZl!}LB20;aQeyA2~el&kVgH<2BT&ZL14X5gRD562LpB2EEfHP}GF90-dw;l}yd z9@yO@K?IWaTwb9Ax4*!P{ul$ArZJGzmwmPgnMCRdOpwrRj7jpyoA4RLi6AVo@<~@P zWX~2xsCEYyiV6m4QL$D&ybzqFCH{Dl26?7oAa@R&*T5jCwb9ai z@)(OW6hq0dL~#l8^>X7O2Wp{K7VVK=NN`tI1LA8;JBWV%6wthE;ZrE|cNa3th$9`pr&vwDNtv?76uycR{k&dw@5IR+3-Gg|yOB<-hkv zX9l$d0^@qcg?Do|b|s~ig!M2d%~dz-aWw)(=u%@5YCYxcEb}TQmwn)V zgM=8>`mH)ql0wpyf5tq@+l393ppi6{)LcE4vC_pNduI^i>oO7x&>S&sMicb0A;{DU zNt)r}+sAhPNJ#n%5rHf^gy0`CxY?}Q+-5IH z0w9`Iw5Pv*9-(11@Cj-JQc9b#BIIa^5##CzQFnsT=!%h0Kv(BzzDfOT8~R1QJj-5W zn`c2=UPJUHr1<2JtfDP3&TDU^SVKtl4b6er0ZJpluc8Y|mruG_J4<~E`Sz$SoW(ds zg=cCOb30&DbVSbO6qV?d)#-{f@2`QxB-fE5zRCzmweZHv<%);t9ZCJg-zs-UXl9hM zBRf*b?Nb#$f_0S{HSuDzCXCL)5b1|VG?*dyk|>VZLKL+VF9c7+@DZVF3Drpcad1hn z4IOpO|AL2BUg54VEY%zuis@9;C|nq03kgRV9fY;#+QJ0 z`2Ti*wsy82Hg+yf{~JN!XyEZrx45d6(}E}pPlE|GG$PV{9$YLl1?Xt_fgnK=F$*jK zP;2;tAugz-!2x+pUrH3Q(93l0>B_Y8i>4`*F=w`~Nr_+KcYuY|jHE1#FwLwOx5m|W zx7Q8FiEj1h1RmcP%r31uEyh4UUVhxEi=(zJo-sKsOneJB&>bU~TZQ+dn`JzXj^ zC#S-Eeb`L#6*SI?{Ib37ASf(4Dsd_G#yvEYC({GlFiw0eWM>B5dyR=2S?F2bH2XwJ zK=wn5O-jaJk_8^R6w9W|3^&RGSB16|?bfJ@UP})ss0Y;2oL-#?HXi_yeFdxL%)?^> z@G;l8qZys%ivBPhbPm30TWB%bspOKWHQvs4)p4*>6c9`j<`HiIO$tCpl;0U5JUcb) zFomRxs)^KCaoH^B-Y2J@WNDm#oGP%%tO@WWO%SS|%C~;|$J&I|mvNC*U$M6uGifN% zv(VSE#U6BmBJ~$Ks(CVfNkDw-5B?*olu;p&T7N<*=URbl9lBE{CFC5k)|6__O7u?6 zB&U7P_8*Z_Y*P`FOV5sHn6)ZjIckBjCeV*N3QrxnFrA~;N?Z=8UVYWMr5e`=mym4Y4JQ5{@0ugiIZU+RJ3`QVvF3}(0+)_yK z1a_%fkRaAD0%DRf8O})eST0F=uUrPBNA5_WKXJ0?Mlj&OForNh7{$`aGM(9`zeh-$ z{wF=nc$M`GG$+gObOHtMu5|OxL*8MW@jgJ3)+@FDPiSO-f!G|haJjAy!W>S|Zlb9g zgLAuIs#s1!rlb(92gBe|!7tTpvL2<>oSU#CP2&C4y8v}j7d20V-5{0|R~cdLkU41t zFsh|G+|;4Q0`v)NAu_tVikQ1!WFe6@X||$;4fQWkH+OCRws&jfP=$iG^u~3=4fYp` zC;|M!FiX-KC{WcXFCpJK@ts| zp?{X$@~Xrbn1fI*+RrcgFkaazi~nMs*zWBqrfSZ$!TB0?b(C?jqvJ-ZnUsnDerh

?%+RwhTGUug*70ai_^2A)*lgzxX( z2pm0aFB3cqA1OY4_P&JyH3lhwjIXp4pxUy+^-p&Sj8l^@RxZNF;cQpWCSyqWfS?5l;Ou zpqSi}k<>{6L&C)8oNW>=S{ zVfx2+f6$g46=>3)wOQwhmDlPo=b6Zks(@f>Guh*?Ez<79dU)ID1F^Yy7Z&!-a^1Yu zXzOE4rR3b^wjDY2TB;bIzAb$mVg;(g;6jFgkgT8|we`>rfO~HdP30@@+S^5k)+F#z zvS>IFg}f#pFIMC6P^HwEg-45$7yNPj6c4E<+Ujc!2x(qNAV?KZzXkDY#2r%5;MUrU z<`#mdd+657lV^vio4StUq=Z*Ro3`*Hj#0d<+Svshp9)9VUj5Mr5cfk61@A;abwR_7tL{Ts9dD4uZlv z+eYn;ZUnrAY0T|LdFtCoy4BOj4MfD&hA6KyUsNF@NqdAuMnRBwjH;<#M{iC(f$2rm&wA z7?xu9lv{p1g!4#;F#@rQMeH5>;*O7PF^$cNnM>GFREtW-tu$=GIEhtNdb!ln#1gt$ z8V0|2Rp`O-8Tg7M(63t!MnOo-3n(L2`mJ1W)2 zc?u{(5jDXj(9r*gc0HG3l$=*z$hZzgW(EQ4T?Mv7cdSnspZNpe;%#I;$Wbg#*{iyeuY4Fq|uwM^S z+N#hC!$(*@2>9eo7hf~t8kO^66r0qZkigasxwRayBROP~HDFP&CZ=m|lZbti3D87bEwqb9w``Q%@(c+F7CF*iU#*#*${{!;CHofwyth1Ix~8|@ohKC$1%&HiO%QT zXu|=kPI`$f`|c($iLcL7P?KJ!Wr7Y(ldJlc|E@If*DTfeaX2=spCy!;qA6MH@Z$dY zlnXPn9%0ggwwz2nt<=t~U0WE6Y?IKRUbD8 z&mwp`ownO}wza9@t8*;D+|ur?|NJ{xePe64^9JCdb;h#wczjH}725f2z3q)04`wpT z|2it&Gx9FjRf5g+XKK36PK(bnn4U0@hdLF)I?j_~n6ZyAwElE1{jG~u$DPy%EF=Wk zQOAyjR$tUNTNi~I@>O^ZA@l)3OT;ZjV#k;FY+}Ki{rfzu^);oHom;ahoR7H4P2))&(J*Lk}U}>*B8 zL3xfY@2SfF@8h=E5)Y@!9%zD#u@u{FJ{ZAU6i%sDr-zD5Mgw+Vjx$pqikaf37i&#xkNO&luR7Fz!RaBg%(c0rMUSU4(byT}4+bt!JXO z>^_PGIU{s@uArN06DRz)@+IBkkmm!$NAx-@dE?$LmY|<|27z8C9Xv~HMy`YAwhe!# zj*v|oZS32=iqH!N&OL-wE&18U{DU0x@tpHAp4C%rp$GXaTHA$+ilb+G+Mh{abI~*m z+|mkXh3a?m&PwO`@Hr@l1Z+BV#;rZ`_-BjQ!eEGwaD^XI%Hg^L*8`}+h(xZOe+%Fp zDz>1`-p^QntNkg(U6MmkrAP1#V1m*ewkmo=%o6l7>nh0o{1-*nOK>!j9}s5Y0m#H< z`OjJoK?A4%+RRt|$JR9Vmu%x0t3f*oIRaun)as+)PgIM@VPH_`BdluxSzc#Aumcd| zLyk`w_DppS&HXkI3GV_Hkviv}%6Z^-7zN^M#wN2+$DiJR_L$XZ=9hW{ptHX=`0adO z$^EFj6#_>5!;WUiFUA@pkOm1y=6vX!CCwiyjSnVOExUB!4D10@4z2|&8xR9}|H)zRT3qxDBSAeyxGDw1RbLOsxPy3KUZJR1o(s%i#bYCTXQk*Si z#=X+uqywCB)f<^vbJ6DW1Q}{o*|xyas2cyiANP9?McS?K@ldoe4L}ZNr=GraD8$`x zL9md$GOB@{#y6V2Y_)dsvM}#+e*WX%6+1aL{=s{udEVYt?m<>v z&^P{7#gxRGD3{7jmCG6mU86x=LeqKLUR))a=n8d)BTdUQszVn^+K-XbXtbM@{`alA zfXu#%gIRP(I4bJQ#@>1c`>8`v#!Fi*XC^B#xJKFKuK*G$3aEdH{LGK^@-zikwC{Iu zX@QOs8S`p6|EQ$HPfs*HAff}O(xhigxJqC*&ymEng$?8WQq57UULD?92aQowf8iVZ zW$Lm^5ga_I)8o2y8V~M7shPO3A8Fr;I7(`kP#?ox`M_E+utzXi8Jly-`;XRfeqH5( zxM?bxvijSHHC%caH(kXnEmnB8FSc)^OsdlUfv4OW$0#GMvgBEV0t(YxxE6LMnQ5 zdJMvPhs-REpo6uPt8vvW^dWWepCU6XbIEQewfNIH{Nd+PJ$)JPTX_*3Z3U~@;{w^K zG(gm)uTzJmGbr~rQKyXam7F?;d=IA~%VzMvdsq$zY~Gb@#sNp-Zp0@|kvS7DITpM{ z{8V(lFUfw8ZQxi1Rt`Pxp^!+XMv?ZC&*Q0L!CR-yO-?{vy6`oEsPfAAl@6seD6uxt z89QMM^K-OE?pW%Wi2VZgxO?-!F5C+3p3y2sN=8h)oq$g;-;>#>;a*`NDMgA^b_x~` zexMU8J}^)dxz~db!9530DdSw+*TSQTP*#VSz z)26?9_@?OAjCX~QUZm z4Wi1zXobJGL@muMqGE_wiwWyILp6on-3)JBkAZITxr^6?tPwBdNR6cq;+EBg^r8$t zC`^oO4B09Ds>hbfo8I*EyaUFFc*f8`Kva;9sQd2Gc+r&-e|}NB!UDO1aib8a7|!1?|l{DL>Cd9XltkNoCoihMCX+gx}RjgYM_Zni;T;%a_kxU_8#)-YPl zSRARNC~INLh>8IKgu6pSF4WVbwnYZXO?UbnO)lQ2UqPL?0FiO4wdPfWuoz#Cx;Rf{ z&4_$H(OwSnH`+6EkQ&E=G0F_Z2ShApz#4mbf(7%L0sQ05=9V0$+nb ze4YdrsNVPDszaVBQ3bGK3!`AsTV5F|%x)iPLG7STud^ALs=eeUw*z7P@I9lcL8na z2@nX+>zLY~vz%t!rrq3b+{oa+KMWB0VZnZ0is^to<>!nd0?F-_!OCseOY>uG0?+R; zR2^9ORr3IMxsQY(vu2^h1#{xUj% zKvLG}kE}+MHBzrJNpxv^OrK z4(XIh@|`TJ>H%}q*7DwS-spw%>m5P5=aw6L)?COmG|Do{@t&)Ddc zt&C5gY67F8fNfi^gRdUtm0qEs%9-MR_IfnV` zXuV8Z&Xs-E=%9Q%x1Zb5MDWj{gEh2+zgTHwYcd$MZd{YPjs!xIt>mJX291CQRd1!8T9_ zFHX(K?VD_q`qniHjdBnnDnKCRe+j7)PN6fu9doX;8b;#-EfmX(tG;8v6?b5@1TDuD zbM-JeJ&>`;VCBQ!dD8cc`KjD=Ts~k^3^?mu7e+3)v(q2YFT4P)q6W8LWz=DrYSq2c8RfvE?gqlZNYT_aWG*BB3x9(o1aHyBg zU1>LM3v@3iJ}}LfC|F>fEz~96AX!i?Bahq7iXE0-mxL5CBzk5<6p>mz2as!%jy{|G8EXyUxV#7w6Q6u{R?moFz za3)VcD6&Hqm49mGC}a%|>?R4bgI!*F=8(m;Q3r=-myqSZQn$@-ajzT!wxfTPwg2$d|G$|b|CIBT z{uvtgD7ZqYNV{FUEhVsWYicQtARvL|T}E){P)1Z^>vnOedXXuLTp*CUh=JrYASO`Q zj3T`KiPN^5_}%Aj8d*I;IxhP($zeAAI&E`25j#Bd18laIAVL_WnmzB2fC!w3eH*G6 zbC5lAfDs}w=0GXzg#8S?GYQkmD@{%2X2xP;4Rh6)^9{R@{huB}jCIBkl97m4NCLV$ z$VBG5sO*Dd_SBFBwj_b)j6Hf7V@FrrUW;>)6?zv1O7T7R4g-!F>SOJ}7U#}9J!*(C z9j%!{aL0^JQ3Ug}~RvFb`zA?YOHn$rk{ z38VyqT#EnO^@y{d*1y}y~eJ8s=SzZ#yM zw=;WAy3_yWsC7RB3|urYWNcn$7>`qJ^5HNv5-ubKT@FMA`zs>+0k{$<=T<;U5{S|9 z%mF`W_@z|(6n#v7ZpWkasTOSfL3{a)KYsWgZ=Ba@8qI3`Jjc8wH=vk?^9%5B{b_OY z$nXxS1k_p-lZt4a=eD2)N@?8Af2ty=M;t`LCs}c<7dtN@C8D5>?f{f~K`N`#2*L%> z#q{tsj;d$~oH=l7@Ea6k(Vsq3eLjSz&RZ#64O;zb4B(#nTT>+=~KYT0xgYx-5A7ZvQQ%i9Kf&}Ild7=FSc`@zAt?EXlYC9~MFfboQ zBk@Pb8(=IU6a|lGx7`4_FOY+D8hPYQa;`O|lPr!CuGVzBUS1zidzdY-eevPBFrJLd zC1X99_g@Zu{6E2s*inQs2s{TIsh0+4Q>JzH)!Hna%oZo9EI10+rVT>ubG>xwnUAQ& zV3H$=1appvSS=DbTKldHXlZC_$p_C1ju^0~P&W%a)>tRT8)OtHB=$T?j@%_vpvN6? z7HHDVBn2Ih#(8ZwG#p*r8Ge6K!G;{TB)sEA)AsFlw+wgZ|KJ&@?CgIpc0S5;>NgP& ziy%)*#&E_az>GNSSc6|~n1Nn8;gnQXZmF@TP5RLMqNFq7y2w$ZLN9IGSJrMCDz--v zTH)MR?6saCDvj|o=5KydgDNQcv|tq7rkM!9sC#V6P!qFH@Y)Z%)&&ORL^c;?^p7Id z5oc^##Oe$go)tQ1Rr)GS$6FywK_5x6oq1hw`?#wgewFyXTew+}OS$gW$!Pog@bI!f z+Bw12`|@n|arf(MvFO`=+V7h`biGf%=Aoo&MhJamHf|Z6VA|>#pH_7=7Nt9i{c+_- zi4$Q4zQqp$&EN5_KT^&zL{4!e2&{=a!ma(yAPzWQd+;&MYc&fYGeMYz+~Vt)O(&pA zWLOQ>wLm6q2NwHa(+3+NR%SQO{DJAl?oso5NgvsQ=uw5ols{Jrn&#&fm{&x#$#>Vo z7nZF1Rp(Ftlu9gf{CWt>k`m>^Z>dA0!+M$d`BGl7gr{OX__Vv(2X{#vt1}cTft>H> z_IvK`*MC35Wl=!PxqvfF2GBhI<1_qUgU@8;4aEg{6rIo#*yue~AQ53Ft8ej%7-k{Mxuk%(x~vtlMF>EHY+J2Aq0h8qkN7Fd$vnefBIZ2 zgD+VF74NqpLwXvnBBnfT#D3Pk#t7v|uQj$cPJwVW#AZcoHVcKcHykZZ!pCT&wirc( z;DymM+W^Y)Rzk~3Mvk5BE8*@uv?O;DXbADnVRPEEATCUYIYcGxaL7f(?|joHlvQ>_ zz)a*`n*yt07O4a4r+4pt_Hb%7p@3QcAmjCa^297P)=Ne!u|RfGIja-vIB|~^U!I?GV)XP5hhd- z94hx|eb+YDY>}>Af+O$0#E}Q{7)YXBm$qF2M&H@!{*?hmWYN(Rm(%XQAcQhbGX{;- z&x{)zt6TDmw>2NUg?O>{<~WA~B1c3Lps8M3isuD8w{t5RhN^Y$B09UUx_duwf}31t zm<>J|J(_OVNKfVHqE8n?PIVhX zGR+_J`Aiq+f5SM;0UN|!6Hd>dq!uis$ztQj^ZmYu9-Fc_`je&r7q6)(nv^b7CN&m+ zh(17SI1FRq-{uwO6O~r_2e}+A(|fc6EQA~x?Ykr7!l9=SqaSu3v(Q@1Au+AQ@B$4G zG*Kk`LVC{nO7^EP?gY-~W&~C4>t7-g>o&r@JOC#?0#LR89aP!>Gxq-%RN4PW`@uH% zq7Udl2n7Fc|FL$xyjH!;7ELM~$Xm`p{1y}&FoGbgyuWqJW#3Qs?SD6krdcS1;?`g` z&EYidHqDm$ibuEegFQ?ZR)M&nY!r^fm9m~HVC(N{Awf_#;$)V2TixPm{nT>rT?KZQHhO+qP{d zZ*1FU$F^RF{>7H zgOs#4v3m;o{BP!^>EDB&?wkqG=xr#elXJf!JDT)M_Z5^j^|=UYc}ub>%6+(SX|2&s z+5brRQq+AGQ=2W)VpwNWBZo<-U@nrluxmsA*8$6sx zvf7SgVriygz2Wiwb3B?nPR|e4Vs7fh(Dk(==nfhGUb6+a zfZu0VTpoq^$AA$s+uJ2pivhK%4Kc4oF2cvAZ*ue zLEX8qg*?93!s=(%XJGb>6dc(SxQ%ny4({}px4E0x`@{8Y?~kn!W!%GOE)bB`<@*?| z>$A2fZ?5Y@?O4)SC~?(Mrk=%LLEt#>oNAa0lP%U^)G&)LC(L(3>9Gz^(`sj%*M80Q z)A`F?y5kJ%O}g#twl@-A6>E-TPR-|<1M6r#H8Z?LXn1QtgGP(@8z=O!>#*P6tzo$O zV1bsMf@khEbANRfFVnSg&!grZE}iNo;*qinar-~z!3Gz8I1Xy40C#A(+8_>{b!a^J z&f2$m;{_AKmn_4Y4!V}i&dtE9Y@b!xjn|*F7x2JTf#|CH>fHr5*|={H9+W$tpLUpA~0TrfM2|d&lQZa@1i6sX5x#*+;%xG zQz1Vs<~n|=^{E?n;BRT7wgh{a#n%V)HU!rGZuJj?%O)PL>EG)qsKcy-0^81%DysV&v$!qQG+*@6jcJ6QhS*O;QsHOEWvuFIn982Vo zVvS6am!@1b#De|-dhfW^8sE|wdl#uas2b!WXq_OjUzm|SQe`^7V<=6CS#TFkj1f=7 zd1bQhV*Zy z<-~X@L6q@J+FY*pkJCLy#RB6(mT66^H?-co25Ivx`-orYuUjeiZrLL^CgERU>32XvqR;;LS$qfTG)-O?i8E&XqDFCzA?MmDD3DljEe6IbK^x<}=x z+PWi)qWF<%c8oU!wlpo5Hv_BQ3u%h}l%!HvKr6HaDOM?ulw(^oxioWMN2lQ**56a- z6*q>*f4<=S#P$!syS9m6U@J+^HX(Pu$vNeF%HVGF|9U#240y1x#t>zULCjue2zJJT z@u{AFOhTElenvrO@c~3J?Ii+c9XUf2aVD7@)CSSp3iqjMEz<{GQBhGJV1ye}jYHKj zMx2{rKf|%v+&9FCA8E^UXX=4W;}vk4xFnVWP*9e9hbA@jm&`ESIU+-jFQh_wuZIh(Gz{j@ z*kt#|n*t+6GugMs*oO;A*^j$@lljP#&Nu?Gxpw+Hsq8Mw52R7`&&v%ZN0}~QB8(J= zX>nT}#YKfjp{_49hF7Vs&)ecyBhxeH?_hhD?{M+TpY=xJ_e7+{kxL^};R0O&3t3M; zgB`<%S3L!&0q)Xc4n~`gLiC9|qdj?Z7+bKAp#SY%j-Jnx)z|@7pTk+HfPdu1-Q!jO2fo zNNM-e>Zhk}frv3IzFF_T{`vEnBlLQ&7PWu>gU*}Q8bnkARFV0yUF8wh;FX8u%fQ>b z7Wcw!y^841a!D}OQ%Os?LnCo&+n{kx*s7?7o14q@LDgmD8V`itC6=_};LyAag`0~E zzEK{W-dUXcxY(5-0&LagI^)TNvHaK}W5Bc>wA=!=70P|mkK<7c-cidIiHDytTKn?# zLU-^aeo@9`XPz*UUU;FvxR&4657T6?^B&mi7_v#N7>4sPVUqWfQ~nm)h*;d_NxURc zycCnw#VB4JOk7LBugoK6$+X2#y~N$1HO22i<7=KQZn0fQOVU#K#8r>+<5d2H(`#t4 zADODf$Isul`DiCn;}OsUkV=)FW@Z)B)C(GfvZ$jR@)=j7P9dMw@T%$)p}f;5D=rUw zWtFJ+Cm_pIf?{xv(8Z9vf=jo|Ps-=`cTAEmQNdyH$LZKZm<$xH^dfyewEA0^fBr9{ z;t@nC`kqjcznA{}|K1&1)X~+@##zSH*;&@!>3?2;{}dVRmkx#bJ zvSE)=Ijn%4F(!zSo2`uO=B@jQq^q&2#3tO<=UI5BD^V`#r(ZdqBJr6(oY*#Pve@r* zWXGBmsj}N7=UIRERXxYAtXw@Rqx4gEGCSLP0_Nu|%j;iel(;pigAYN{_No>Zqtcp? zjj}sQRYP8Sr`#WM`_n&06p;Hk*patH=K7{d>35*^Y`X^cB1gMD*aM#O=ZoY(<$nxT2>tR7lY9t& zFu;<-eoMBIep|8;Pcy4pw9V|OR2c4hLgB4}lV?^D8FA*eefs%Fd3?W6$+<$#D@+fO zQ&zc{B&m{7)Rq1bZd`jKC1OlubBmZV>IlCW*{@PW>DLl=WXf*B5QK!QT_gmox}AvkE9$i1^l0BAVqCyuNqia5IulZx)nDi(Udr}KP<2_OpJyww+9U>-$LlfHb9fN@`-?OJFK0amVp z!Y5p<#Rpgb28n9 znI66x`gexLt9ke&p(AV$_$>srlLV1FBoOD(Y<0Uj8zRQ0$lV%OY-o@*MZ$R}V8Jyc zSIi&q^dqSAN07r0LLZ30TAh`1JJd@4QBqEo>!I9KVboaV+^`d5tXnPEK{Q#qL|Wf;8PeS@GM{XbqMXhwkytY{cv?HSycG=OBhUh1e(!w_3O@95I(jnT!ZR$UDa- z@k!7~bVd?|+w~!c(N0WchB!A7=?ILJ1yCR<9(i^64xcKdba#VIKOvcQ-i2pA!*BS| z5|9|F2{`gEDw!$1JPkEU4bX0AD%*z%=tnNEfr?@IpRaRuAe_a(^HO8O;Lr}_53}#z#CHu3XP&jqiuC&L@%)k0~H+nbI1ddogsH_=f2XX!- zgd3%Prd5*CB@muMwXwD3@X@PEPUjbQ8+s1E!XCrj8*HPvz}r5FyfP15BU2=^_hPZo zN{_-LV$3=l{2E(>n%3RVppc~H?Cu!W#Cc(z1nCg0?WsS6R|0W_xiZAo-p zp9sx_gt4T6?|h69CMe6z&EtM`CGFkG)tYW^x3l%z`cr$3_EWCC|Jz$pO%A@@4d2W8 zdJg{A^YzYkF!*fi&7?v-4RLT)a$ieXmb+W8=RpL|wvS9tg~tA;n2Am>nK5by3`l7J zGd<%5aH9AemKmGB<6lyJ0T2JXa_mB%F5zm9ZNif8|DZ2t8i_2e@CDQy9+{{XJOZH@ zL5HFVCf;Pd&1G?8Q!Zti$E!WXlX@H#&9srOKTLOLn#xy%n`+D*tMfVYNXbZIHi2M( zjM75oOV_kFH44LH?l_)AN)Gf9YB5ajl8s`ubBvu_0G*Z^kx1Vc+Q-1;Ne#ojQsz2n z+rzw40#Ymb#6igKLUr`G$I8@z;gdPJ-K*(6e;^2-zu~$0iyS_WK*i5sAs(w-K5=J9 z!qD@^x5%&w0FfrBy19z+q!G!ki$clw@$dI`J$H0Tf=s|VI4Xlc2JUy9dmXWYh`kV~ zVg^YSnhZ4w;Xp~=Vg9QUR#bwFvr$Ci=k8A;9YG9e^{hQ zfCOBB7-*FsddW=l!pS&Vb;uoA;k7RY<9&Zvtxpfhs?Tfp>&kIL;-z{A=`BgttJVPEXwf1Mby^vEg z!af$&DAtq1@8lx*Pd*I) zk)j3GLZds;tx`!uMA5CFrr3_!4?G-Cz_S$p%#ng=#^;pj;q+#9_lMc-i~u{5p-8+6QHjV#9|{v#so{l3?O|vvCWv7d z%Pmx$>(oWM@tH;g&ZM>(hLjENJ+a-!7AFIAZc}!!jZ>PSw(}FH@J;G*_?4BV{208? zY-vs)ZR^;TE*)*jDm&{#EVLzJx=?U(p{?mD*JSNMXO2vCw-D?Zpf-&scM!G_KTKca*CtqD9<@)D^--ypi&XT zR&noQB{Slq0b!8n5YZUbuaNXuc0?Lu(a}u^Ck@lH&J7X3dMBe_K->9W3sC3KJXfL$NA=GFI@2XjP*XKZm zvfQ;%wB43nxjy&ziGXxnd;@Ib3@CaDQ-jJks0F{cxggI3etiMm;w-4+7q~I?RZ>l`=pvR|aaD+=!ETx%JN(#(8&`G?T6FLPpP<~Qjf8RkjY4e zz+n@VVGs>#gTK_5x!=&Z|36O*#16vFaNkQ4^zTOczXWmqe~t7%+t8fva~8570_dT z40F?rR_yUC#u%Pw`3PbPeiG)Q2S76`$`W>ZS@k%}70bX;Ax1yUMs-*{+D1_*Sb^p{{#Q zAC-d%z|cQU`SC8q2%{`3)fFk;T<`$8d7u|w`+!QRtLfsV117vA+I|vMcnC4BFwRob zy;j~$@=m&XC%T!4l{z7*t1wm$%s3aQ2~roX&%SaIOcRGSF{_}JRl8tc&n<*{| zFaiEajSRew+VmitaiGe=?I8)Fh`cqjl1qVn_U0UCrdkhl|ZSUB69a`?QJ zf=SREcTlDmrT(v@fp_Ip5<5_ui<+Ba0Lj8*X-9hu_mSe1{@J>ed?Ny<5RHGxim}CI z=vl=)8}4-3cr?CnUTldmvABi&Xb+gNCCaiiDJf(V{-B5s0g>vG4ur2(azrNvL?n|V ze6UDPpYT?hqBsS+`P@@6qgR+eI<)39tmPFcz0K5;QJ|;=OLcyEchrB=6nY^7y=y zwLMKHV*2tz{C4uz>$&^X@3J?@9z;itMd; z?u_&=e=ZAZWuZZ)|0>zr#ZrT~Zwvae(4ZXqqI%8)EXyFF5W&g@JyIl>6o|&JLmgXi z2*YYFB_&vY6;h;Jp=c*Z^|Wdgx`n7& zbi~UlmI!ugRmv5MRGYL)SgCSq6_IO}%QLioE>i(qsd5SyGN76f@89R0iBf0rn<1Jq z@&N;CL(!o`A$M2YQ@UodJSXr=F6sLzU2U7av=$==hPw04>Px|=+FhUMvsQ&@-T&%fD^Df$)=sGlL@~T@yVx zH*qa`C-SYn_ZWB7@_&(6iC;FWSpX})FysiU?x$wG{OWz3&WtLLS`O zW^*mYTAf|J?-aMj{|v1lp_%5td0i?Iwr@wt@AIYFfC=|+e-wBm>$8Xwo!AK(gB@hb znW(4RoDLCG^N0%4v9ltini1^VSU-s|BbfW2G{F2tEZ9duji1u&R?|1@u|(W`?98S8~HmucxA2 zYbFct$=OffBbBCyUQbZe?S>AJEf^NFojt$ZcWTLut(}#6Td(-C8naaEaJ#zeRLN(^9Xn$-=+G!S}jmvHEET_s_u@sN&dlvvAMu zS{a%fbet4}uez7$zVVZ3bO*btg|IA7eJTJOK4pP4Hq!X^@M!K=ga=$cRnN( zkY^K~UKf$^?lQPt`S6jWm7Lmn+Z#hq zA>VH|V_w670Hvh|H=xEx6wk4NL>7CSltxb)_rvjC1*88nH-c!B!^{0_F-fjOuSbU8 zi)Fb8)N_L}MT^;lkMCrM>GM3(9}G{iba{L!m?zY=>Gqf6rD9f^JH+5>?eGbQ+hcLQ zEZ3|D(^*{9`nJb9%&yz-Het}7#|^%K?E#w9@Ps>e;$={g%#PkTH`~*1EBuYM?&OfU zfW^1@5}vO&mtoj;0Va(0PPPi~A^(G|eKMNrCMkTaxZ$3WPImdGZ~zk6n9w~EzSESP z4h8+D993Gks~cwFT2XVKBdgmenpb`W5wVKDY0`<_n=vVPBy3pGPX7KORP-)_h!K|uyEC?Rr$b1%yVF=uQb&E;6RTjvTct$T zFIrd3q)UzWEqDE4J+ubp)&W>VYDW4*dAuV=aQ8j4A9yBF-tooH8z2L^iF`j&&g1q8 z;_$&6u0`Qy2b{|XP7WPbl5SNv#+YnO_#?6-&w(%7;ZTHUn+xCw>V#Htj<7q-2C4Ts zz(E0gGb0|5 z6(m~=Bd^6+aR-RFg0Q?mqt3}Sgn9*OyF*LxP+fB=HBKmpoo1PqytV2F7GuEV;nlq8 z1dC3ss_(agmUHC|VonXSV>{O)iCU2~TfKisZcn04jWXSR!P#{;)ULn7uW8+R9;x7o z^@7h5xAnY=(zqiWXoPYqrJW@JiBP|kje6{TTZ9>;`B5&a((wjN+WhvbjV$p1bMQp1 z^UX`vaK%tJF-&rBNOifTq2Q@CePV00)}D)Go(p824`tH{X)HcKt(B4-&Uj_v8-#+s z@Z;$-L*3KyNv)vqi8XHr#TBm#0{5I2_TVto!tX_OibN{aJFBgjK;w#6kf7RLtGy<<)NcI0kAG`90pEPs(*f1MZ!eTa6^w zl?i_S%Q{!O+If2?UN`$=A!2fuzbhNdDYCIQpxeEmp5x8)cTF{4v~}ZLyfgn_RC8w< zET;-V%9(FtpUdcK$+n)&u~g$&3~&eGU?=_wtfhJFtubN7*2647E0x-gW{OcLd;9uW zVAN3a#z7m%Td+`z8Qn{IkquIO8$W)nZ9*^@JB$}ndGFr<1z9bYW(Z!g5u7#&*y z_K`sAP(@z00>smYwu~>`06d$0s4j>!XC)oTBv0CtzmCsdcfjCZq&9<>w}%{VPM~1r zID%Ty^)NSRa0}b%VWYPkVRufo2jsV&M-AD$9!MbBg?~Jt*}~Yfo?iKKji|&!SThi0 zaNUrDC=;;oBzdP*(6U9Y+MV(w$9V^wL_1c5X}M!Xv+G6~b4I@ka4Lh$QF+qdy%j!r z>-L}tKgLYz5fsS?r9y%vPG$^{K9uw3oNA=U2eVrIwUgMl}|Z=UjfuBRAUr zpDs&8WODU;b7%LB&iT8LWxCpBvi+r7hZ6dhi%z?{&e+yGsjGY) zJQ(h7u!3>Y0#jD#-}KmFuGL|oqN`YSUaI@B)v=!uTf?pDTSldG&3O%=tVTjCYl_+* zgFv~~W)W5s6~=Itx7lcMz@*X=FP&yn7WD8O{VOs!>B^$(sQX!Ro1yM}9{V&+F^u)p zhEg`6Yv>KLPUj(sHd&ppI7EsVe89|q_Y zI!%R8;g=`K3RbTgAger=%kkN#pvcC#Uf{2e`?QS)TgID4d@bE5=9KId4SDa}nS#_H zL*x>A#MFd~hRC=#PU z0R_4!Pmbi=c8+c^QHRY^zUPSCdL~zRGf&l>q`YseGl^GZ?#=apn}8qgXNyR|H-}I| ziO;d}rnT7XOq=)hU$zE+O0nd;zFWoh`=a-6GKymMPX8^Gkd{XgMELYt z2j{LOnjCDczA+UX@nE)Q2}h7*^Ux4J_=TyB!OY$Gck04x(L#vjOfrUW9vKfbhA_N* ztGoOz#bX5MTP$Jxho+v)u5il4s-v>1r>?T&^{Ot-{s)d&8GvKspj=!kLRac{tf4&b zU#oC~Z`Fh`M;`*O)kdlNH*lNN`48as;BS5IQ?Vty`8RMoz&peF4cs!@GAdBPKzah; zHBBT>aDugibuy*&*#O;$i>4gO%-KPH^9$0smgj{!$pfygi*CG{OgxLfT+7Py=%B`V z#s6|LO(N`rbRqP8rhpA5V2yvoiK6D;*-akVf$AQ1D{(dK^4&0yh-hMv%0F(l#KVNT zOjo~EX`Y6z9A(;guB@iqeH%F}hR-rfJz^(1A98 z5Q9`Ux7vgkMwTJZ-^)p270#-ZEwwGYB5$GUR$4<^NRZFPngC;xa>biiRI<6CM(wxt z#~>!$&sAxxN}h%KD?`;PGu3Q}qKx=NJ0>)< zgpX{PxPsT-sq|UGztHx|sPz0*z6&VG7gqaM3{lG>mrN>zFE?;>PA||u@0r_@#4Gu~ zYgysn=f}ld?TlS4?d|@vpmUNo?G^J=3L5$ z@KFCIV$UKvx^2YFRzuRX_`hTk@Jne~*xcr*Lhw z7^GwfyJ!t}(I&b;f@TnB*Tn0{c;1`HOb&T5V6l0zsvhhS>BFlJ%9D@qRk@I#c;JCU znl|FbJR^V8gpoRl9<`3l(zJup5MEQ}q^dY8^J;c%i^6O*Ui;>Ba^#NQ*pKt>wI-^2 z4c))>7d|+}0YMFIgUJ~u3Nzdn@IP1O4KN8A>vu(xd?TaG{~j+U`9Bc2w*5a6zR5Jr zuS}6oS3(4&>5>mf++YiI5|fj4`s2w0q6m*yelfeU+qg}8!R{j}is-*85F$hh6qXYN zhCmd$7KXGC6cF5TXS49!fe3^%TO%(H6~?INPTsNaehbsgS9(9Xydj zcUW~ZDg(##@rj)EuI?-}IIBb0ywWgv$HHfW&82Oy_SteAD{|d1n;Q<2IMzXIq}gYf z3ZnwUrT&(PUzgjq8};K>L*Tl7+rYfr=3@S?efDNFWE|0zlT@8GUo7?qa1S_PdOhvs zxUj|0;9B*H;v5aj&1_d+xH!oblZe}H9apf&K18c?qb3#4J_|{i6thzmqP059Ny%U| z)b~3z!%5TOx*xQ~Qo5X_rw%rrDcohpo+6rCP<3vanOJOV=KsU=Na{*6?K`+G5b0v$ z{nlsyqD&kAz5bVr;boOOG<6yj^)5ka3l69 zovq*d)rmPewDrrt#7oUnEt;B|y-)YVoPry#(Prr$ik!=7LTt?C&6l5}?L*QHmsGw( zLMV;@dz%E*xd&=pg@^7aB_^17B4IX>V3r{(V8h$O6b@P;B?R^9Sl1q}zhbQJtm0=aeGoXx_)6)Ra6;aEefYlA*~nL+bO2jubOKN2y#<|j?0X1+ z=PzX*F#?&uc4Bmg*tL(-Xlj?0WDS@EZakOYM2Gt4t`hB=dq-|Sl(9;*Ux-l zagwRP-3TL_BO_#Vd6Pmlk(_XH((qg7I~4RkNKCg);pQSgndS)!5M_~ahn;n7(B`LD zwMlG-*&t^RLuG7E58)uW?+TNa=uP`W)7m{k>Ge?y!YvHPG|EDoG+=`}S>_6UtNL^x zSv|3i!q6`1b-Q2(*Hdm)G97_6#cyET*eJ%(N=3g922`@N zf8fK;>MOl>l#0;aBq~{B@EB>Q3#xT48Ss>@gb7vlD=2k55W>sS;#x7Nb-PqX_U~ZY znj6?YUggUd)#WyIU>%$?z?k9-=bBpN^5=`TXXG!A#pjX1XohKXk>&c?R5=(GJc)`$ zbz3M!yDHaMkMVVKmi}~Sr$Ahk5sBXjl~UY9RUyuXK9IJ88;!}=DsyaYKOCYtgfpEI zt%5-%W!h-75QiKLItuOIM4yEtuibflzsTElgD3a0!|%!E+Hilfala_)Us~<9KCeE6 zj0rVP=gTOMag?=Jg~ja5A3ysx2XVqfb;Pk~-uangIyq-%>U4R~d_;buh&6uQ&wcZ# zAT|CpTPBAq`{yrt?>onfAp5wsz7JP+n+c(^xc8Yo&8erBh2Dk6?Cl@ra3A$H!90Cwv4TV2u!yHM(UJoF&+3agb zu@+JV!mZv^8)yE!7oRh`FTH?FH>b;gwVnigt@S?-lXB*%xz^9q6Qt+@Q9tMau83-E zGz6H!>I0C0NfI?RB&vjU-3b<7+qe&Uj)9al8q2 zh@T=ef%BXt%?R_6VJ=G6{A;WTRlgKHV9t{}ot-itoi`Hfw4h+J8D^3ORKJYpEh_vH zr*Y=Qq9;7^*BYT!U$E5u$4rC0L6PB)1ymDXbw7}MNeLE{ya0+v!TP)*B=s4Ss(YX# zI0E~vIp!md;0L^dfvt2mB&KQmK3CxG<5D(#j$j$Wz@SgYIY^ZS9w7IaZY2lk;ZurU zp;$L$J1<~nDqK78jEFRb#;@?cSG@NX@UQY+R+bmMTCv3y?r#{;9GFI>i89f6aI};-=MgHKioCqwG{y0qq z25j*1f}N7o3$oviR%MGKedZ=P1i)e8ZTJ=+$cT^7itb6}9l|Wzq=k5WlfNm9<*E%h zHO8TSMNW@esRc=$6#Riw$)I%z(ISpA@{mpZKH)iUH%Q%EhN6a$_9 zjbiBXy3RUMRbpwS6DS@b(K3vG#}$X2Xzxx5&FL=iPw56G;HTw=1M!MBFg zm&Kyjc~YP<(rxht(bh@!#2>MTqnwee(KYh*H4y;(bVvQI``iC{RR8= zFRs1nOz*@F-#6EH6rilTE2OZ!0J;Gdgfq+v@XWt9NE|Hu|fxa*%s$9tFO$`#3%@N7uBKH2g9 zyVYpU&hPL40cLHTF&E(v8vbnIG5{Nu%F3Ib483Ihrx@oU< zqg#c`Sz8jT6$m9f`5h8zvH2YmnY!E1qD>W_fN#S<%d2gBqyE!rfjjQwqfIi6!e}X> zVKZUlmIoDL>R4Z2$aWPz8CMl*n=;UbBp496qKm0?v_~qDNJP|#|2*B;am{5&!r%hi z8E~=+|CzE%xlX74bS1Lj*Gj1!!3>7>b1F@|#cFsH9yS@{=J~2mO_kiuu6i@pNhVhq z>==gz<{qIIg3KB&?v`V8QIF}CB+QftRpXQX0hFvx+Z_%Cqpd^TYf)17cMRB3Qqk@o{;njW3r=?BZuP zezV6O6Ro9RSdgGo&ZA{wT!J6eV0u5qM6?m3wGH#|D}yr^wdMr2AeEgjp+m%)c5>On zeYA1V!UDws+b)YtLvHAEXhR?+pA8f+==Hrn{hi_Kzo3~b>WD!Tu<OHJaUF zY(ytnBn+~Acc1bs2GsBd_Gc_NAAF{qt|YyMni@9Dh?@rmMyZt^!Qaj+5JLS2kUYCm z>w?J-u(aG2d3xC8dm?~1E4vN1y>D3+&n{wjEQ;chhhVYEs;V9ahvBH_GGbzt!ga(U z*i&cWK>Yq&7q0PF3iM!72+XWgQC0nO>djqwoZTHRrLZP!tPq&?W5}jzA=XbJrlzQf z3iYsx)zA$%5K^zo#Ip`kQvTZB)0_#b!fyQ*kABp$LYdaM;d(bXBdewxQIsYQGEgeF zveU@e*f^Q$L_PS<1=P-5JoWuqOq;Xo^|3+|V^~jYQ`(gT_FsmB{k+Iewi~swfaxy` z#$e~z@>8C|@Qi%{@DhgNs5>XHJApc;Q7KNQ$keJF1GCtAC3i4RWz3V0P2yD?Q zy@0A7L93hGf|ke^l&oN4~>g5z-NjQH5h?nBio4Y6`zyEy0cgkl_y(Esy30B}XT zP4Zp0o8S7ef791P#?tz~>NZ79*LhJ5fw#d#x+NtfWXyn|WDfWf!ZE3Zj-!H7fo}^- z35npiks_7>Sd=LdreM(cOQZ~j`AS;v9Hd}TE`!hQHR^TgQHRqJ>0oAVOmnx>{pt7h zdbiZ)>*?z153>5?0lTHdwNUzyXQgnj$O9oLbjF(fDinaDq=ng#m0I|ukdEX&)d`DF z&4CsaNIB%OE1_NZl`LxO(334HDe7){8!;iHX{Vb;iowyv)3mtRIODdNCEKHID`!S8 zl_2L8tp*aXN!fm!)AtITQT`KD2Csmg%28-Zch&MlfWe2x-#Q%+*@ z(tQm9#kw8B>y?;=x81mPN~w0LJs?-V6<;IC#dUfZ!c7|sDfUU?+Lom-AlY-_*YuuI z2p&84F6Be?jkn))_od`q4QbUpTutVsR!<0VJ9bul>FJGjj001z?r<_LHw5YL--fdY z=BZd}(kR&F45T=dwyobXjKt~P4eY>nzymkzi;u>I*{_jE8I#U~t+|xZTtbpV=dmmTVx9K(tK0d6P+91G;@9Yc(89 z+&T*dx!0bTVmZ0<^mQ&hd96$0)SF|5W?nbf#MS`Y^gkPZgIw0oyZzJ5>|{DFCi8Q5 zbZ}=H2m?q53}TW&v7Hu7FTz~c{VR;2@~&H>AirE)Xa-dG&n@-~e%5pI-Y@JEBLr2k z=|FPtOev2N^Q0=g=AnxX^yuMTl3lKg1a<_sk@}c(ti@%wkxDurCX&>|bQXl_k;_94 zw)@nmLhinHTf}eGzMdDDCeGPkWnk) zXUJ_L?K8JuW+Ce|8UV)gdGV`J4UepNtHzG3y5UWn0}m?!dP~ZX?YZ`0cw9Jp&|d6A z^4W_C!*~51;WLzigGlmF#M&lZs_)?bid#@J)(jz~ zgRe5+Zcx1A#WILTPzD?i%%>@^%`s2?lvq?E_rfpwV@&=<5Ka*q>(4&HuoG1nzWk;$ zT)0eFYhnd|2*FBp5BVC==u$u-kCGCBI;8IcLPiwOFKb%d3A8XqIQsy+3e_8h_-zoV z=7dQ$o>V5)+!iDviiygU8v|cKJ?Ga~B4nOXO>)#gmBuPONv8J|(okTQf?DhsLZ+VP zNK$2j3}7>yW6@QE{i7+)Z%{sw)9{)@MqBsU9&MO8te)==FS~E4Qycpp#HSdBv&=ZS z02JJAx|Xe5Y|D->_=Ts`fQ~;`IY3pWu?^XB3T&CVe{Pz{As(gOWEtOpW^LDaFj}qb z;FQFA!Vpn}L3}NkeN-#50#_h4#aJE`NM|h1IO7jrZ1IOs-6*n)iV?)Rm8zXOr`?deYm_o(&@gKf*`I{eqrNm?0aoI?XPiaIYjDE@zD} zwRqI_&5<4J{ePUjQZ&$Xfe5`}}{MT{pF> zwRy4Hy6$tn;~iu4{usJ}4B?L4+!II$!08++`6CUeIb;@*sNcXrZuS#AH*|7ED{AgC zhAB$DU@2x7FGHQ?^qa!B9dnkso?6~@GR{hCV27SGm~jpf?5C2x8qRigNDJ|A!&S$& z&07s0Kg^!4&SvI`$aUa`DVHyVYV?*Z>^@PMFM@&sXB_8e*nR2#&(AJ-Jowlppk(-e z;Au+h8#>tjJsD8?uVA~sd>j&OP0C6_z(uMk03Qc`b#UOgAaqzvzsmq%Ak48z@PYIv zi04}vNwBGJ;_XCpUMO^njfczB1^f2vl=0DX4sOpkshuo88KVABydoiuut+~D2hbtC zGqmMff#E_BBW2e8;Z(#_H~ziifx2J?|=Va2WJBWm*n)!`XT?In1~Mz-fD_;-%i? zweBcgV`Y;PbkI%8+D6>PB^YXZtMKgu7d|+R&r?@NkS4cP?XgLiXuCY3X9Uy%rZoDBKnFq3TSPr2EtyQmM2~lap_j>(d+A zz^9g9tROpJbO!$bVcV%scIiOcP=D|qb9e)tBuD6tFaoTbHN}}P=FJS9hAh z6r>{zI;js!09U9PqV-(jF{ZZIsqZ0EsOb`3-?uX~0*IQ&pa7!g5P+y@=>PLCqUI{% zLUr81oAi+5GL^F-PkH&E!ER~e zIXhH=>NcHocNsR+?BN>tqa}zkur^VLxTYW^_pdk}5J^+Oi#tPwnj&3{yJZ zmeMFRiQydzVg|a`IQ(P6(^)FSipc};iwY1+v*dJzrUAt52RABHABo_BI%*?u37%hQ z`E@LB(26T0U*VP|2=&>hunMRz*W}}R;&m~*99NeR0~tuoI0L$q7RA^F-z%RGcVXLn zE|G?;$P&(BvvLb~A1)D!(Bi@s8Ni_uq!i7B&AUOpWXMBA(ZI+KZ_ok)XTnGy$Rx&G z!DPcG=#b4)Rq!KYi$tELPyTR)vb~}H&ll+07dk)_P_x(|fBVMz@8%fN#!hCoe{WS( zsk+-CE@OXXS0|}b)&_x4g|vlPNhKES!odt|$k59PU3?SoC#bRZqXIXdoNbiOfJ4xj z3v3jJC=$;L$eosklnj%#1(NoVH^^8Z0v=-9ZL^Jo9dwRuuqJR z?=>Hj<#TbjujzB~w7<@vGemiGhwZp(h;Yg5y3L$&J^I4qvm=@jh%4cy%x5zjbtKhq zP$i5CMy*j{J(EvPy@?cs*=E#k4oY9{$Zma~nV38cnfUO#mQRQ*oHS!DeKwsiWUgYm zg2Du0P&G-4G%D@Km6&_hFH@OfzY!o*;`z6|rDSFgo3>^WWAa#Wvoa3q6sB!RzL?p} z!jleEVg~Bj$1<~uI4R*r>DA2aY0-q!&NxeHv{5OJ^ih!%qsL4WBZsDBs|-vgt*r zD2Z^QKg>?^!TuQ)Z+ezM=AL(Dl1Chb1g1?`mkbYB?orx{KcP3MUrEMTHR>goD!Ulq z!DbMH%Zyd@q;TDmELJPCZE{Pfy{&j9U*LgsHr)+?PTj`$QL<&UQQ7KCnBBQGE`K+v zNLosJ*nB8^NgIz!Un0M)R*fnJWbe0;CRmh`tVw*YsbjZzrh$-Ur_3CaN+*G8uR_?ciX(eL zJi|?cPR=TjgVf-c@3;t+CHs4?)a-nNff%sq{)UXz=lyU2O(EQ?-`K!K+v#$#_r-mU z%l*|`G0e-=_W4;bt>v|+G~C=A;o0ok=~lVF14)lDZ|#=i3LLCO*oBPMD-XhcARTa8 z;HL^An)`AFrD6v)jE)ULYNyag4g#1Y6y)zfXUg9=e)waz`tsBXiL+Jgq_CCjaBV5s z{k$@ob;Vkluk+L#Zk|WY-YVHq%@r8?+0ndm%TyeW~}IUPhv zch~+%VK*&(N<{adK|KWJ&rGx_&2bnLv+!VChz!3vMdhddiC%IjGr5>DH!m&1c%S@9 zioC2Cb+0)O-T`rjP4W>Xs-tUlvr4V4S3gg@$I&mGe{153l^hZWP@it9NNw3< zONvM^HKyw)GDpuUgg{34eqKEIUF7 zdF*~p6WYAFv`Y|uz++szZ$%#X^u3Rb9wXrtRCD>QaF$C{l4<_Ktxz?b9eH|@jZ!sP z_ZoE1G!xR%SZ;tkY|?{Ft1;pAOvqn@q{AdNJbz>4l%_F`d_ZJf~hA!K>W z9voMB4fY++q9YEXfM4n}a3V4(oR&Q>kdiGYXgZl!W5ElUgwC}Q?pZQY_$xOB^p+O@++1|Mg3VF zG8zJ8sh{J5xC&4Lg)nFE6=L1*14cPlgHm(Pk@~^&TdcuawOnZZB&B{xz7`NApyRq3 z!6?;MSUn-Gqf1k#`XUx_kw9Ypb z{daTE3KEKg1850zDe~w^GG)NGoU=tJ^6HK}F(s4+f2@6+wE&+M+;icWcBkbjBncQ< zX;LimaSqAKFMKnWkpmJ)k{TH(XsyDA7r}!g=?!F2(h4f|$fQ^90jK5-5BHXmj7b{6 zrDylkztLy&N9$$68Et}U(MPJVU^2OHgEOqdLag)d#b5WV2+5N$J2# zd53m>OC@=Nt4SX4l zsdb3oHK|~h8A!T%)y!p5aIOi=QhU61s)+DV0^b_>R1{5ua*Pi0nLmGUUQSxGtI>|( zNRQ_8mQMD#&aSJ`66?tDyXUlzMi(42Ssx{pNrFnT@n9=%1U#JSsU#vw;gYNYxMrw; zx5zG|+R!G{o`zQGv>9e_)t+wXe2dNn9JbppPF$CWo_v_c*ize4yk~zm9N4)(^|8W` zDh9}!C>f%r5xZCTXOxwjrng`jk<(2$6=h|Z{L30<2YbEg0*>`XB<+PHWKDjiw0RE< zS$iqJVRuBpr4iDJiHIwcYNID;^$&dEQ{B?8z#jU<)q7AH!uEJe-vT2~Rvw1Q5@N~A zsN(*FSb(d`V?gNmKO;yKq|n2UHNDu`#wR3)SGCM3t8J!lhX=uQ)y`auLm-duIb{q2 z5JEC7H5Iz=R2Nz?-MT7vxwsRp`HB$=FQV&q?d=PDE9>f4fcYmNgxJ(UcF-X&Ee|#dtAwlIp#5@ zc^-H6TxWW^`uc8tj}?;ekMt8^!awTI#kB|jffRNC+yeDVPsKkNid(=#UB0iyi>J#Kr!G$jPqMUX zDTYrW7EI73kD@}Jm6xet^(#GEj4q8EFV>DlYmah@%qm0>J9ihZrzxKOz8oZ-%b56+c#kd#3^Ru-1Rudd_!cQAryGpKX5i+Jo(<Scf%W$&ezb5nfdkZTJ(L0rl*I*OQ=Wl);Kb=0 zLV{00znA`eNLjUxxGmb0g9@Azck=hakyw*1UX^gmIJ1Yd9mdS82fLse=0}tI!Q2%i z@+Z>>fy=X+1Ht+Kym_1H_krKhQ3yLAYOQ^@sC6}ep3632C$59uE=2nSCOgs-HpB`h zJiz>tw87zl*yz+wGRh31jkxTQv@t^;r%&*`h1`0f+r@u<*Z&+}?GxBC@QVa&oT=I% zm??AR1>c_|i)l4KF#eCWzM8BZlIBU zVXP{#;TeCa%;ZWn2YIL=`au2Nr9HP_ab$M}xKRdD7yI&DN;hJ?z=B5M>l-;HVnq?0 zZ`sxA?Ojz>Z!|3}kZH`pH<=B_42>vl*2(@7t4_M7#t~eX!oxFF%$tXMUKddBwr#_7 zI!u}2&6ehV)6|n2HSNX6<{M95taM&iE9r`hD&@r$@6jDtYCJi|o*?Zu=g8pR(GUR^ zR~aHZ8IsM`fWVd0sP@XFyJ+*5pb2+WKaGuhbPk#k(@@$AOcQ0fJ0vLvslsVf?K@8V z5)OxCPj52Xr8^kG`|=vh>*UAsM5$gwg1R%{YJD09eEo9y6#eg|1Y!Q+mM04K*j*IG zH-Ub}$Wj%ly_Ml5ZpC^sgIp+Nxn*jJB0b^9Cq*%;nbg6ve@-9;r-fT&=EPQekaNmM zW33ka*a`=Q$k&T?Oli)X>Ssj_Ev`V@51AuR#aWlo4K_Sa(?OrXl4sklbrV&$ z7D&?YHQ`Z?VGGw{)-v}jo;7$c0d#s}{^FES&PdNQwL>&5Stm@>Rp?2>{fc%3VUvJtQ8O3@ zFaOAaA|AkI2L~7|>;Rtgf4Mm>W9<6(o1r3Zhop@5g)`4+TRhJv#sEG^5ka?#h5}C4 ziwBN38%y?`0GKIDJb_8dBRCC)s1+Z;0N(f=uOQK8*IEQjFA1BB3Y)BIsE*S~ zp^VUT1s)q4H>j@DbNHvn_x0;p$Jg~SLh>8RJ~lFAEq&mrnMxgahO!lZ#DF2i$I2PY zI+2DlaGmxb3|I9Ycw-QmnOI{-y*)BE9kEOK$nX#z$EImYg&9a4W$5M=8@!M!T(gkE zAX1^y1-}LX;Vu}kibnI{0$3m+bVp>D2$TLw)~pGs^=j5)ktT3ryHN-^U0rYe+P=RAm)P+EL(%FpD!RAvC$Av^HUspPXes$8A3> zu{LW&v6jd%ADke?n*Lr6@*z?%d)XUpFUZH}Iq4Q-xU}A!hH?^pFi_Luw{6AYEWS?f znRS+#Uomf9P~)BxS57n8mi;)XWyltMo?+~o+Vvw}2k*qGZs z8qQ!{Z!JqE<#(%!1xV@QLbs)pTPEE;Oj6(=@ApUgy5%ReFc?PZG`=yh3>I|Co`@B3 zvA!`m^CRnezTt#wPoEN6Lg4^0KLGUQocR@k?K@Lo~zx= z%&OHc+@`suzB2f3m)^(d*mQeMLB-6g!EnIUmQEoX`idefNN4j|>>^2xT%NElCPS1@ zdmWQi(dG#)cP;Zme0b71`CRQQltFt3W04NA3*(J0hYaIsUp%aYi7U#qRno>mrN4nK zcb6TDXeO%Zf@kiA>y21v=7s=996(D4rZsm%KP(7rKwr9n&`ENW?w9YRk-NhU>Z@XS z84U@z#zyCII9={HW$N@}W$p}W5kIvhefuf<^v7o>pm#q9*2m*wI)ZdWL#UtLRaxmq zSHi*eo33ma<}LR`;`xcaABby93rN0eo}8so>cbo-jlJJ#OQluycD;hy3;cCzL)ZN9 zvN?i-P2rbJbWmCg{4P6RE0yn$imRg;ipi$I!lc{1JFl%Ff>S5tc17`wp8*{yV!DM) z!$Z&-%?*QM52@KEpQU$g$qD)gT#SnUyt@Jgkl~dUrBgsDu`k zgAVPTsUS-SVrJ1JHm;GNkxFBYoWK;0n`YV0janMTdm@j3gs)BHRp zw~xl48`ErH&y{+d5e3dzG5dJuEFY6 zm8FKf4j_c)CRz?W01`)|AVP~Fw!e8D0?Bm;_tZIj^K-2$U?_em|7hQfg4isHB-ihm zQ#s`2eh^*pm5&1PQf8p)|58jX_}N!aK$X;d&d2`+3TJVaviC4U+n)b(O0bG6rjrpl zhhLGSJCL_n>pVK6jCi0&TrdW~FlVCS67>{arL zc!eB!9i?4GQR$2;rd}kb^v_h=7e0YfMO1-weo3|L!8^u2dw&M)#NLreJ4=;eIXI|;oLtwqvE@*y=N^UH)Tlk$chN7~ z*cHF@cFTPw3jOgQ3A5fhQQ?M+v*X6>H%6B9Se@KOC35K;$uVVoxGd*GeYhU$imXVq zbW1An#V@zVZx3?+C9nlIKfdb`<`EXc6&FH`p+)*m;;s#CvDv44Lk1z~r3b?Bq%fqwZ8S#S+O5H3pFF%m8G6$qT+-Iz! z|9O4CNBsrrVy)Ji!w&(Q=vF#Fm@!}o$%!%sRfejwGf0abez=7GXAC>%XNe4HvX0$a zWhPy!Z6B<^e%T>NKKF@pkk@zzkGqN{V5tL1R)keicd!hbXm|oCFhAU|Ww>`h+3PZh= zj*D_yWV1FJ{wYT%XW~IVKtB)B@%bM9I;KU>wa?FK(61!&u#EkhTnNTo$x*G(0fw3Q zOaiH{xAxiB(r_g+#SWdnpv}Ua0mh=e5+z|*)pIm-+*vQb6 z703jo2e^2aZF~~`69N4_k#f=*nXf|8FJ*0EbN4v}4a!)P*p|``g(O}1Y>sgiOOXN- zmTp3K9`e+=UrA+_Mx-G1YW>t4y11|>%|kYkb=M;b1!90+tU6~6WidT-KEh!oysvgc zi%1=!3r0q3fn|w(N+a;qsaJBlij5>|`#+hp2M}|%mw@CdI6!jMzZT-(fWQAHU~hU| znso3<;swo7EJz6cC~R(O@?QbXQxKFZBU`A+u#3?AE8us1cl0!}n{JJCJ2l!c$IY?Q zP>@pP9Uw0liT5Mk9k%QaaPb$n($RwrN7<>@EJvSXtGnf%p3m<)M0Xe*b|m2eY?OnR z3Yqg_oz;3`y|thqrb?ao)9~iLiWbMrLU#Q8BK>4r@di?Yj6+4OrF+)Uh^>Wt*vRT2 z2@noYaryw`27K_7&=W>a?>tEh%G^A_xB)5X%?Onz4}cFf8bM1QbPjgf(cE{6CoffM z@B9aXU4tQbg(?!ZE7YtR)a6kL`2?{45UamNTR)!afB_e!$ka!*i}3=LxqyO2~?umsQ~3-vk<1_ChHyKZ|D zKyyl8>13^f-W}3P_2!9M!7Dgli3V0>c;WS`dj+hwnX!=&dX7-NgL6Lwf795Q79OGE z3vegIvr2b#-W(Fqz5&V638$44PJEzU;aU|);hb|ZC($rC;b zHSM9pTop3!qaSq|oy8uenLH1DYEF0iw6=A=T}-)VY;Ui*xxHU+t2#;T*GI$B73>R= zbJ&OO@?ldL0&Ev3$d&tqfb6|~WNh4hMC_bB#xsxm6wZv6l$?*o`dhu%)6GXxUayKB zM{F#ndAsNNB-{3|APJt}-ajoiP$AC{D|dKHE($V;;v?4KcW(^B!rmbSooYx+T>Zaw zVrFR+lLRmdyYV)HL98V&Tu5janfV%@>`OlT_mSf zTXS}cNk4{0N;hI#$||642eb&SoaKNw>IqRnx5=2%CMd8O)h@ zOTEzrZs4mq>RIs*Ra}k47gyRIZ3=uv3Ot}0N!TD6)Ru`VP zetUkvDVXOI4G%bG1?M5HAlm|KLkNSk^!l4{mw?7EIR1ICKLLgiGR|41XJyvFSx;r& zkG%hLWGbir#_0?=$L{}q3r@z_%1YMm?-pF*f0h)3x6Q|ws+A#-KKOu@8XJGV*&9oU z#m4Yi?c@i)>toxGy0~OzE#B2U{E+Uv`S}6}k1U=MsBCviXkav*a-Z@nW_-V2e#ZTl zy6E_@E)f*1hR?z+PoPeDzzpK1S{Tvok2JHS zH;&Lk)WIzuDx~GOHOYQEUK@q_18m4IL9qUD{JVNLDM%V!SfK0+^*6BVF756jr9zj( zj?g@+_CDFBl_UkSU>WPuuT8(N<{8Ymh5U*PLBZvuJ<>~AE*lyc?dwMxmbRmXOhiZG zLK8EsJeo^YG@?YNcU+K#bCqS(x>4D1HG`E`Nng#bUiToXIaG!?v|^f^L~Sz2amK|ojQI^0LF>^9hY^>*ADHc5-D=QG(3fkqhR7(4 zE7A7R8N<+nO;x+;ptg`5bZ!SiF`Slo5ujev+lYyIT8W75eOT#abt4ESYQBlQNg8RV zTN8@H?kx5AEn=38c;~6ZERSvpZLR%i(hvYKPM3bnw-5NJC0qkFKtEbRXDm$p(N&S$ zCL{$kwVWa=k2X_6C*TrEFdW9i-$}75u35A-eyv)j5LxyEQ?U-C{6R?!-}}CjLeV{8 zOQb>3)@yL&*oS)fXsiCBO-Cr_GWJiiwyWJwS8~HQtCTDCC#XTpCzwg8O)SQZ50I;e zpsdlyHuk-(l1Fun6zj~}2>>=Hr)BFWlaHBbjL$zV`&+U0eX#FGMn_MveLx0%p`N*>Fy;Lg#P-YNe%`qDIo`O=r0V(noP7TFMpr=? z<%hOLM>ZMDB%F0r7_7*ll(}RlB8mhgpP4l6I0q$a&l8@Kj}})U4^4Y+)=P=NTfFNZ ztO~M_kZkx`0y4LHYdPdxpockSpg;CZWm>nwOr4wQdMxdC(0Z7PxLCwK-(fJZ8d*5B z8LuyknN7Uhl)KkstPBjXPwZND6RlnPmaI*eGM=qohD24e=eZbf+a}XXjY=|JZ2D5o zdW!5mL!bO(&RZA^3P*0OU&!dS-F~V$a!lwq4!uiuJN=$}HR};o>kn|pRVrm~#|e8W z*&Vf~No}bF$K{E5-HSC`gVAQ?TM!M{-;9GJ4x?1#6$;UQ7d|6`B;d5lDCV0E*8zJ> z-)!1s@eZCO2)SdjTPd)sl^}GR)Q#s8Z44 ze_Xbv{@!;Z@B=p|DPj+=a~tI==Pw(%-SYDYfHV8&U;5*Ir)V+7I68 zhwk^`i^1X-9dPsf{l}!IvWc@gyCi)9y#&4EGVtW38J+ctGUGQzpGC41Y18aQ?1#ZM z)bdlMjR0Ofrl-Av?hZr*v+=8+2zlBmLDDo}jixnMA`2d>1MuAvbFsV-flA3w@YN#l zd$hU7OZX0(u5j&x%3$bgf?)IITzU9I&*KGJP1m`%XdFLSv}Iu1h>jDOWirr$rkj5? zgk;9EWsYzA&FR^S2C|40%3zu{18dA88I4|M)|i?Ln#Kxyh@J%fxF+||7m3+37cn|w zy5;oR&g7oHBV9nvO-d ziV1vQ{Gbh;)f_DPkd@=*XZS<7z--3gWC1k0>O7$EhOzg`Or#*~#1Q@fGdu1b28UZl zG>MTO(g@u+VbbVa=rcn0y{0{U9Gw`?W{Qm2&G&&k9ce%V_5v0*o-p)Mm&5BTZq5Re%!7^GjQM%u5IWS?EIqtZKvm3^ ztIuCoQ&ym#u{nVsgS|%kMja!VqLC=Ms7t>g29*bR5>N%htxyktV9VtS2$IenJTf)d zBc*{!rxf5*g{7_cI+2OynX>d@5lDe!(L&V-m=`?Hgn;!ag9#R_wc`zEMyf$fzEdYt z8B3zLbBJ)FWJS*>Z)W}$4;MRPzdQ8p8iYPXjNguPOFdN!c)N$>h`61tnOTt_@}t5- zj4LedWvYVeb-FgMYZ2a(tcWp_VIGv+XTnB;ATrAddt-n9$HH9LM_XnzK;QlVeY5?$ zg}MLe+v>l4w~CX0c~t&LcNniaOInh@eD~QwEdo)2XD%KZKob+ANYxXIEYU}|x9`w& zZ2`3vk;RGp`6#lNh4`1kw>~+4-Ke5%TbV=l@w+nE9(TFlzjwu?>Gt$ke*;h&u|;P} z_=nlarzGw92M1lW=HmEzg0VoI4&>$NOASKvE|V|UcCCY}waoo^kBj>^-5og|tX;d= z==yUv9*=+p%Z)k=>NT>FzkqnoV~G{-sIDgLwv*qg<-v0R{5P}FyRjq2;mTkD)^ji% zz=CSr#CxbvG4rfGRh}pdzi~f#eGa2^+91esac39cfdlWK6x@49jhNs+cE!s0nE>zM zzx;;-7eIl_vBUL*3RXi>VMao%rt}K_+9==_Q*40jgNOk7DUDQb_!D3782<}u^fXpe z_WE|r#`&R6SW?O8ONkI5@i&0P4`rTe44@>LfIx$xod^IL-(#p3S|qUOqldEX@$G2q zZv3=2J|C{A(y+GkJe@ST>|g3Q%vwI5eLFOam9E z3cfe zuJdLknM%(7(l|8|1Cd#F*d6=(KWycu11DX00FC1VH2yD_4E}cvT9U#lAaDhVJAo}D zqqtGLUnN-}FKm7ZE?W)`Ay=gwi8(Z%C$S`qlUkA81uaIN2a<>a4%X`%ZcyufAWTU)A~>v&BfH6d>!3@}8+G=mnCu(lyF7wVVNiuWW3?KVIrq;S zkM4FyI2ObK4Jx0Zy&mw{V8KPrPy_rM=MazSuHN;Pje;@nqFUkwF_FnWl!U>e*0dLG z*IukkbFPEAH9|;j455wT+|>QQq2FyvXpxrlJcwlsWE;uYce(=Iis6HY9oGOdM(;hE z_8Kh+2;}Y$DVcOlf>`vi!(c!fNmNZL{cpAq~Y2upH43|))h(5<08$L zxPalBW!)EHw~F^c8yZ9OoU zvIwEn8G4CA}V<*vhjSkggP+| zXEf>VqQFU(3{sl@Hio?i@}c~Ocsm>T5_}oXb<|pt3uPlPR5Cy%NI;(~N1~!Qh<+4P zp)_Jxj#eh1KoO@R&M>cJpGH-D=QtNtvmnNbsWSf>IDu-!8)<2R7=2hKF0qe6tktW0 zr%Sk+f6w78){#vbI?Bwk5-`~}Q|LpP)Pd6G%E<-pV*DQFN z`$fGOS%i)N_FCxbf(M54qFYTmG)+r1wwco5px=l>OS#azkmx|+0f28u0N~pP0QfdH zk6IFQO<-g+J^sUaJdyeNcE6AMjSVCih64+RA1qqTQ7PS!BYmHrO&(Gno9P5hfC|k1 z$C~;)i!iKTve_L+mpF99nxTk<-8_z@QzRVN1G_4k-&>)1!>*P|;;p39f`F{yoVcQ8 zpo3y{#MG}=lXhSk(s`MoR(*7KeGSlYQ+7w~{zmOyM{|9S=3S#GNcEvIyBA>+hYgwB zm11;|FG~0yrWA!O*fCW6C0)tloBF~vc|r0eK$)CgBi(0kU=3W7$H18N)t&iu87HMLU2>e~CH@BX8p#eOkUwrI_V(P>izD)%{uupg zf;pI{qI`5??O#M{$+~zaJD@2A;BCgoC&B*nQ7Rn{2v``boLMAE`k=ECxtNNjKARN~=rsrn z9_xCr9!3W~SjJNtR9`q2D3WzdMOn%hV)~+CRlPbZCEb>_xG=eUdbf#8gEqAFo^mA? zx*(ShhIZ%{%U?S^Z^PioFFlHc67DDeC?xpvvRat`()+(Jlof29ZT>sXFhTvl1|k`3 z&U>jWg^84hWJqU3MK+VlNWid#N&W-`@<`yf2W*mdhbz55$Aqk4 z(=gMCZY6Ef+hf!~FOj7}aUuW@9J~8^3}b3RPm=9?rmo5m{n)88cR(%`PxNuQ4oGrX zdqdG)cNmB(6MiuuFj_#*1-<#tGZvbPtmA7zo`eiRRE4M~(}4D+YUpfDOo$T!&bLcj3v;#xZ)eqBrz1 zStd#Sur=Yi9~9gGQ_usdnTt>1kUA2vG$IHoN*7QYNviCqVCh|w#acPV68s$Q@C-=2 zKSJv7J3}=bRJ*t(+F7-{ulj*xnOg38<5F5>Up{sL6GazD-CUkO!58Ou^bQGh=|ZSr zT8ViS2U6Aha>SK;;Zj9`6-*Lw+#!~&GM?EmJtSeQ|Lg+Mwcbhx0y;pJ2;aVm{kw`* z(b&oafblT5F&4DacXa%pd23aw@0v)*$UdSfChDR#-w6xj&>FQ-oS;c8gsc-KC4Pu$ zGtV+vhZz6rH8#o0QZ`#_WM+|`e)`Ql+ zd>eoA7VM;p(rX*uXB!r5JA8xf#TtGs{^^a)J98@tJtVXx{@#2ZnaY?PJd|gCpP4q1 zI%ULg=-JG;T9C(L>5=(Jef^@fG-lprg;v-B9r|X_VP@-)lvfqL#7N& z1^cYgakP5lEc@wN;-ZY=dL%om$>SvZQDhblvaY$-$JwlG}1?S>oA~ zMEBiU;u;O=(_@G6EV~bP6e969EbfV58Qteal@mfa%)Q=;i$Fzm2v<^Z;CtjI<*T_3 zvsk5I%_NSE1O^hb${kD_riXLL4k6gXkJ9q^?eE;v#G8oK!O}@z@`|IwQRLfFIp{16 z<N)jfYMjV*L@W5rSbuF#`L89eN|_!F`jZnm@V+qOzx2qnV|& za@q+IIhPO=L?<$de=bad-pU(N-)c?Y(4W*e?X-pFh(0t=4GTF#1Kfb> zKXjIFtJHf)l^$x3(;Un0O`b?#K;JdJi*294%=~Devn*FqhZziyTT3rlNZ?BG?ma3T z9NABm+YABegxEE7XNopklA1uxSTO*<^E9V$nx81W?GE_>^aolEMr+_Ws1L!Wtk`TA zP4S)~OaV{2bIf349JjtIJ$W$|#p+$K-)(~KyF<*eb%ywj3EBDj=T5g*Cc=xe^K#-ty zZaSc~hW-6|Li4UM++cl)#btOB=x=yz%*3kcnb6@}Yx9?#JPsG))`^$L(<*+v{IZ?H zR!#YCo~r*A=^CiLyof%Y_E3^oyYW4m!|@C>sTEqmcHh9&eQ%MJnwKrlTL0+z=OcKu zJg#xh&Jl5WbBIw?bge5e4JOUzd`wWKy0@jv#u>}DR|ESN>;`%3De)luzFR7HlcZoT zB>%xn*{qMhS=M9*I>!>0uJ;AU%UmrtR9?7i=(mz1w@^u~?F-N1gbY0Jq-*Rg?Fsz~ zSDsDybm71Web9Xc5 z$1C)^M>DV+d`gbKL@T?>dr8}fq~k&=q@wwvlTFW#`F5)7=k!x@%N3^yasC3IzPowF z@nUAEKr|eL#g-nObd@uni}#JYRZZQQmO0(DUqfXKZ35n~&3F3-oJ?Msy6mx*-|mJZ zYb>_FGS_>TI4+Dvt#q$=3%iqDDA|vElo=;0JaWnj6ODO9kUhR#LO)ruc@W!UYwTfH zzJHrkK$ce)I$+2LulnU2HuYnPRKv;qiY%977J;14)P3Ju2(nbXv62=q*{qC4PjE5Y z%rTMT0kftc$ys{FGTH@IzmP_xsRH+laklAK6vzSzo8owh22pq^Wv))}S%jGzW|Z)T zB3}a338Wc~-n{162M|>bAK^I4lLq*rcWcfcSOZ8u3qm+pxL;LlBXK&7hH&e43f(yB z({K}9MLGnjDPYGL!1s8}-obcK_LKNt3j97GF}t-tE+L}jbQG&}nwQE{a5a_77iAd; z%9;7R&y~;Zo6D8Y6%*&pzw0GBJtWkFU51#w#F~gYbCnsI-Lh613VjCu@--}ZqV;fW z6k0b6JCLP>h^Zq+;?d2w1NazK;7IwFV`n_YFC`G17YUO#iLR!^w1(7^_N=}^Qw_co zv9Aj+cZ|;1?A_3PdIVN+KUmPBuY{1UdZhDPG`O_AajAQxU3B)X3U`Yn-!khSS$0n> zd!^O9GU(om#btzAP~ZLM&w=I1RrE4F(`5)3CamGGU&tET1yAO_uo<$>5JFIYgcDx| zUaU^qqm$#XmyybT$V;WIOAh0x+JF`}r({{0;{BXz8iyn-YPoaAC^^}1V3gTUQ?O%l zl*;U!Syf(hoByF9+V~l_leyXQD@MD|tCY{t>O#GER zPK;sW7ch^gY{_Yw=yrAi>rZ7K#q7k{*57n)DtY$ba}L9u7f$x?>Dpw0rVJuA0t!?@ z9{=>(V4Gv_LrXh9BI~I`e1-k_N0h27K0OgJ;G`dg|MpGd|MjF-GEY9yiGl9V_Rh1XgOC4ht$QR9xAPNwN ztE9r--*%2R>yEHOL}0@ncBV5{tB1uqOzZT)F!d_vaHvo2E_BraH(YaL2Gx`NX~==Ie2WQ9 z30dsAHI^g=IZC4OAhw@CucKCB(lz9yc{W;_v@5x^KtZ)_YR5pp8pRCB22(-SNj{}{bo zpirZTD+2ZdKi@8QJKsrm=BV+yZ1 zeKJr;!`pDABr7PAlYauwaz2V5cmhH-D8`sLD zYNc5#4-v1*a{liG3bDqJHi_rK!)gntXT zpXBdneIqjSqlV^IwWq6TvPNz#yN95GE6wfna0Y4B7{}baW#qUr9W&j?A0D?E)pWc^ zj_5@(m%I`8l-NPDL2<*F2IGp@hWLh4E3qZrFdH8@E2x6PqxT)0>XA?UDMw$^m9M;9SQm(Pk5Ep^5o@SkVyJPL zZN^N2Xs-pIO1I@&yTuTvdd^0t%1l?0%f*=tD0#^5WD9Bw4pSYb;%nJ(G6F76A?R(7 z5~}9%uh?|;2}h;7Xo&T9EeBG(oNZ=lxYGF1frV#D6<+TO>+jwSz1#**3N9w z38%zI?=P+*{=Cqv{Kq*sRKu}<)Z&z<<10K+OwS(d7Jf-vsXHcRBC9;EE8*tBK;mK4 zAyG8FmCW0IxTxgF9QIGKlnC!!Lz%4 zls;y5m(#Ytzkv}B8>&bGQ!w$zec58go&0eDNtnx+1F>s|us`t1Lm#Wn!WxU!Kx1|{ zvvAd0zG2oCyKo1EP6B--xz%#6ab&Fc5z6P?(>{2y$O_#EG7jv+o8Sk~=m31PvZFhc zy~~2rt6Hh%$+mW*T_yNdsO3$1F4;@~3oXCa;?}ttz!v+jO(6;G#%>s0TYQB%l@ zCFF!FY-_VM^uns0;|%JDO<)RQidB{Dxl^0K86+H2l4_*P4+w=BaHhStBlGl97m-{zLrMJ{G$FNhW z?>{0HiWGj{Ub0Z1>xr$&*WD{*l4(NN^2!p#DL=d5MGC{*!q>>frq3)^QcKEfvYSR4 zZ*d$$j67A;5}u-GzJG-XM`z`UtXi}-*Gx5V?;#-w`ray`j$n9Lg#*99e#Q8a1~o`P z&9)X_G7XN(kqAF?dS*h-AxL0g@qp2!#^$48#3FGMn?s^BnIV>_iYNafJH!OiBb&+A z52tnd(_oTJb%CvDl}`G;$s&f|8$oq1d%#`Y5F&doLE5eI0e%I#=PpidEmUvS6g#hA z%$MzzraS^`M+uJCh`KadVhtOwU&a#u9x(c@EW*Mhgdib@_`O~nQPC7#aEmhyh6>y2 zNHIH}mlQ1uNxZ0^eMJ=uI`q}#KE|L+O1A=1N<%@I!Hw+-P4FTt1BVzGkT}l#^&hsEyaD`z ze|}WFV?P5e-~ZDv`+wGt$WJZ(A4$%|D!TvW#m;BU)8gLgW|6&G95Vmg5_hCrI>7I! zPr{qB!51(vPZHWiDS;79{c2ufXT)L$udgTthbfuhG&M#RaM*Cs?xmWiR@D+y@{kpN>tMTKUd~CtcT~HB$uRBCG%kT!f85eOryx%p@QCwc%UksD zo4XXuK4gK)7fQYQqw#CJF}sd52~^ZfRm{U9{nN_B1Ny52w~DvC0vUUJrY};C;-uA(D?vSb`au~vksBD4`nQ@c|$tD1XDb> z%~|DviXY}BtuUPaL0ae|ofw#AkndAsJz+jOpG@{R?-_i}{D?&63kA4HH~|p6ke!i# z`SH7LDuWm*rf8E8jBBz`Bs$!yP=0Fq5K6cknXEsuOn?*9gcD0iACq#w1gHwFpMGBM z)*oCQ;Ec9@`6{t;Ln?Wz57|Ev#`zAxoF%qiknl`RTBniizJ4#0sc5Vi1`sk$AK*3S zAWDWziD1oyMFsCiEij07#nWeoEo2YTNU@@$_dy$ee)^ASX{NbUZRH>9UW zAGc5-!C0`H+Rx7N@5G5@SuPPCfqEyHpXE8p;A% zxxMP?kHWBf7V7$E4ZU*TTuhy_v;+5ymZ`6c{9WhK40$Yj)bBmov-PO{tJCFDOUQSaqY#i5QxXHA}PeaYP!MM}3B%S2`t!z1yh7F>?R^r0z znZRqHcc_1E5@~DPYo5eC%sMd2KZWk0C>g=Y!@zCSA(xoC$G}p$2@qMMyVmR?T~c{` z&enC1RlEzI`+#7|l$=KPz&JX&`917vs(77^z9>#4A+|WpO1pTrpk*$XzMMqXSfmxv z@t2u;1(R{ITmJT-{^+^oGE+{})ee%4uQcg2S#AUp%?f143 zfxO9f%O-hbPvmvnprddDCLEE+W%4+DB>T1i_1JV!rT7@ewqv=HG6sBR$Gb)DU}~!B z@AXHKRo%H+e|-PTcxA0C^evCWaYl5dZkba{-VKZPmLoL(Bno*lY%1w85lofUwE

*Z~_pzHjloisP=@FD`V#pO3X4-BKYs&8;Kn|?brvDSpLU`8sy3gj*j3*TgCFHlngLr;I&A>B;NLK#pzB67{8 zYiB!|>f?I+gQ_~AhzbhasN$rH+GVmFi*r>GjyypAQsE1`;tK=CW%2JoVA~};a+QF9 z`^T47y*Q8rMWk^)P;jS_MMz5Sw;RpLX6YHv#i3&-6=jjyMrs)bdf7_VOClTT_mLM+ zs~EH3)+IDzZIah;EG1YL`1`l6TN$iKq<`o;UdyRlqc{zp<> zt!Ax^Vvg#^-U@dC&gg_vNsI;yg?z(7Sx^?jZa`C}YP~^L<;Y~SZ&tWksaE}@*1J}| zU^#N;a!C=12NR9)p=SP%2lefkz+pYt-Mta2&SlXJ({0AvY1=vXgzLmNN#MJK2gm@f z23jNdB~l>0I$O@hLbxR4f&a5u@QGD2gnUlu+jIb(I%ISRnMH3aGtk z!v4)(#=-DjNm3&8NzZLrY9_gOLac4L=#m8Mm2dpH zN%4{|KI8L8r-nyckXFuC?XfX)kZw!akMc?mrase*5yIB{!?`ikmd03*N|g~bLWC$k zo|vlNDNIWrpYVitkEAp@sDtj5JpXqdITA~ei-uU8B|bgZTCl8NGGI+FiCTU`7HFa* zWEF+*w4Be0JY{Jgwb7#mbE8qJL4P@u2Me=jM#oWu)10uGn(A+S5^kH^ep%^coMaZP z@+cXCBPGLXw=*Su=^E_p^zS(Op*UAb%R+x%Icyf6U}2`Y)h!OfktaD-)2G%@T=5DP z0VTeM?OY{SPYHW^QaiJJE!?}K12fRDQRyO*Ih$E5Wur!p>RM>(6*2b;dxL+H&Aa!6 zOD&(JkISd#PC`x=-WfiPO!Wb`#bmN-RA~&RWN2Q|n(M`wC-%dhc1DsSwEa{_wTAUS zD>+Y4nIb-sXvF-06Wre;hOv7_+F50;VIDq2`>fOPz8WGl?DPE&m{dsm4RO3y>={Lt z$d2eIoGK?IFD9zGSjks#q~nM792C91oNT;zkNvlcQ~D+3});{XSc2L_SxRN zerI>DKlu+Bxm&&W9v|n6YY@si(R}T0pJP`921z+KZ*!$}-C0WCjH&^9J2TrN> zp|fg3x9q|RzpLRa>q_^x5E2+a;v3@AAa#a>dfyUY3MZ&CQO*X5MjPX6M?PYT5~5>8 zh>9sP8>y_yG)GqB(*nuQ95q!Gjz2vrbBRO`pdu0R#;~h#7_M1ODzZ4*1K3HFvqJnk z=lEWnK|PyRKBq(u>x1~*61!pSwfH)OQ2-w9jBWk%ij&{)dUmAukWVj&yatX?^o)|2 z!Q(RE#+3dRV_Hn}LxE?UD*Q#47n0S>SUzfsX=+LKba$HKNLiFdEPFdf4{K66r-bM- zOYogAc&CHf$w_y209~D(e#|ae8U)X%Gl5Y0^{KY(`VL*d;TMRX@ud@DCpH0-QA}YO zcKu0r<}sv72F2D71`z8;OPYb6AoP||RzJ6>VKIJY<8I8cWZV|Hi~P4Rz0^1b!fg7! z)8s}lj_lb}>LlMi1t>C)cGDjwz^-IVs$|R7dK0+C18q@DK`me$EZmAIp}J_GdD!x9 zb{#dQzpBAdEq~?DSXDQ>41Ntga;-(C*E?+b`+qV$;KsG`3O^6y%^yw2|L$@8e?+EM zYecD|u3&v{9WiwRAR&7c?o<~|H8)c+iLKZ`>)3$71q&n>+%&*(b$8^Pzr=hJnc*1=;z!qboO|E!dv{)ZU$(Kn zKYM#W(0)VIoLLN>9J~qvcixG@mBdO#pN$&ngoQwHuTZ2+^Ow4~q&aJg-ddjZ3Jo=ioVk(+ZTVd=X`7|3qtG{s3a3p$T$ zm9bv7x3EYSp95Nqy~RPF$oBoaiQU)R?!^e#TmZfhmhxTDtR%c6FuDU<_NqBUrJ&^ib)>`^`+SwX2BfYex$|0c zGao57qj?5^R7zO3p0v+r*ELlUDCOCLy;`KbMASF4=@_YH@Dr>!j@0V}6w>VBjMXgD zqSBgYU#eoW@k(pH0AqCug6H4Uqr!bF>V#4K*^-EG!QW2InO(3qkEZNP94*w zfN`s%1y|qUZm?UV6zn*Yuz;oRjaoGp4?{2HM z*tI7*xvJ{2I+F=4gguaPSmQMwmDKs&QSVUL!WG?i^$ox5cwK#}=eFNHR&vzvdLOi> zeR;o86&vq@HQnFsqdDo1O~+{0G+pnXbKDa56z+9`!|%rj-0ZzyzW9Q}Ppsizvc-#3 z1`zCef(VGD{Wc!7V!uV!Xpsi@3nswvz)I8nSfb+q5$K0{UYepTm5Mc&*UUGd>N46@ z{ZIkSz<%J?)*Hfp0Qa)q(tK#`?v9hht$)okIxuv=b;Z(P`x)=HzUBn%93X&yg>%4u zKsAE@#1?^nMOOm9R5`^R+jX`*!-za|nqS~?B>kQlsmlg?t{sl*%RQX;^%$F1HqS3? zdF4!NL~h7RRE%n}O9+Rk?VW*a5+Bs^f=$WN>43(wY3TI;2S3RaScx$EBQhqMH%1Si z1|8CM@idKCl>?U}!~2cDU(R93bFjs=L7VI1T^+HPQC{yu&kd2#>1uR;99mCh!|F6W zB|si$no{9a@$`na3#>pfWOqzm@f&6l)9}PL1vK-_uRRgJO|)vmZW|b@*tuO^0AFHX)Q}GJK zChrTOz1Xtr8a6G4lsg@MR;)jKZHz|qFt4A!>5DDrWY$vHuT=GSJ{mEu8(KYBr#AOD z-JhhrWmEvwc}L-{Vs2d$0eQ>^XXM>TBg#ENoO~=4B)+yS?m~8V0Q47-xU!H=n8iCq zw2JU0Hg!!N*%LhV%umPOz^ypRnlBiB{Q%Q;}Tz+K71 zZjRqkiP4Dq#O_Ma`!d1u4jbq(3vn=pz6Muu+!Se(4X(@ZYek$~Mx2cOWhVZsu@E*%SH_4xQ;-c} zxwxi~oy>%n=pZ88W8;;mBPV6GpY)1!M3*{uZzJsh>J3}vIcHCmzfww9bjW76N()L` zXjnDiZm;jvP|p-+k@CQ=q|{H1N?obDMyEwsB% zRa&nj)KiiS@)^ZXU5pW`;f?yb;E6NXxhj^nh*GuHdX_8ORFHt&eF@yn{?n(=_StALz>a>G9aV+l2LNdE&|cDSM)KrE{> z)q~|^zGPyhbZe_*LOS4B)APaI#uE$YXsdHI(dt39bvj>@4-VAcc*Ca7#bm^?4uNu+YTr_b@88{@eJ}D|uaZf&X$oOZ)#J?Hmmp16n0CYA)I2+) zuRJk|nbMKpc`{14(26!%GECckXd7uqEyhf(IZ^F7`(?PW=(UEB;udgr#n4(9<~~H3L(p7NFliYlwh~ zBBDy5>@O(EIk>J>Z&U}w?fx)n2GJ4veYEsX@MQTt^dy>}K8Vn0 zZL>maD$g}1=Vlc`URxCUP?0$0nS2-twvS@*lzSy45m(x=gj%Q_HPm~~q#>HaPdYCU z<4U?*7q}5IyMG9m@S9>svd`4T`4Ei89VJs+KTvt6MO%-07(D~cWRheK!-e|Y2*ufu z@(fK0>ax5QtX+t$qY8mHK5K{8@a2uh#WHs%7aEs-Kfwl7WY3^bGdHClaT%r~?4t{N zNM)>;G#ViK?Dp>ZjyY!a9PE3NV2cb{lS&vm$N0ap!8+( ztV@HFg2kex%0~F1;Dn+hj%=HlSX0>hnga`_9fjMPB!42pK`xNS@t{U#`)3>Wm^5c) zOam}zq_5hZub_Eit z-NLg7qqHZK(DcTNywN4IWwrI@vCKYhHH2zRdeM(GbA=}1N8by&T<5nAZfDG2UE*|I zvRD+_yGHZxqCJY|{JL8(-~$-Akjau}S-K+d{{t(K99HX3)Fn_%;JriYX-$3bOJsVL zRGSOaCDx4LUd#(|)3O!E?GuC{7$So1qotG60y_(9g*@EhR=@*`RLaA&eCmW>l)~Bw z2(4mM$kGutO^jfiB#{9b6QdSGF#ov^AQCqhRKJpdx@g-rBS#V&6@x1RRvrJHA#D#fXHB_17@hft zu%Mfr%e;5{tCXJDrXmXQqgpe2wtMgV1Y7-}*ke22A9oaga6GOJU}4OtGEC=&-QgQF zu!pHO*_OMBXtQqK+0}44Jq+B`Y{Lu|g@$`P<#IGX$L*nM zQ!8USUZi)Mn+QCtC?ZuG&)y7`N2)8Haq?HfTZ&V+#fpr|mq6Ab9LNfS8*&+OY33L| z&>ihBHR^%i3elM8tE~z+JnGv9U-u&QVT$dBU^6}uywYh&#w-i-8G^1WG!@wtnEB6f zDAQkwwk${*5(jL0g-sV@`%G4*&*fA_#VGA!Rhp{4y66iJSugAREM(7Os#hv1Rt6Lj zPVMq*_pQSs)syusgSD>ToLBqx zn&at6oC`eIFWP=})kY|s2m8v|uJy4Lyo*Bd!0kVRV%#zQ!UH3aG+o{y+knQf_ZjW{ z=Zgv&8{8j{_)uqH7y>_AFuNRHPfcs`6Rdww z+U5K-jX`jQy%|B2w85~W zoLn(~!2$|WN}oJ=V9gm*2I`E1nbD6-A6ac%54hxKz}B(MpyyvGCLfVw;~gGJ5cLLO z)rCEhcF4`@+TsFQCHsiBsJXm{%&?xC{6MQG{k(+r4$5$>>&Hl!-vuCM6E}mWT zt_-r<%L3ifXm!Y%1KuHDbN~7eN3)7wzw#=7!ZW-v|F^AM&C==rP;xY@fBGvg;rZD; zI3+z2>slr-lCJ`lSW4p>yEYxk=AqDrD5{BNEJ%B4(-%p~*wt}{0rE$K+c69SPeZ-? z^M6MvMapcK^qJhe8-D*%`3`yOZ$HV-Dzb!R51F}t`!ScA;o50E`3aQadI5a*c%%2( zd`yJB-|;aBc}TJDycpu-qE8`+G;W2N-wHF;3$xBd)}N?cs@!!&>hebe;&?p-dELG1 z#CiQMgF-Qe_W!;rME?DE%krVa$^fP69TMovud;_>bZJWPeDDXN*26(TruQ6REd*fy zP#UToJS0NU!wBkq-s5%Z}Z+!sZN^|&pGY*oQk%?mYFoH%Vp zU2FVx{$f zrUI_Tey07XAabIUm9m>SeC`G|Jyb78jkjYY7PG7}15Q#ewu87Q;VDg9CBFU?Otrlb zBxhZip)#v7Ywo;yqCmS{uI*)Ex+!s*S|9xR?DF9;x_1KWUVjt=o9(W0PK!&X&0N_q8VvvSkNK@4-Ll&psG za5C#vN3;pkjH|-mt%l7P38<##;C9n7=R#)%gOq8L<6G*4ZNQn~(biFP`KHm4xQdL% zsDO+DBuX<~Wrd=7-6n%t4fGi7%{G|fL|U*ywetCA_pht-anOd-SkzS{ucQn}G+NxK zo`JJ=gq6k2N(8~V_e zw_gw{5V`kq7Z57lR<#GsZuyF`k4;;o;#0Oq{Uzg3L*P@WyFc5P=wW+XX3J`8ec~3bE}WD$?`aVm%p_kz+D$)75a?(UiLltw4#?+_}vFV z{YB+_2)=U5nf{m*wx^L3sbvz!QbooTj*F zPrjja=Rs>ow>IvbfMv%XBT=e5ix*&}_l%DTH-U?Y5e2Xe!C&eOK}hO^rRlmuZ^MOj zK}FKuTTj$Ws-`Z4SXac1(bi4t25qvno(a_`VhjL_V%nSR zpHk)GXaEa1=jlS(8b%+N*btA+0WaR?m3GN`24W>rI916YEvGM&V6Xz&)GX5LZe#(Z zwR*ogKu61Ynbnqy)gsAhMmy*;QLNK3KRC;EXY=@voVvFQL8+x8Gz1<4uOt%p<9Vi4 zo-!BaL=l(d>SSmbxtR8SxEs<&t`&*)u{p(|x2}xDnu-fD4jr-hYDLe0z`op*eEa>9 z`|=e0^LodcDz8UoDjV+WOa$jrnGXIGIsvMu6` zb*v29FhT>FLg|4RRUSN^e1QApcr8^o?})JdSn*ey`WF>*PaaO70p+db-~>U$`Wk9{uBMw^4G;4#SQ$m%KeW!fq4~@A%#f zJ*2HsLCyS`L)`)9U~=;(vO>VHPqaBtj>Y7k(2POSKiDcLvxLiq=sD>j_)4?Vw=ala z>X2XBJ_3TbKXhw=0Y?2=P`O56@h!33X67B72dJK=O6@L@6iq`b>;&1d`YoeYc-?6= zVT#EaG!tyFx=j~#< zWMX4)yW@PiMbk;Bxm7U(rFT)l87E7Gnzt;` zv(BobSi~1-<#77CX{;Ck#g9vRznA=?Yx&|TSc8qqTm%OGPN-UYB{~(KjdA1HwL3S! z^lt7x@)Sof_p*$H?yRL{@hxOfHiM)y{mB4OB^_C^1ArQJNsLTIinA%-A{JneJ?R>~ zxt8yP_L+FW@H!F68FUj1xnRAx+EGur+l&$iRW5T1HDhCun^ckOgjYxPB1F2B2=(NA zCIrwJQFfod9jGyMQL=1Y?#M@i=gBNxZb&++U71hsJ6tAV=^Zc^9*k=y;@Smp9!17h z$=BB>V{in~3S|1*U}-HjCcx`Sb;CvN8)1cvEmtW~WP=Yx$KX_$!YxUJ!t0DiE2d!G z$IlxaL;?>>#hx%ZY0~J)Ehr>k=$5KS;zY$|zClfvo6AzKb} z22_%ytt#|*0U@y!6)?3zl_I+|8C2(GRzX`JO#x+IU?*DDzW=p%BUzGJdf?Pcj`NK7 zN%s5qORn=y4*&bkJ3g>N+_%TgMn@j-Q6njb zUwA2pUic^h2)yax1YV3#0{3~y0_Z0ggKwgaUlE+&D%t+z(*hX(^#ROrc^|{*OG&Sb zw7xfSHI3|f1^FE(!dKMD|6=%N(_<-S1=Wc=CVcMvCWcZ*pmGW0yoN_WVFlw3;(QX1 z&#i7QQ*O!4k>E=n)t8jmZLR^u&j3Y51V;BeWE&6wu zVX4(LscL0T;F(kF>(uYkluDu`9U3w{WURfq`UR;bQW8Jp9b~4?kVDVoX?T)Zb9|sN zDD^|1ymU+o^TMI)Q@%8wq550;(_1ce521sc!ybijv@hqo4B_@;m zDpGSfiPrw^#^fk7jnJ~9M-|jt5UeU)L(Qi9#&pzmx2^Z%u_#K1cnkdVidY%6S?2cMvaVJHes3S78WV0yjj%O(rA2*A3LQzIQB}L6+ z1-eU8OFGida`Hr_gYQ#lGNzhF<~so^Af}vS@;Sn8Y45%%G+OR>jqzRA);D2pegagi zu92^47&5B^l%28-4km3Nnzb*=pViAuOGe{Z4EdIcykX6;9ICClwv+-jmUah=wd0fD z7rTnNqaA0>P*)q;d3%XCnQUctI@ba(ClfxcWZ8Dut&rXTwDWwO*wDYOl4)=3d}>2R zzsOONq?h`#irrs*HvBOp<74loihf??mR|+og8%J9X;m*rEK<>;INJ+oNk5Xl+p3%0c^y0`*Cp;JrD zC~*!s-o**6@`%)E6kMEP4EVZ5got^Ga+cF zhP5FXKF+!#!Oc@4pA0TQSqT&{r-Y6Z76kXPccWHYN#{7QbdFlYcp_3w_;fE@qbgUFIEbI@T;=lSi%gM7Ee}6t-sXSpGn^ z=>D-(-0-Td-muxSyI`@|GQ4nY;a9e1xT_ukA8-8igzdCfl&io3s(OI?M>tqHSXv}C z+y==GiHq1t)WeDzoUx{4U(f?0o`T!|7gzxdgaT=Y$1k!1X$VF=m$hHy;klfDoaU0i z6^J^VeyL6$k4JW|>N<1WQ{RNScPj~}Z;CbkG3#M34c8QDRLD{uqRrQ=nzA&CE!FJM z;|gWeorGeYc-+7;N?piq)8h(rNKQv%rMRQJ$}m!&tI@ep`8PIao5rc~&9mk1*q_ar zb#I(5#RWsJ;xtwfA2+snNR>W%qPqEd_K_8WRW_u^iN2%}zP9;_ZFh}pXF$hcOh4Vv zYa@sk$O*o2)(rF1hWb#C1LFV_3jh-13p}{vMc*S!ozJ2z`7TgIE6_`+PiIH&SJ`ie z^iH>C!)%&6so#irV-_ zQ&w94cGCEnRhHK9xuHpbQ|@c?#ozKxe=fcH<-PjB@$-_uf^}3UDDg{-`6kZ#GCfzv zdPAR9fN!eAtx`^MD9IG$!!a-SSS=G^_u^*v;^S7zU1dQ})6GzdqbPVq#67o_;TNfuK~=UB z!~kmayMx~R0J(93TWhdi&Yeo+Luu?G>g4S#aIxh^GNEWUAiFojesRN9e$U{tKu7gPHSsV5<2JmdiJeCw2E7pY%u2;!^(gr|CXh)~%?k)skk zExBpPCp5V+{RytdX(fBTLJ*gx$~o9oP5}C_?7$e`b-zwP?JxQPW3?W0Y`i0ZwF}Qo zIUcV!e-Rc#9eFg9-SGp0_2$$oq%oeC3(y+Z+sbdZ&QZ=`(_9>k*ur?olcNZ`5TWdd|~ z!ry?`h~n|E8`7kwXVSsA>IXw+&Mz(ESo%u-=PyVQ%ZUenM8%WK<=C!?+AsJMy^~oCW9w=EN0dn zVPZ#~(M{?M19eH#_vJ2n+`%-aLqO&XqTBO_q2w~UiZcWGzkV7blNvuZZxYFtVM)Ss zpmy9F^RvvC!6R`jhrBBP2SSYKp;#khtIU0g*m_{FCFQ)jKzX^cto!{RUdK*r*ov<|I|WNW ziYS5q<%rHI?__EIKXbaetul@(svkWlI=a-ae4#U#rdimU(Pp#+s~kFQU%MHEo}jyo~-IL9AHfMh9kR z5|Fw442#G<6%CG`aWG7*U2roXyZY$CaBGssjp*n!6>EFclHI)t?fTX;RsQN87x-whs< zA7qbrL>U@@Z4er@)SsAxa~r?n;pi4|*@@!y<4@C1o|KMoH82tPL1b^0%NaX$TaZY+ zx7v|$mz6s%TJK~T2DRzPqkrmF=9{?$Xwpor-Ek55cP zkmWMQNp&Tf6)@3wF@m-T-A+n)ylqq)K9z?acHuN7ZcRPi@}@XB*TDQXCB?ox-;hRG z#Lh)+nRQz)$?Z8QV;u%dt5)i^+*C-)0gbxOFm=SiWJ?Fh5Q`!cOQ=Ow5wJK0=7zd~JFhNtfKKVn1B-0nqJnjCGkB*yi=k-75MZ>G>sH zIj@c#<&Fdhi9W6x_ccHpl$vY2#L6J83e1^TbG?IXU%zEzV|aYt7mjAsv35#@YQzNu zE!SA?eTMEiUZ@iS0O+-h{j%2y?roN!B0Xep#S1!wv-djoeofF5z}4$(rKxq?2I+UY zoCA9lq2hD`-DgKvboQY<`u4GXX^tUU6`ndIG<#jb0_q#(s`9ffc$qw6@7mbS>V&Y;!FL5IQG{Lx>G3m_m6PA#rYGy;v7bF zqf1MDbQ5detIb7g*mpa%r%(8d>z8LqT^2owy>X42psg(A0q=(?ycp z(R}L*Bz~!SsHh*m1f;6)gTi47Ky;TLO18a~MfrMpd4V*BqvL>wd86M)4JO6$QSiz6 zWSCIdlhxdkhKHu zkNqUMS{aGbQrgFBox~#^{MAVk1dW=9Qg-uaW&JelC;E_exYcCoY>Xs4ZiM?KCnV-1 zvNm5EH^`yhM-+{K+Y2`h$o(zs`?2OdT3r#v>gT6?EwvQ^02eI$NZ60KWz)xkIK!)* z12fEjZji8*-;0C9SL#65WAphf76MW(2g#P2@qc?EI*X;j`G2}~pAeInkgyscmtr&c#NdPC7tcUT>a3E1w5gy^t zU?QIsLLAA;nagI>P`SVdsXt8-_P`HRU-Xs@1hXmH5}L>MR!K4$^BMJen-)5Y zXCK=Abt;7|!F8Uullo_=ruxn`m$5BFp0;K^@Z`9PmLn0?7shM*P;QO9a&1|yyuC_Q zf|n85RGb6ZsL&!xi7G#fY=qt%Z;Kh_!IVm*fx72V6!=>5tmIn91ac^jfhl-FEtb;A zxr53s8HQ#+?~n$(d##)^wXJ%>{Kj-ubBU^eqt)~otg5WmIq4)s_G8bey=mNmb{pAv zy}M%|Ny#9%69HBn*n{zM9HulOXHVzjwI!1!#xA(!pvR%1vIhZ{#ZjMY(~8{JUS%z* zdd-J37_UKX*(5h>7PI4R-z>odfenZydKn}1vTGlf1G|*mq@M-oQEGxPF$`zHam}&p zM>mBE6I-42mPd7m(MNp@$vpRq;Usztrhs1+9|q9KBhp*SbS?#k`8pBVB_#OR zo`#tpXI8{Cj-`vq71}wIE0CKfH;M+tWPP0zHHGL(U|*JbW1H#NGR46XOIh}_Ok&D{ zm(nei-&9^2*;4;2swm8SGJDm)AOqd`By&|~Uo1n&yRG}f7LFULw%|8C?HeJQcVegn zo$I`%vu-P0BcTkmXLs|YOpLK0XLZW*MiJct5{{fxd-JK+Pk%mm`hpb?qBJ}`!bbxf zI-e%SX3Q5%H6}x~$N;Nc&2KUui z6yt~fJ(vJ$=~_neVozDk4Pi0A!`*9&DAcV9Re=??J4Ub8-c(a28=!GN2vA{yz2`>S zu({7wlEO(~NRASnaI3MIKh87vr903EKnywQ!E-Aq%ngK!aer1bjjE%-z!AGn3{% z$W$2OjvOJ`Pq3x|bAkx?-clqEN+e!@aVX#wg^FzG} z@o1Dr;yA^`7vSYf#7i-!-A|=Q28X%l-PZ3X<;G?vbJ5N+Ws5o?KR;w{`fBo5AD7!^eS zf$;TGf3k5wjD?UR2S}y8ASvB``V%uVwTEmY7734@IB3+zc9?NSC`T6l4fMgrf^(XPq<4^blv2EXY4PK6+CEk?oZ}VEAW( zH#KB6Pme_OIXG^*0d4b*-egv%>}qgBd=;SE-vnHEv?I3mn`Ko6Z*_@UBlMaSvl$7& zCe`min3)LrvJV{`AZu}gx=yqL@7z{1%evVo`=kq?tB}IjQ!=+gajeoj4B<|QT6*;T zZJiv$ZwcP!P3e>{GBG zu?N2v;+rI-}6||pJyOjCLCtVp| zRllp(&+(KL=1+?(V&sY}ar7210J=t1u;vhCg}!&tyFY&s^%Pvl2SBGSX8NP8LaphP zUQm{7|2vUH#v+Bc>WA2<3;(}^xcq0pw{;M=addKUHgqz#wGq)bbh34D|F4+;srsW0 z>qFadnS~>QV7K(7DX;!(jae9k36Q@T9$E^72FFDdUE5@NO?|PxzHyRqqWfc%dMY1| z<;m$s`|9%Kz0H^4;t|d1J^uw3FQPsZMAm*ajqAoc=cMbUYsULzI_7(`9as;;W?U_j z6=S1La9GhzV_4=gJ{MAwOH>V1REXP*(WO9;+XWI&+wCT<4oyCq7Nd=RFz8*%Ng_1t z+8a9=8gGApKi3KZ0%8mMukmCrpgqA!0AhCBE%gWi!YK#c@t!*b-KY~EwH%#c!m z9rlr1T3>?*o0BI^0F_*4P@lG;2y^fz=+-PIlJ-@4le%?GJV{Rcb z-m7Z0f`r(7hJNzAz%o?|sz~runI3q-WDG;KbOvb?D{{pp3$0pli>Nh}1>t(Akyr#s zS=q4CsaieiwLE|h=?QV@s)10gIY_MOM;?#PHRiA-OLLcg#^zFa|6r~sv%z_@HlU4> z%$&?E;#Rj4Qbo2n0JeS39$PtEURgP%KMf*j^&SCr&TyRSUev}ipEYi(fqe^->w5Jl`8D)uNQ$m#t|e>gjxzL3`5yEy+C`?x%V4+hW@@_eoR*TBJM zvpD~W*Tg)N4=1e2sbiI`>%vD-Cw=(N9E#JvlR>XjcxAbPM)Y#r%=WoPETp+o{4f7g z!gZTqE0*#Ii+vKxh58k!jZ1kYu}=cc3x!*fZUs9K)w0;{_s_HrHo9#d-;WbZG#?Ik zZ984XTbAktnah$&L_p+C_-l*>?sgmWWMiNb;Hin$0`z0kZ3X6qzt6}6{R~&I!Mp4e zjDmhhROOgBeR&T2Z3Q+3>~h@C`Rs;+RI$g6WAhzjqqS7tTW@qbPHhI45D_9a za7reeaB}9fvj_ROE7y{xb8ZPoQZapKW@5&j#+oy#z+W$J|?RkYUuu znJc50^OR?I$ug9ZEbS;Vr=J4E=I%h&1fp8*Lb>vJSkdYz;5?@iCSdR8Bpa7#j01S%=i93EKtcE2U9h`{m&fKNh60p(o2xiMfirTn=^Vv1MK}wtHY75TAo4`hal<7CDtD4-D8r)K(xNKKXCi zCwYEc6W3F==Ip%5RL5!^>ExuWr_}b(cyAk{IEbGi_FPKzD`y`(WCk2ga6nyO`)TTt zxyP2Mm>32jGE^6u13_I@sV@XGhF!Gn?kk}z!&O^;v91$td-XJJt z(^2!2(1wn*2>U@{%BvsV+fPteW_HXJf%-|Zn(?K2cF8dQSXVgSgY;^C_l-mU%9-(R5KUfEQQ z`j93Dl#mQj@1Jgo?-ygsq3Wx_YwSYxoFaG;stkCpqZe${y*X;5;kBVO!U!9F01pvbsL4md6fmJze|JEqEV1*B3CEs5IK;$fGTP+b+8R5%CyC46xRL# z30uP8B9s>{YhWrTFKC2NVz!wnBjs$EFTv}wY9ZV6G;znSv6Twrc&ne(RjmGQh=a#m zY#q2mx965gMjE|BGT$}ZT^*epog1tRV~8eWPapfVMTQKp#QBSp@J=qgE$_8Qm=LJ) zenWIDzqKi7Q@Km$WZzh+t`n>M3TEuy&>#XWYY@>O+M?i@v0(A}Zv)#|;7$Paeg<~! z{B#jn{udoY1!o%@V~79$j{l!WT*d!T{o`4%=_sP!QTzB^MA)QFNrm5;_z1$lK*5|> zD1^6o#z+BW+;JTu?;Gyht1A5qQ95$wi~JyKOPVC2#Ot^U94a9{{yJ zO9a7W8M#qh?&saY@*pRRG|q86z&tw2O+_O5SLLSpYU zRt~dBU1{24_=k2{xPynFBqLzCHBdNB3|x{hqLZ%o-`tQ5NYp** z8j5jhhv<`EUXr@*-#0|r?56LRk+3a%nrCbtTkp}1_WjhfEEbkKvCNSMQUltPX6VDA z!J2A|u_N)p#@x%b{v^R4K}U?}s@MPnX5>W!SIzRaIN%F#rgLyA65j&Q2}6$hOZTkN z*x%l6DLSJFQ1+o1@1nt{bP}_YECRerETV(sCIA(*~9#?a#UPcii?@aVr~*TU7+)+0OlPuduP z@ft|PY+lMji=^`r6#U%TIxun*iDvdn#(#ttc8LJeOd8%qK03&Ha3uT0c!7lZ3w&9X zK7Zl;Ykww2(!L-a82~_v9sq#+zuB_?SEZ(C{7?Cd+Aa0AZwn5dMEQ=-UG0#-viy@N*ZNs>x}aP+IbrM5>^|p@od0Z-hO1c-47qM=o|)Jm(jo%`g_7L#>JBM>P{7bR-h*;;N422hKHN{bZ_Z$49ci^l*7q6*_-;HVbdjn*>!8msEJEj89(8C zdu8d~7L@+5jWONjN6mhJrz|>KmOfjQ{@#trxO$~IPx+{-FSz)@eg!{D z6ki_H6xNr%7D0u^c*LeJUI{50#{AcieYaDL7`qQam7c=@D+3ytK$j@IGFZ)%RaxjJ0B1YX=L#?82Pbd`wU>CdU3s&xkQOjp7O6}iAkdmbd%qovJl_DKlp z`6M4WWiXgkbG#m>O2x7FAR9U zH7eztn7?2zowq@I=7_O(8@;8VO-2k5E<33u@e{kjAv2fB{6Z_79J03$+_%;T*pEpIv0?iSW} zBUg%q`8r0Aeh@QJL1PO!4q65y+>;~HGBx3gt=72RWiS-9@(_K{n#;Pu&53g>qC?lJ zd=y{?iBDVB)E#8T4wZV3}{u=2+QDG~UKWO>!79jjQ8={mvS5D_7gm{ogC8w{W> zW9OGxzv9ds@(vlp;G?`Z@Z1onmuu-dS`-9be(jP;;3ewdTo$$#XvW+tZdA_%^0%)_ zL}bRdZs|C^VE{q8HVPz0Tu|I^!CcBEWtxk%HqKMK7O%cW^x?!Dhw{Q4z+%bN~Qi76oaYz1Th9Kfnj7ud$@q?~0Mu6;}@r7j#<(-7#` zwup(vRGn*FFp$v1u_&h`gHU8x9#b{=@CjNTKg1(QNkeaEY-GQl%rq1=40?h4H7XYMY)ogze#Hg)e$6eM? z61_Y>5z=s}4GANn8Ex{`*#z^M6;m(Y- z^wmAN`k+UjPW_|m<(*tU(Cr~^eKfy@4SoIro;CXh=A~OxnnsEqefmMpS9}NO%qc^L z|L$SfG)?p2cAs4Awf?AsPc92!u*b>QCrb!5_a^$0I4%3YUC?nc8uFlRCL$C zd9!=sz+!5;lfp824T{dx+-Q3s(4*4_uvn zWUcnRzjDDmR-3*})8C>9Gi1QdjI(?MYR;WX*zrXPzQ!o{gcwf%kuUp_m>d2suJy@C zRrJ<~oe1W`+}w(qC7FGIO)$5@A2WPG%GFsvgYWT;pBNTWUkSy14*^AqD98>n`1CW^ z{~gpg;5+mBfjADoyf#Ue;?13ra#UNEd8E#sp_;cLy?AEXBsDk8q1}ZzuM}LX3^%dCt#I!eAYp z4G9?4uR;TFORced1}QLc?LT3Zrab3WgcLLHjPl=XEB@1U1b$VcMiuz$7&;xtJSID|UuBAY+wSR3}!!IX}q+nZQFx z20ptjD5o+;`y{hv7q_aQTEIeL0V6gvW|)!v?_wWxEqrr0;04qYUO9Y>N@ZEl=vd16 zgo(pA2VnC*eMFDw${b$a-dn@N%6qw+LY$pw69i1}`H!AdvEV`{*5IQ^AcIu#Ds;Ba ze$v6Kdg#^op4yJTZFuTCp*)978ayfx#?v5Bue2ox{5*b>!9CLNNICXZyk+NqUH+ls zcYTh}A5U@stho#FfsExNCBI?ER4bB<-b`n2tW7S5a?-}4>CdLQZ zp10^3prJ}8szl)ua-lGf``1a1r8qAwu5L8x@wRjMv9D|) zr7|p#E@ihui0!z7Ap7QFprLo74U@VmU1@QQcG&fMgcU5hAyK9X+?ur5R$doVKy_}Z zR98@lwH@_^sxZIQbSz0WNsLp;JwkcgB1y9n@vTCmL%GR1{!hidOvRwGY*Oo*e$Gw# z`^#+yTTvGb-{xif71*sOebFa;RIkiV$A}|U%nNKS0(`RIM z4f8*}$%yypj~xZRNj zEH5$9kj^Lt1jYCRup%JF?~x?%NWdbGb^OI;5~`O$j`bLx#GVB&O>z|+x4sKIozDYb ziBryypds(5=Y!e>4r1pok-rQL>6xTZnSViDqy|kSLq3!uUi8|Tpx~9AkDM^(h^WcI z;sKGKH^&?Ngj-UFdBrE<{UttqFzDr9Tu?RV7x&qdt2mz|dh4;q`0#{YS3s>0@1g|> zRTEdpAeSiGQCgIpTu?I|RLpg*aYbCY9Zd z3+f%!Jw)4ii6Q8)lwFG&6tgO&@z@iyvaDf%w#t6(T}r#2-$;i{bB$HW2{#^4yCMxB zE0^p^o)MBznfB>Q*d+@$1x4hfd_qw2Qe}21tvV%_25NnasOfPxc2-~%s^Xc&T_S>$ z;}1?EnUu{WrZChhpN7grP%uh?g$MHEYmy5oCsV7^OmMlT$(Jo5(}~jSQKlfhL_*Lo zAvY1(6yOk0@W|63p(lMXbRipeeJxdfKp}vdOpC5ae>zdeJ&=@~xRf64PuFQv2X)rL ze!nba{Mq+5)9Mc`?tS}?-2S71)}N_ycCuPU*FW>a{Gyf1j6vy9+UHJ0ULkl#`P2xz zfd35ksenF)?+P+ARc&e^um~ytgpFGb`@E!2+X)zVRQdfwEijq$j@a&lW+>S^+^IGH&hk{J`u=HxP#?O;bEfq&%8%zuia5#v)3+*%!XoE4A1H)|@aDskz z6a1t4mqtvP-bKF~4E?*9`s;BaG%J~LtvZ3NB1_*!^mj(0q$6=wGRFnZ
>#DP(W zBqo<=0UvgW;~h_MUG(i2!c$BF#>6j_$GBW_tsDu=ja{#msVu&QeH)?~w}6WAo-cr<&Na-#^c;Ld zrM}|*#e0ZJbLMuK^yW*Tq4zL7p>3GNR$Q5f=@e&O$>#WE$SR+VlPS3BzWiaWYH5t?nA%<^4vmRH zPPLu*!K_w=WtQ6k-eD(ZWlW5W+(kvW)6n^eh=?Y*7~`Qt-kthJvq*_vO&iRVH6jlw zh42Wc<^*8>DvB#Ia-661%l8LdDs8SkHU#GK9E@e+$g<)ejA36kqT2RaLFB$Ys}F?m z2zW<4s0^AP)n8nRwR}Ho#g}oX4F-rE^d&|(0KkbCtFlJ&79j4qSc*nz$HG>mYZkTl z`=G8xCq%{cDX9OT@E*%uSe)$$@3limPnt%~2ou45aAaAikCXxuO2+-MQFu1kYm4%r z9%(_lBrWC}n%5PmOg-zE)9N`oNdym^%)^HG{SH9x^&dKwDM5)+m^c90-F^5+d56+& z68*yLsH&9cRL|SOTzLH(3AW3t`;%_GLb*xYD~#pE{h-b?1T&YxvjBMGOSOyPU4ia! zNZc)_+y%hfY6SF-7$aIbbD1?{R0Pyi#`l_ngC{mc_FRf0q3L22#pD`=-cajfZ()t< zq$l=FmT~0BkAFLsXacD~;G@N7hyoSMGslT8K;jDO<4UgFvA2gsm{ED2i9cTLBCbyr zJ#yxV*g9ZzO(C7)WQ*n4ao`+@Tb+c(4k1q;m2HNUP^fEz&*_RDuw#AA38N8!ASBrn zB6#^b3#o&_0BOY|ub=S{0~8Cia{2AhBFOfS~yB8y>khMUKma_wPf3B=A%E!@Tz|N|AJmnbXUg`-WfUoyv?27);=F zl)01HXB(1L&2)H?S&weCCa@l9*CkX7sUA5dx=CXYV1``Cp+@yfJ29ioqCZ9nTVmUw zAJlngn=!n6|65BQv<@ZP^Jl)w(NB+)?tj(a6tuN*GIslCoAYPVt|QWqLZynTXOkX1 zx`8GL)`;3DDI`38-(nd9soV}Ys6s+~{b+=GEQzoN0+Is(!EbPTGX(*^d9C%v+q|pa zq@Y@4((fQ9?@XMj!Lo0_X)-yku1)P~u<0_x1wV+SOZOS~X-C>^-_MtuZ-83N6-ov$ z3Jik6p)q*L;TR&u&g4Uqy2vrD=xawX_ z13q;>MFTz>L*8vv3Dd#*Xtn9^h?{Zr5zn9aJX~|<13+b`LT&o-nhVrZ*6WTjaodcC z2U!H=^RXNgfp~m&c3oG9iMO4$T3y`OO2EHP)R)qTm+n~*Ha8kkCpJ85h+s{fHa~wh z+H7+%n-q$*o;pXH=OBj{Rv|)KBz{V9GCjO4c#gn=sCe*$X(K8c5nX>E2L20YE?>|U zko+lc&#zZjk1SQ;Z4rO7j4CnSj3I`Hvy~HirSviq>KYAG$Cd|cNdX~Ea_4$NH78P) zjr+rI3`?wgGttoA#CeW7o(-?Rc56o*NZwSxCDLYF=Z&zJmXI_iPfKxI7c$BV$_|3D5Tz*Yi11Wn;ULE6 z@fhn-Rw#_;y3B-cAs$z3m>?JHPQ@RpHq^ISxa!}ZyV);yQd1rtn=wwz1mV&2Gg{Va z;eHT;v|}dhMh!D30k#VYRNul1Vl!W;2}qV=w-omgS&S1FcpRfFCtxltHOkdqBbTqa ztTF}!WAaQUH@qcujO1%5D8W}$D&XKw169DHuvGQZ*Nj5kaAUmpXsD}INLmh8V!Q-O zVTxmxtaCrB^NWyBbLWnPaDim{Et*{YMt#0V^r|Ko4vZOQWC%D|v^c2r<5pc8_YyPZ z3J^{mOLm>0b~STxXC*LQ~6fSbJ!&{DakT!|bqQz5)EShwSDXoiCG3xix zEQVNFJupxw(YJ-b;v*Hl*CR{_x6pK&19T=SIW^qR_kVIz=$n}>z>ib`u~r*{NU3lRH&6HwGu4xC#zNIJ5W0sApzkNjR{0Cp0Ne#I#sMyq)xfxf`D>hV4tGY zx3{m%VDy-zR^54Qi-42KQM3c;Nx7YTteW{|a<+M|K`W`z`g=X$db5T5{XD1&Cle#< z%gX!NGVww>1HN}SlI-=q_}W$WQY`E1{5^27P$I+2ZePX!M;aXllDB`vKSCDyG?d~M zxdR!yH`HI(pa#!Z?pD;RSTD!zHNl_nfU<4M&u9npy)+q(|MPQ(ugmu+62#zr*q*Z? z*7xPe7^1J)HU{a^UGwaa#bUGLbGmE8^hTF`ij@XdHPcZn()r2=2J+ zni)F$I>Q31?OjSA$7fu*4tdtEq)pPQ zNX8;;Vx{cl02g-0pXxI04;Qs`FH*L@>nW-i(rw5VQYrXKOI795qML30J!sQbaR>=C zj2a}|m8t>lH)<|w1cj~MYE_q#OdL}Ca@))->1A2=4x|GJ|aajhS=i~zFx%*vY zfR34Psc~FGQoXedGM+t}kN=(r0{_OZ!dnRh5gMZS0T!L$*a2-O?N2=~K~ zHB89;Pz#IL(nyqriJ{I4lDm^@3pLa@+bTmcD;--myl{v}{knpdd0fS?T6_(rNt7ZM z*iskPU634W@)@aNl{wDKr+(+?fm9pEuOzgVNU6dkbA;5RJ{tBq?f750CEK{(Uiww^ zMesimrzv+X_%X|*)z8b%h%3QXm?VtvDo_6VIzN2Wrx#THL}0qYs{8z~ zd+f1!RKd9uq;})-TFV`L%p%)ix>CSB`b1Z6lr|A|qf8drRk#|O+INdOfX4mHE1EBd zgJsZ4Erf@}M0iLy++=7uzG46E9#mR(Y~thF>g0vnweJfvqum4Tef>J$eHpSdOm9co zt*E>CLO5$fb{|yjX(MgcG|VEl@p@YF7Bj@3#l;`^(jP7JmumkL524S81f|#mFW7~4 z2Tw3$9qn#`7g+cz_zjsrb2gmK44K)xAA2%=bh*kIYx1-DXCm61Lw+6+;pV_E-Wl`u zl!P;o?hR3ifXrCLGHf@Alztu$R z8Ch2*vDGT6Q3RuB)#{h&WxP#ETrbXI1kJ{S;}uxE&lYLRFrjMa-K{k6ju;0d+8j#k zKDbl@ZvZUQ$qt z=?7B>E8Z~XLO}y>lq7IC5t}UXn}0zgX?9#xqNz%m3Ub3q9BqE9b}bS0I|NOKW1Ic} z^o+tp>U0O7* z*1UXgYBWwOb(OulyDD!tSrr6MLhAe-Z}HI)Fbv-L>7ZyZW1VnfnfB-uYt=rURE0TDNo1d-e~`W z^%P5}hGstFspPf#hFz4Z`^F=#`?fiBnB%PS-^IT#FRL7yQQ40wyOi#(ELc4Isz80J z(Al%O%)yXYR+_wF%~mB{>QGk?KK=sr6bf?1EZ#)vSnr1XW!8htW@#ai8X&uA^Xn4I z#9Gc*cBNon(z7!$VL~vCUizCz!x}lWT^r$tysTOWg>4alUsSmcSj4>vtL&eGQXt)n z)d;e$5|Gs!*DM4tw%UF3rU2-7ts?!4xrFmbQ~3B#YF>cilqSEuk5QSKs!`&hA&L=b zx{PzZN|~FFoy}SkYUX~aVaf@uCe&q{ska1;DsItIk&6Mg2GP6Gt|KETUQX~HKgHSm zsUW9B%Tn)@Xi=DOx$>hWc0WhqMS*v+&BnV73ARG#COYfG0YUnv=IXLqoH1&S7U)Cx~ ztj!B|f&N%8<8>`-W4$KZ`eNtJR<*4S7+a2vACtb!v<1N0UHFxzA5Daujs&ksn~FFt zcz%+Gv(By=7m5(>s}rwdHA!&q!;1Cwex5o0t+0p5gmPIEp{-7`+OIEZo~yR%Vxz3k z2w6`OD|p2TjZMAq6+s8E+LZIZN2+`J&ADGG{mpOln~i2yzV%>d>`QSZWO6$Q+z2j7 z?06P6na$%Y^_y9+blHzsM5qZZOC|DJ?9T}UXs2?f%03~5czF5n_2A0;cdD#TQQ_vhz;cxC5Khv$4FLjS&&{F z+8G~1guoc!Zax0wjd?0Xtq2Rz&yojhPTU^0se@qS)cC&LZc69uY0W<%1x=2c}v|XS_4%TJsDn46|=AxokX@6=4 z3671`c$#PogEJOGhPh*aQOSrSC6R{zpsG#>MdbT~7sT$eP^}F`iRWN|*W=^$vHtb+ z_pdB~r&}pukO8E)RakA72!t^LC4`dlpuALWaxZMa_zoO5FE%d=D0D>?(m_@pShw*- zVkuMMy2=W}NACf2jEN{#LA5ozcGs0>@)A@i;Ao&EHyn0|Cv;Hq+4ED& zb0{+GIoJYWI*P4Y^bs3IvxMa7#0d19_X`VJMlH4v@*~%#r@oWbcx98;LTwDp4B{s} z#*^oAtiCCMmJGP+D%&J(PGZufgRY5@z9Ven35}lI_AOj~I0wrfXdik@7XX_q5>`}4 zJx@etWpWWDoCywH^0=gXwpFUjX}baXpdbTS zd4*zf$21RBQ46g+R3k~bF;lI9r`R=YCO*NkYy!-ml*=T8$*(@y?w1kY6zw(2nU5)i zlCHNj4X=26-zlJsxNM%|F20FwP9{V{9KKAmN$L#iD#l{)1En{t8&?&gO>QOdTNi@| zN-(-HVQ<4v0iEZA_jL{*L?h3qWepmYqZYgD`nR%Wsx-HOaV1!q475*NXE(GnOUs*e zOyA0d`nWf~JvD=qMIuq{EbbAe;(X(^;mamd*a}V;+x9qB7BOjECBPHBDq$KJD{h?D zG0`I@@Qfa+1%txh)HT3xiJnG;+dWp}PjU(=tOw^Q$IeT3J!dbbgem9=9A^7hx2F-8 zN9p~sG1HH|{~xyghnCHEJrWCf+dJN;bC(`1z(@HOxh6RxHQbA`$kf?$rx8DH354-gB+06eRV;Wb zqSR3}k4o_9xmIyvmppbeK4dQml$#gA`1P&uIp($7^UQlm+fA5*Y{@G1Aq?@;Pbsy? zp24*{V+T1}xX)QNtQ#+~3vsh=`JmYkZWc|j%X37(*q@o;Km;*BdbOeRNHmEsf~Bch z0iXY-`iZKmK%ezvhV7sC2h<2)XlqSpZ$;72t4 ztgAJjGe*G!N)~H zp4hfXXbquMkfpv+{6BUPz6vT94iH#Gz(l}Ez~J=t^o;aOwSUy0D}Tp_`N90#ua4DT ze@gy%meCL1_3{f`^#AcLg-_W9Ib2Z)%J%^r+yR&w|L8q+zSL*e8;c!*0(T_ml4K9pCP6pxW@MU%!xz zsQ1%CArNMa3u_1YljtcG9nw@Q#YXLPl46fO1p3iWSP(9t=d#9e2Rcof)6dC7uU?xA zG;(IRE4EZJf^D-)!LZ>p@G1!f4{vb7O zsaXeW(ejza)JjgqE?TXWJEc4STqm5vUWNLt?uiCZWx7~oVwD@V!YIG+Y*-^d0FRe6 zC7ZJ=4>Yt{kkhn^EbO;^8<_{kU#)+k4!qKoT%S}dUgfMZ8w#{wRqwfSD}*1r2~eiV ztai>VXu5Ds&Hr|3IrUPvb>?31uy!msYgxw{c%hl8lJg0(q(ncdF%amJw4$Gc&8^VG ztU>1PlL9XgqZ+jvbwC$P*Du_m7o2p`pmiTTzULXhUY4a2?pdtS z*wiT|OV4-3-N-&<1=yDwU5g!IFDZV_RieQ6^Gy9UfGo^3_>s_|r;E@g@(3ji{Q_~o zPs?wK3D^JbEabnH2OZeYHdsw?8!V|aJKDr=`;1Gr)WDaPcZ~qQ?7s0hI zJn3+g3T1Ijpzn7(Jcc3N-&24GZ(+{h0dj^Ih94V*j}8e$g8FNKpB@p;zwk97-z)`J zTl&;MtY)YkecAGkHvXMtb*P6c_Dn0<@{kJg-7Q?J_pRq&V^9eN!nx8<{E7Y9m2Cf` z^ZlFeDH%ID{ht|kNpb&({_w#&K>|hj_>ew2oe-opiwXQ)sj0C_+`q-RX^n$OK6{(d zKUF;l=LYe1V;E(i27d(&PIPXqx#y%^dHHmC1F-j1`ysPBA;S>M&DWI~N{+A!zH7Bn zb{dJ{CTc>jC#}Rmb11ge^E$21+lDtwr}>|$_uD||3ZIB8KzUN?v9r+3?7^|(1&<%! zo9|BG??!`H;npD4ym7~}^`mI#kKtEx0C$YXcB$H!dQ925=sgb=>^9qVbRxWuU#Uz$ z^){6y$)!_ex()080xj5s@s`x7Fx&0oIKUPjrgoxcP&$5z94`qRMdffokN*Dj3jUZW zZMo`h><@~vWWo;K*X^kY@-}NU)1b2E;g_JxPt8LjGcGI}2ft+LW+g8^FhZO_Za4s% zM^Ok?J|sPcDi@12*^X=F!X|iQ1Qr|lGv8_k6xw~S7V#H#|NY7KUl)oQ7LDEHhm+s> zBLPM8KQ5HK)PDpI1!G5NtAE~#{AeL7DvF}}u72;&VLKLfY$9i6E@vflPZRxpO#@Zatx1xd3)^Ig}PmWo; zU$40Q5W{G;yjV_mG>JV2I$3-GTCSviI!2?enl#+5_34~ZH2e+R?qnDF zCrrKOx{Sk*Y0c)kXw%zo6>$aI6HtN)c=zJeZQ*@d@Vk<1L8>SN2&rr! zE&LrV(mnW4e0+BWChtpSQ?aUMN_VfF?9k9Ms%(~qyv>vR+7>I!!XH$dx!+g{NrJvb zaOil>s{*q3huspOA;K~*?EDwauf9tw_<~?v*!FhJ8BDm>TVcji5k)GP(mj;6?!zuP zvx@2QQPABjal__V!05>Ao{@v7KDF}w*5eiju-I6}O1~h@q)xE|iqZ}EVw29j>JXM;42 ze>3sSFw8!gGWHo++$`U{Kc?YA)-J7Np^z(DRy=@2@ZOu7&yO17s1@_~AzmTPAq}$5 zLtrn8RImj~+dRw=%b51UlpT2)DZ~6VJFY+rXSP9g=!`(DXQuO;P|7?-0uF<#D0DW* zk_tNl?`2*!r(@~GNn~|B#hf6^ePP7;DOV|^S6EH|grjx%$!TcG)do#Cn)}H-19H=f z(_YO~mZdG=zdG#9yp-$r56$-ehi3cV9qRtGtoav*RdO)?XO&l_dZDUxg!z4y=7(X@ z{3o{*Jlr)CaAZ=Vm%b1yOP?HHYQhQ_Yn62}(v!7#i{{Gb#);E)rq1!+(ll#OxOrT* zS;bdy=N;;O-NCr$WXqHG4}PUVmHUn<-;Lup&rAo~&iDNi8^H7K1O4*88c0e>|0<|p zslK|15e7^@G!ZzFKSSgMBY_o_|IZQKADL88Of;5Xg`Lc(PH=SWI&_aho&%$giJfHP z3_m-m;pFi04POV`kO$h`O};e6$ekmQslErXzhZyS3jD<1O?n_)d;lX&%tU0WZ$Vvg zpm|Wtgwcl(CC8ysX_GstX-bQ>I&h!Iy$%+}X9K$<=&>u6CQtlnQrFI;bWtY%1~V6@dDUd|FxhFT zS5H!NrpyoDA|6poK}WK_(J^$*%~<{myxQ(`N%@_VVdMwAeIs$$Op#xcyEU#rp;?H zVEDB3!r;Z=ZCX`DuLwnr3KZM$@Jxs3A`kJ|%B4sF(<0*pw3=D5ka=+mH0kM43Olo+ zX>)Q=Jkb78QnBLqGJA8}bX3~2ceMk;8Bzpc*CehEVdI{b$v7@ULirzk*W)cS6&P9d zvblNuGz8l?6J@pu1~Qh{$|_`P3i%kr_27g$E`K-epQV9jZ%)E3k?R&!5b@x?b^viX z8f;{#%y9LZ<%#DQyI-?6w6fBXs}&_&p#Ji3iz=KHt19L;u@9Nlsk9nG%c@1{E9>Bbid=j0U{ z!+g5sJ?7VE2psUqGY01Wsy2dm7Z%O8Cy$e}KLf1*@zX2WUb%z+$~~xg#gZ&JxOokU z_TBFcUS-6T8R@yT#Swq3n?WT{h#s+18_E4;513P@aV78(GRw-sa`sAxOF}o9(QTG% z``XGuc)*8e-c4a53w~9*!%|5LGR`tv_W*u_mtD@Urpl?gm8KMqs6tv5*i4=0$)VOZ zA5rgaj#k7xW^fz3gm5(L8DCes8sYI$yL#VW{HKc-m&|lR(EiM^f_! zUx3S~pvbH^_THNGg3dN%G)hzW7<0j6gi>3T;oO8)oDsmKe;9vEA*u~7dI+fk*D$jA z(EHe#(dy|><3?3z(o+>_wJfDrlGkSX1*6bOs9~#77j$%#l*~*jZM84D!s-KTKM*muGg|-;G@mvurnNoY;O#JD-Wh+8#K+j2SoQb#n?uh$~|(a z07rRQ3!-Nd8c7V7UCDj<0qy$|a#Kv)EAo;^wywLy3pdVjSUqYNv@f#@grC_2Ng_(t z68S*=az0SSsaKQ3>LEy+tD3T%+7ZX%tlwvL2D>Wen%Fd6>_c`GGHGc|PANxTPp%pyQP9CENNZ&vTLVKXY-k^!x-T=YahHkto z5#I`1tPNq4xO=%{74rS|pMXMUCo1Wx;KQ!gnTU@^nyg@+5x&1+|c~p$#xnAP0n?AP`6|asO*Dd&anoV;rm&PuGeT{*_ z&jM*W<1Fz*e?(q^_#1ox-OgSv(D2-UKPAsVRxZDlP zy04W|l46C4N`yrALN}8KSLik(u@?iIoxnX~wNbXr?`$QO)TYOe3 z@s!+y&wM0S%YlQ&n)E>V`&b;hpFnY|)Y5~gc5y;I{i62fN@U2Z)B*Q1l8WU2b#j)MlGAr`GIp@}=S`X#l$-KW(wC~k4bO`` zI6SyrB7V(pG5@_h1VsEmRV*tkF#?QvaD;? zd{=eZwr$(CZQDkdx@_CFZQC|a*{NZi!hRIg{~FYr*mr$Naz+{R~C&UI}zQRfv6v=vC&WD;xFeXuH>i{|nu#I(5T&*Mt0ZHS|T% z`Y{v!<+}g1bP0~d=W_6M=LPGBPy}XO2}(R^HMsn`!)3qB<>#wvD=TYT#+S>y?62VJ zt7+>R-^WOd03~APDEb^E^6+_aG4S{8?E}lc$V&I`w5fDgd>B8@zTRiWfUo@!J}!bc zXJ=|~G3t`ZYq#rPC;Kt&D|qze?X&LDO#DZsC)0Qa+O~nQpdO0?5arCj`8C)O_cda; zTKM-XX*p;4Ap(_=m}fb?JrnxqkaJIm-NXp@$<+RnM2{lT{3wV#zOHtsmBA@mWZIf} zd`c=Coz61VDQ_3p0f^@}k0aeqtbEPXxeGHu+w3PQy0!wE)Wsk|(eB;tyGYhF+~M67 zY%0qLaEr{ZI}*0Cc~rea-pR`uF|I+fs9#xHy49Eqs9ld{D1D0^XPm^Xt%YeP(H^qG z=9CN%AeGlte^$~9(oWJ0L269>&*Rt^5K3-WW)F4VtL{~^{mkU^Y9K^bl3%=~t*y^K z6LS&G)c>GjsvBozf-TcV?~j%9rG$R+)P?&b=dYon{d`JcH*r;oQOZ!Lt*}+7a|7*u zil-Qg?8M(xy<)AD7!hZz$o$ z=W8)j%BQ1DsECxkjBrxu)OMX8l0+UROUEADvZI(S@ zZ|?cJrz2gJjjU~J7k80;J4+zzh!L-oP5m43OG@!4$`eNmB-2t0cn;^TM_fr3|CXEG zEOE)6f7v1_t}CNohPWaUoYzgWl}hbNItY{LC4nv&wIk*l2?iefZ)`W7b#DORN)fu( z)uMq;*rbeZa0ua>66n8pgw?K=3Ro+WCR;gW0*-|oc?6p2&><&IPAGK2q&0TItW+zR z(eL_=s+>xLSvu+Acz=7nNTQtz$rK`~nu;^NOe#-y?$rJ3@PLujBq64E*slL^Ca`oi zm&@b%P&h@JTfTek?zD$PW2xNEFaN<`nO9ylb$lX>l1Vic8)4x{jMAWD;fO4~WYPuD zk2VgYYc@fn8)3flN6OOKRIfHCLcEmh!BvwW*VsKLta#Y^=20CHj?<@>VG2R_LGA`TnZomox3SG& zUH>oK*w!(_>I0EcCA`gTW~#OxH_lE6m*3c^82!7H`l$REgJ?y(aZSY|7&eU}G$!ae zw3qf?)RLAkjovyh=6Jj#DJoTGxmmW{O+|W2N@nZx&aa4j3~j~QQPrHd<1}_ZPf1Hm zTDo$AAtf|=R1Yg)!o=c&d@&!0x0N-_clTOB1&TAvrxOX2!Ob*ypW@{ zt81$?2LES7{~Y=ZbR^Jr@Z8nkPV6p0F+;5NgkK;lA(xe}s{MmUP)sR32VT0F zRoPmpb#JbX`q4@ks3o>C#1*KOTB9Cjks?e8^3lRZ>4nw@ z)N?DI7t|jY#AZxd)xKd&{2kxSE^iAKtzmFv2Xz1WUDGCu7YMSaodUPsM5K7*h;R9u&Oz>4hxlnktz zb2@sn7m!c<57?Aq0JN$f1Z`rd)=G2>ml3bu?#}nGXgyb)qlBT7MSE&|xW{?et#{?x zFfT-Q?5SS$DLPh;l;X;-&rO7;s&aNajzw(l$n(1>j0;A>sNTON>(v=fc+1F=16+%2 zaUAdHe{+w|!kQ4VOaQqx^|zdJTn4jUCs;Duknd46VL!XUFkFu2H3!Hp(8*W?TB~Aj znLHI;(4LyFX~i8sx90i1{qSuu*mErEEm)bBt7_zprW}U`k7sTL4P0dY6+dTlUU`Wl zi0kii&I^Hw5q0OCVhoYZin3{#_B`8A)u*fY?ml;(XZZ!UL?H5xsv60)aW$Z}70pm= zzQ?yjEJV&e6f1bQEBu!}y+`(wc*I(x7O+zlNg?U95B7l3GlhJJJM3h3ex))XT-qX? zFAUYZ1Z-~RFAcTbKFV+i5yBVh!o@ylx+ZU+k>3fKyb=`8;~1ThW+|(a$-}548zt*z zT;fEGsm(w%?s(0dmIF9^ag82h43D2RNXpOl-wFBFO>`(&52mSxqyV^L>Vsp*F43R1 z7L!LE@P*aOXAC;|&V%h&h3L3}di+VOF*A+k_PuDJ~$w>59jxjc& z9cBmzYat6JPh|m`w)OU!T(%heE9Ywp7aOgraz+t?D$P>~F5(Z}9lZ6NelpGIjQxpJW#w~WBP1G=o2_pVMUD&NoG^B_a9UD=sLkHfj3DR2RxW$MH&TzCvzpTX| zi#L9-$4}80OtU@Qsi97a5%4rxx2br;H0r|o-|DeS?TFB(XlUa^Ns^#chh{V>n+}at zgHG-Etz&#D6OkH(v>KGPj_#-k*ky)(lq2d8_UxQufXb!O>N!kkB&B%*LR45JCABz; zb6=YRaFpVK;PkKs)i#d3IQ6?9>J|>;ls3mu9!R7!H{U2&D|aQEJmF#2x6rWog&ligB$Cnu+&|P4^<^* z@=)dCxtWKYj6`2yYCD;JXN<&jb0QOZnBW?UF=pFV>ZtY1Lkaa~OT}j&5d||C!DdhhNQA61@Bl#DJ|*}=nY3%xesD`X4VY#%p#JOz^$aNpS8BZaD$Fufr;Xg zRr78|*l?uPpv-Rb#VZ2h_yx?;;HRy8<8E_1md8Q3K zqJO+|S|4zRNRR_QwZR5M%MxL>Xu$>&f`6q4K@3(1rU39D_oW+vE=-x(#^kohqhBI; zLTe`oZIaj>db`49@6qt$^bH%k0%`AoT9~Nt7=J!OgWQG6{4m3C6xCzNlbgigi5OMk zm6nVSrYg56ONa>h?_Uk)npC04Pcly+D{%0`?h1q!<6+BfinlrgC?lJqQ`4P6l2|S9 z9bv)f^(MEXQ|}Oz#J@zgS20~W~jmpEv>aB`8)^ zKOJQ_Va>U5LK@r8?&*K6yyK#L!RBlu%VfzH{E#=~>KPVkXTI(phjB~Z$vT`M@Qb@x zNVDthXRW}dh;jcpd}o)(u>*@T+9ghP&MS5E{pfxJwlKx=WHKYJt5p%CpA%tDY{vU& z4EJb?wuV_*4w`|&g$(C}NjE8&P+nFRxHaEZhwo-N!?@*W?g=B$y~E5CKIUv{L6eyQ zkg3>^8;)a@URG0Wb|-(Zm-lv|228P=9-Hv!K)VKhw;MJYN4&*JVHo)n(lY3JO;1CV zRTWD$g)+a}W^n)uK}+`asz8Hc(Zrvg^_$6OuUwr?_3UqB0VmcMVST)$y>XsY11CMLkSZFmmpJ^qiM%s`} zuh8cX>nd{9LcdGw-DvKJZ}%`Qd;N|rWLyk2u_2^iX*6%nv^ZTSYl&hy$ipf6S(MPu zk$1>J$sjlMZ|b@}`Lacd#owF#FEy~=6$^zN&XC5Kh@T~T0|s(2Ul2bR7Qvsteg*+0 zxCKKvmgg!Iwr0Z3tiRT92Z&Z*+Lqb5#w=6wM_xD?P2V-ZU;}B-+}uAxrR?fb00K17 zyVAOAGxn){An`9F?B(>WnnyI*a^JK{G(2_M%r8Clh?3hr!Li)TZKNQ*3 zxiEdgB`V<|Cq|IQc6i*EG5gp^OJTZ7QVxbBjWZXv_+@@aUoTn=o2TbboFHwvyn6~X zTsHdn@W||h=cab2o814@JJ(!*!R zg%AV~X14O67wK9x`_oOFvTxzKHi1<&A`}O*4`^lE)(H^q=PYl|SHU_BW zE*l4c-qy*G82Pn(e~c`amB(%s0B8r_r9UK8CoM!)(gQ;~A?yTE5AVp7ntsz`eP+^F zj^|nkpA0uxOYhucy6%IBjyh%MJu4yZQyhm`naUgD98xwCl7SNJuM)?1;D$K?{156|*# zWoZxNJ2W{;_ksI0cMJL8T>;4L@+-+#6h_WvfB0hu>$P?}n|KG>WAdqQ`I3sP-{}Cx zc6Se3`Nl51doOhN2Di(77x){ih5{KwM*)!*8Y5ZkEXyFTsi3Qi2nl*lQjF0tbSwA{JP$k+&6=IsXoPeN%-C5eEs6P-{_YeGYaGMR}CHOtgK zEO3#EO2XU8lY&SSx^m)mQe*C|xY=X9`#8v}sNH-kECuu+ z7*dQ^%1VnLH(%q9G+&Cz!c0RbR<#3Wnzbt*CcS`{Gzgwl;Ua30Cn zOv9|LU;_hLx%qsl!_C z<8;W6VmA>z35@!HkjmJ<@$2R~H+2?hF8ZT|^@IUxD!_U8o9)!blmDJPUPL6KKqHsK zL8N*#j07QS28tdeYxF6?mXzjb~s_H zCMb6Nl1|aKQXhVp4D>*Z!UoKLtGF^1CE`e|s?OpLirEU-N6W^>?-iG%gG$EkIZGQc zBF(~0z`({#T)dNFxJG1SAc22;BB=i^N0ZfyZFNC08$&Lhd?;n5$7x)+vaSb>fotPl zd*3U_%ow{bV$=w?bx)1T1DD^hR=}!qOym>#@#>OJ zRf%B&DFs4i>)|xzcyxt@x1pxqa6KpEJ!7@jN~_uEPe*a5`_4+&-9)FzL1M|zmLs+(S*_OKn7PY%bdBLR5l%T(BSQaSsil@Jpz!P z8(l{|+t_&d94z)bbB~7;BX3uKOFG#SzoMVu*=X%wJ~lG7;aU)$a;$T-F7a2E6jqy# z;J$Li-C6jWt^a%*h0 zbe!fJvz4_+oo~!c9baK*+-R+IU7nR-x3KYU%smcSam`}YM&?}F(8mu5{Zba8EA9O* zxY5cxPKkNs;!7fXh?48j&)d=(iE8E)$^64n7UDT&QY(nZ&W9OrE9*xnV-`gDXP#$? zvg-~lwN}-mDBmuOeq)Ty5tMRhp$CeBP4}z46{I@{7Q482i|;gU-nFt|i+_uX5KEqK z#%WF|cr!DT2Ft2o#KxlI)5V>5tF;ri1r0L&IUXVOsFpIIX6YypFqS?8Bd?M9HKP{x z4k20zm=+l=zxl&__2-S2MorJ>j=C9sCfl2caAFht&L+Dh<_U#KTBdZMyD90p$>aEC4;Zu=J{WHIGniKS27e&tJCkX0^-vlTnxu%appPGxuE=s5w#2@u$xR)_RYoN7r9NY`HusKrhFv9aB8Z7- zvI1E~1SBe=JJd)S@^KN;kk0}*L}r=D&{-O%Lqu=#r;|n6DwPYt!zs|Yh>3yEL^p7! zJ6ETQkvV$JXx$!?cNE&=| znN`|gtZ9g_xeCiX}oK2atN2#>6C zk_csGMDi#Q{R>1uBB~%5TsZGGNnAiB>slRkZ>!jK-HViqvR&eua6hpb1Po}quKhvJ zC4Y9s5+CWoG&P(Y48bxntJSF>vWD`J2Ka*V{h4Q4Jn+8mN8(sHnThLT+8LhQfHv5MTg;(OQcYj~XN;mkm%B3$~FJ9>Y@T?RiYL}n@mZ^G=diZUp+_=hTlGb5j=uN$tU3cuMbV;EqrgwlVG zU&&@r$XbcVZ|3YL&7hQDQ9v}Q9)eSz1P^L5w5B}+HN zqIr<1Z)hEVI1DN!vEgN{W=oyTZS$tB*2of)g=Aq$u+(`hQglRt1?Rsiw4}+BAU5QK z4W6{5*b*T&~+Ftqs&w+TrzIFr@>Ru8wi~6 z@{m{$q@8H>5Lpkct_T=i;`7kC3e|Guz*?&J5Skv5dt%`!&WS8thOU!_1$aJ*b>-Cz zMOyLdDY*kopE$cJdIDCL*zYa5F>PO%G~{AW94%Y6{q@6i7k= zR#pqZmBUQojq#?+4zPer6MecAq!~dq{UGbtq|CtWcn2AKr(d0a1b3bc`lX9(kOq+?wZ`x-X9*|tR5j@r^!VuYBu zptlg^n3<8=3Ul8ShJ6S!xQznWXM-Abf*EfA-2)_FRCDvp$eQ zTCxW`KfH;WNb1O#eE#guEHC86wqUWqAE5l#fvClo7{RTugc_qPyeXw{KdLt-heucp;nybg(PS zp9LiLj5fimL3Q(ZN7-T1?5>EYnJ)%Td4I7MfM?9%Ph-SvV+77RBJ~uBuc9g0~yWS5!Kfu6<-`mb>^$NXcSB1Zg=C3=eL$W7t{W%KOg@I=1@Qyo&)$+ zm;U}1F8<%8-T%l*|A)f#f5}Rt6J+I)1u;gyzS+ty)u2@LT8fGsO~G~HcOiF1B!uNp z!6o6NXIzxRZswD2R(mtS(Cj=I#slcz!odQvUw^zbdV=rLZ9xMpGR9?c%#Xi5a#E*a z_4Rvz+9EZ<*=o$ct&XCxh1<>u!nN5-Y`0n*L;IC@5MW-vL4(7(xs@fI1;phUkuYcP zN|K+y4ZB|cIG4-y!w;sS@aV)#sc;Jli?Ht88ta@o_RbJne*7&iRyWNw?AZ_Y@4W8B zrS(y_X(F1p>jYZesnABY)g?8vZ6r+zOpzBY@?fo*vxC}h9Em87tZ@lFrWJc?Q)(TC)YCr>G|bUDY_aWU=CWKcDCgk;t< z*<(PF+w|B`)B@X|4HKv5+P<6Vzssz?zL?z})J4uQrGV!X4vAl6 zk;k$gScGBz2^0E_d0u9e%^d|BM6gZkIBOa!;X3V-`6h!j{V4SYQOkJ`8uGeF8kS2~K7z{%QMxI40l8h-}yfq{+c>)!K9 zTI%A|kN1vmjfs2njbZQ&*~>y8b96Nj0tgK>YpA}!{(F-jW4sxi?|TO75$3<1nU%A5 zvNg1kbG0=xb^0I96#uI6n^Ux9a8$p8rIdzylA+J3QZ2tF%oS)-Ye}nk7zzcny$l7V zHhUY_4cyEDH-mWv$xf8+OFeq!Dz5ed5-r2x+PyW+>L--I7 z7-)~*{oVS}@;uFmgxz13e!wJ@Nj&)S6Os<>@iZ$Fi06__k0`tSHSbLfP5SWs2=ODaao z(iTLR46vN$rfeEmGL~dmYh=wqD2wDO2#4{+o)nZ8nS~t{(PBO@FIrh(u( z0wH@FFsKwuh?p|(+p7;|ODPmzNl5e^PLh(!>_di3(9m~UguEREA5hb0>2W?kuA}F2 zI=@{luP0K^W^3_!+IZfrca(G_pTyGlJ|qND<`@d^ZnxY#iuz#N?vgt`67~FTq93e@ z-Z~|*5#Ke-l?1a#n-DONfy{u(sWWo3a0O`)Rp&A?gX149SI; zODrk;C!?5|P}JX288fB1DB&07Cgwz=+%}^!q%*x?f)`8_lg*Rsi50ZV5MTJ|t zUT`Xp4$B2s!|#D~EA@QRc1fpF(pFMP5=cwQIudwEJWn7|5>FaQ5=j`EyfhMfE+rya zD7w5LYZR@{pasN*$z#BgS)%DozPA}9DluyEL)oubH~qMZHq7BAUkG@<0Carh8hMDB zQj1Y@jDeG|J!qWaR1W`IhQL~76T6m*(Wl$uIl2OW8ZO4Ja4{A{QhL2nSQAu*p49qG z8uV%qm4Z{87Dl(Y&qyjY!Q2VlCLD_lUqgud=u}|N!yp_dAvjJ#YPqpOPl8Z(p!SV` zE>`$Mdx*K#AhYzmto#afhE0q0!;q(Z+eNBxgxK|Z=D23DE)(UKFa-6m#Ij@Uw+?8_n zl9U~4^nRAcNC7AA8Is;MCmUWKG}@guo8f`A4k_0JFsba0v9;R)NR! z`zh$Z2s@Ab{yh_a0kKX)elOfj-#5vBF>Ua#9Q?ng(sbwMa}n2+W&F9?SJ#s``21ltoF@+_y=Rv(q%2lCdNjVrnOc>DCAa^5{t$_2$b0b7Dx%E z%zZYhrI!V&iL@|5XqgcQ0%18QjwJ(SxL~*;(*`7yvBome)-7qq^$GL|lyWIU|7(6z zrgXNmQwwsuN!F|J{rVr2)v9yMad7EY2Zg;o@LmzBEaN9YD!{K{s6&f*F-f2x&u&9a@4M}JyJ}5<=ck3zwLcq zqWzUna+Dsj7_pQdy8YNta?~8e2UXzq-wr*kCLcm0^rTBgO+__g;7uk{v7>N*T%_Zk zCCbhtMwLRan8B7Tw484~8ra@q^HX{yZllUVHrTyoA~BFYx<{8BS#ea23k{`LDD$^G z81p4H^c+@ERh23ARG%*j8J8ugY6}^nlxafB)^+CmzyX zsT^(kJgYaP^_0Mku_Eg52ud%XirsCg+w#zpm$bN!9vU4WF90;JeSMNT&%^@ z{g0~H+I++Bms6#x3p_1%QgN1Pjnnm4EX5thS-jRZOt_5d0G}ECa@ZS^h0c_*sF1AX z!)s?PwLn8IZ?LRR-nkhJ(jpb{?49yrO+j-ePws#99W^=CBeHDq_?~+AIg65sSE_@o zz+1`D7T5A8RCeYU^+y%U@#oJY+MRYe#SDvvYdD*DWbnb_v z==7;8cr-d0v)T{B_xEsH_~;1uS*WAwwnJfjxG|5>Q2lU%ong}$#T|M7KZ^&BK1G&) zcV36t&6v^kb9>zlea*~#-H6_=UtiZRBArvw?0Q#wJj}V?Ht3C-fDY%P=b z1Z-=*u2BO}tnqV3#7H?5q%P)XV~6FPMwC8CyfMQvMDYaXBuR40Y0|m-j+N*ljL$S1fS&-ZwN=C4l1Sa+JGc5 z0^ie}@ND*Mj`(uG+Uq|D9@QJIUv<2s{padJ?tDRs$t@aMf|Puu#H;Bn(b{n&#sxq1 zh(6;0x8zKj3%279?XHSxv(6EG-GkW*Tr7i-70d}>3YO{({Z25YfJ|o`6%8=ZzG=2P z)C;?b97mj>S5lX)eEGc$8emJ>AC9TNz2SGw>3|PWI~SsX51lE<)XHq3RNpsxe`{yh zn2#mOU13AO^T4IUJj84JHdN+Z{(`{;^|5eyn+wCc%opz6Mns6D1c77I;4H^Cx+9F`$lm?Xrh1GcQO{BJHF9H%3$lou>1OcSjrU^ZqB~G5Cs{^f zy({}>p-hxkzk!X)GPF{DqbuI3%qHg9Z#7ztKQghi5wMAF+|af}$q{+)VvJqwII4PH z%)-enF?U)K?>mtH2j_?F>jvH{L=M~6!M;k@6Zn~ZSWoVO!&lqyN}$k6pb0;tH~76$ zg{%D1uV4MQhKV=ve*bAUi!}~GL+iWHY=`>sgXsUdCfhsxYe7y{yHG|}NBPoiXc%vx z06`#n=@W;AOtVt0D1#`YjhMqK5`A}oRM+^&*H$e5rb6GwmCN=s;EJOK{~Wz^B^}G6 zy7_Zq=J5uhIQOmF82{v23=c^$9gyQSdy(_NeX@0l|MmBU`8O;_bsicmP*Z{I2wm{0 z9jNc6VjVC&#VtS-^D5vvxn5o@G=Qk-rCxtdE`N#Cjh<5BwjtnW81?ChASUlX$l8&I z=tw2hFGqP(SPq+t= zfXcWirV!#E)5Nqf+*UIlyw$9_JMHp*JMqCC7O3s3jmX{dc2M};1tQfV`>Iq8QDJ^kahzjH;XPOHQ-G9#w4o%a_;{q!)hyWFm7bLlD=49g`9C4y;Fk|ied9GE!> z4~ilTqo$-rJEexTJ-pC%Gtn_`$~@3-7?b28wP+{zGRpUTy!-0rP}?w-BXm686hs^& z6mnlKaRw8(4^GJCcRReECl1w5oKQ6Yrb7zMyLF61_u)@xGclUwlvirBvZgv*_S(vm zSX(#_V3ch@ac{lhYm#5TQNFPu8Zc)DBx#R(SW#8TKy;jz|rS6H(uH% zrhe4PO2gcLW|YH*+0k)MWDo7ZFb?Ltj;;qDNuDRU|8VzuB)BV!h5X%?BZFBZ`9~rm zl5EU*eX9b*X?oL^7Z~lAo!ac`tgd)>d4_K|UY2>cIbNeBow!ckv*+S!;kO^o-#J_) z-6cjZDBa}{@9BrJoj9wr)i$(!d0^yO{OZax6yk|6y09pJ-BMYgl{u|brpP;(>Wb3e z%@D|@k3?b;kx`m)S+oQ@5}$u4+CcS7?Hg4H!v|N(Z1Qx2lY&vEjRZfUhH5_C*%#tO z0cw;apCKAyCQg_injm6|UdU26vM5h6g0N`j^$ZEaL`0fNQTdN<5^uObBO{0(bR_K| z2NcNU9a|@0IQjN4c|kpLQfG}s5|}AUZAVG^pgt`$BZw;V#=Rh;^-Ho=;Kdpu?-b{h zkWz%HIcuy2*_rncn*7q`Z;U}tkDP~v4|+VI(I)lbho*6V1>>WpFYTAM#0#UuKxa<~ z)JXi7&^BZp5&G0vj_Rz*a$-r0K{tte3%pVK$LJ}@tEd_@x;~-k#GQ5aMI`qf`H8kC z6oU%r5Xq8Bs&K?nArnbpqK#yiNGByQCX6JPh*JT7;^n-6Xgek9Hy)I(Jj=jV4G16@i6Fq`KuGO{$bBqA6ls*__$z zWi5>k@$xeGRx1DA^!CWR`;DTEl%6)Z=KZtvko~aZJbOQ_jo<5y)Hm!g8)LOq08pdu zu@uK@v22@$BX8L>9ATq&8}sgj;b!%o3~_7|9;Cx&GU-_ip-I1KAQV5|W;-138Wn@h zx><3E#YJ|AMD;T5S&eyj=vB~lLovu)^X-fATr)4-2M^w`FFpS$QT}&R zh}WjnUp#1ok^nwDfQ}ju)jL-6uB|G!?!bwMGHXzc$8>m6ji(Tx2|K$!A9%BN#}fmw zOuYmxgo}FKDb!7|^vC3Majw=-pub`4;*VGgMNy~J3PoBCM3W~&w`9HFQ&lkM$N|ZI!W%vPn046+>YS>zrc!xH@9AhYxDbbblNY%?{c&7_kkD&)Oc(}w3Ie5#Z7kwU)PVD6=z1%tSn`ifV!`p1?}Zf!m) zad@}NG=+@&cH3&KS&?RbkYB2ePX@TjyVF(ErYk8JWH27XP7;|N5Km6Rxy0)4LS zp0eu?MK)PPBh|SsK!!k>YFDdT{y8%Sa#Z2w4{O_eHGN-pdhQ)2pyIqMbZ@=)%hB&9mg9dKZw5f}XxQ zY<%UrvXgptu!62BtXh#gXAh|96mpz4;HmWT@KS3ZKKaf~ch5534ZxlFKDio&z19uo zN@8UjF;)ypt4GB4aKFGB_MO|Wi0;2(rQ66ke;7c%ZjzNvQfGYW(KpbSL8E%^#@x!*(V+DFnn{|Z6~kJ z^f=t_x4QT^H*R~XT_u2bxULxdF-gu31bdEKGT*~K?U(wW-`-2XZ|OhzM>mB&2mIY{ zrSpA{`fBg6^L?oYZ!GL?PYVOV-J@-5@a(B&5aV~e+B}bka^Pcb*cfv7=bhdD^f3RV zzX<3Z#mBK2ScdyRytxkw6z`bH-Qx53%3&sl>sfW(`-mroPS=Y}S3Htom?869I+1qF z21KBwAj)9%up{&yGjK~{#;B$iS|yS5W`-ko(@>4J?-iH)bQF{-L^r8Mz}cYEiDal{>aG7 zv!RTnW=)U$H3Ojvag%jC;Fpkkbej}$B`7j4nzNo>#AHZD6YWY`hK4SAjN^?{O2YgA z^9pp-8cu}jfZ0QMYq-4Sf^fE7liD8EwAptk$PCJESS+j=Zo#k?aD+?|%ITPtjgyFk za0nA&iamrwb3{GOwG3KFjvy(&9BaV7HVR9k13XC8QL|9Zoh|v7ph*@K2ImWyvtO9R zLkWM^=A|^kPCBYy0^SXX@XKg;!lH~NtY>6zLeG+o8Q5nrei!3wb zW-3%zqiBkRZ%q~qvdiC2xaOXGY`B$Jmx>pBz%W&USHm3TO15gIX^weeQ$yP@!?@C} zW8E;rymHXqGO=M<^#DJZP|a_ECUwCX5^!vsHn$ZU-k$iz(B1?eob{%#6br3Kh>_@f zU0&yu`3!l;uLh(vP~u3i9Rmt;(AM#|}jzOsikvs&Vi!8zI97#Cm86vAi8R<(R{ z$Mv>f*|u{l`nJrHCFkaoe}+iphk9(6MOP^N=3vOqG;vC(1kMoiI})6sIMpltt~=^w zX9-A$#B2SoyXs}92}mZjd+S9{&N~)}QTcgf^w0giR}E0on4YiqEaomXu7D;zr&)F) z>79rjCvgS)`f}sxK?90>-obe#$;)(_$d1Q zC%G3V-rRdyRG&`B2@lw#cgQ0!&43VE235!v(N@rKm;t2Si0Rs-!tQLq(xA{I5vd%L z(5_KiuDR_ieT@>@Qn_WB`jLf#biESoC{;6FG*uW`^H254&U&$@J*_9AjO9#?%AJ1K zbNn{FPiXccP6y)+kFBI*A?XdArZY(u8xcOczGx+JiR~d5C9WeeXl9ZejW<1JO35n9 zwz>FHQofmju5_*a++2-{W~SwhJ;n*6UzoZ^Km8KtgPp+?+S{hmQc=)&fvRsQ(;|*D zvd9(*bx8c#R&~eyGbw zIMgQUtN(K%imuoYKXW0_is_je9j=ViLjrzWd5m~Oa%gS_jsyE3yeQkYRqw=e+Y-2BgPH&_8o6hs0T~gs zXC=j`Me)hwBf+v@M6H<>s}C_QdnP3YL2`^xa}eYL!bMx^;42~-RkMoE6mD_VSI8Sg zq8LJ=ELo;tQ8A{7;jaz^Ix?xaRpZACPtbmy_-F))*`-a)`Sgwc7y9Nco~^W+p|!W}5_Oh-Jy z9OXza!S)!uAS~z$s4X%Qc7N8GaY$|>kXv{Q*O|zS9rFtM0m2qU$PXqtlIY#a3JhP+ z$N-g6dy`ASv9|-i;sNnj_0(Bq>SwmjwSP*Jcnx#jcQ|C_qxmi&WXJ%OEM-o2Z{& z6TF4}0QKu55;E!szf}xl7Cs9^p%SI>_Bo!)cAo7neEoZH!Tuw*UQ-Cs+H?xgBIqt- zk>Ri!{JAT#ua*>{RoT+*KJqv>F}b`clHYSU57hHf>@S4QIDc5rR#?= z;Zjvz|8nxTrE@Sz1_ipxw7LxG+ApkJMPm0w z@*%!2(K&WliG0EfZS;I-r=~WbUm9~FpUElMmj7`P*FUy;ouuT1aru+wZWeD9p5w}m z#lY_YmtUoJq%ddUy#amgRon*?N8&2;2{E177@-VjvkA_Vo_;{VQd`;a>s1DqZMMS6 zOxm3HmMq4*%TAXE)_L{B34Nw$D|)1(*3Cz`;?8{#KDr|iRL8LnVpR~*6g+j0BTal+ z5LONm8~Eyr0oMOqlHRLZcv&8_f!5gF8qKrnZhHDo_n0usp2)C@S&wWcPiTmaMxT3H zy|To3@*x;N)lOQ&cc;JSx4fMu(54^f$WA`i0Z%s8{`3Lj*_xA?cbm?ssbj3u^17{zd_zgzy}_U4 zpaO-zDq#F<@x=RNXS?^)@r(QiegE=Yq$lc)6@)<#?x%)AeHmfUA1()I%)4vC;VbD&5#?DGz1goG=k&*5o7@Mm1)EuiaopYsu*05({D%7_Vuc@PXi%A=u zJLW)wtcbkXXq#~nRgR{Vsm!W0bJNLGfvE>-D03C7t-R^|vz}G2%F%6L!=Ns^DjQB} z={Z?3swIK7hFCl|ar916>9~}~M3ant1|dddEfYnfoByS&xlAOz>T^q5qmfN=*kWq^ zgP7&AgG_x5BdYx-$%(z*7&g<6H44-;W(RKNh!#_o5!DH2QzGAJJOdvLKYYsM79-E5 zOgG7mfbiv!VZQHhO+qP}n zw(Z-tZQHhOTd!wlCSrFs_Qmf0J5lwo;zVXvehSGO*)R%YDvn~ZG{-a>&XovLu=wMKBTA|RT7}~c={V;jV^6C zX9+*=B_2k+hMdhlGkRkZU0)d&A#3(6zSDTU+R^xBeW}p-1gzeuHB)xTz0mBinb|}g zi_3)cFOSF+RA`fygjsjVRO}nnkm*mzqg`7{jmtG#GvTBhf>@mbfkELBl!ZCM+|c?a ze@<#Ju97gbNGm1PdDt#^ z$eQG6Q0;ws#EdiA>U_MY|GF~h2r5U!>hc|yh*BDd%iuGO1c%67X9PDkiWN5f;90wQ zjIyx$2oF|Bc;u@X;WCGRtOEYjVn@JUMWl1kOr8_^i-4-3?X0j^D#8GAt|EPR->k`U zLFC~6_eo5@lTC31jjh-rO}X@rL>rGr_e=Sy_J!ViR3 zP!VnM^MS20N^%NJJcqIYr()K&NMr3v35DfzG4R7|Hj4&d$!z^HDzB~)EFndAij9m| z1kypnw~PXb<7!Im0weT~f>5NfbL1)7JO5K6q^dW`8AdnWfkX;1Wpr$!Qf@!Y$Yazy4ZsjHHnx78_il;ERWKPeq4!| zMLqJNPss(MIsQEV4-(=%A-2HFFOMPUx9Ca!e<*m;#!hCo|MwpIpO62$$x7S)HrXuc z%?zN_;vyuBZVj-wj9+*BeLiJy3O+G%ZlI@L>x0Vqs;nk;PO$5&H(D$LBACxVK1c@3 z)JPgY1pB)ucik-y$5S3XUSE&sz1o$_bkUK{uWBx4L&1_XTF>@FBgz0Xqj?BvH<#lp z3=)OtLRvkBw)DHbe|Fz{fu237w7)*L!$|Xdv-q5TBhQ}Q$W{F`%Y+G z68Z9ZiDF%2mE#X$nVq!-t+Qp}^Hl5ONy)+%xMN!O2TpYb56jm6A3a-H;+Ykv`YC0A z@tNhT;vbpwqyF_V2GW??m5`mbvZMBksf0A24`vk`kKTk=3k_>AEaz`#tBTLTm&8Zn zg>_QRMN8M7zH^Q$weO+x-0@ubro&{K=WN4L1rp%|ABboUh?p zWv&bH(MyO|9MnJjchoENe1MJs$M)2{^oxHN?YVlvC*RE=xxQ&tz?fh{HhyDzTj5HZ zvsXP4nR_8>a%VQq_}P|(`oT@1!YI@5_o4U-_KqnZKB?^z+JJq!4m=}nOx(Po;C+OM zJLyH3JJ~}}Y1|E^y!DzR6r&=IkIY@z1*eG}n9ye&u))gws3uwb5!jiN5!ktx5ZH-v zT>Z`meQZM7xT{WHvuNjl?*rJk*&A1-z5d6_vKSHkBJTHYmHakT&i}vn>%TjywIZf6 zl8=p;np$(*U+8^FO^S6QK0{5*WIPG-##Nw2B{;7xqLtdXOPY>M3EtNs++9~6zl9pM zK)O}*5&O^lp5C2(r$xt`kU!!gkOOQm`Y+dQCpjnVC)a8zt4&g*w=$tc>51Y(KuF7c7s#5vB4@O>KU74s5(E1u-px-I2 z%2G#Osm1f5MB{Sptz|3r4N(CNCxxY>+g}vCm_*UabcA3tj!B!&Z2UEd@76Xv?D4k*+UH3`FY8+IUijJ z(w$jDW~D8bRtKl~4y08j^7A*n!xEeUXf+^0M+?h~)jwDIOKi`xberx!!~bt$bm5Lw z&X4XEI08gx@LvcrU~!htP=*kt;4(8(Aigz|{_3XSA$NOFS8 zdD&}B&`Rppf3I+p_HM7hzE~sf_>vGSQv?G zUqURr#-{MZ3z%<7qwc?wPL03Wjn`aX03!clAzMo?VRsSC#WZ=C=KmUuSqI?~)~8`% z;H(K>;55Ra6b_{bqR{SP85cCBL8&NHkHZ_6351VbDy`F}XEgH28{(ZLFrmIO3)SmK zDRsRk6Ty3!5+`yu(oe=*=4I<6nq!_mKAd?Ib0QUb7@ ztn-_AJD*N#a@SO*{L>hG(nm?@go&;Z9=ZRfPIpQ;o`|~ulRHR`0O|B8Yls?Iz?ht! z`)ISr6Myj&cm@u4f${oR?=_L4E!jQ52Azs()Eq!-&~CkFP&JS5!deq@V4TH5#Xg3* z+PPHFG_HtUv>PzuoUX(bM5xyK|GHdXkqzG#8=w(?@dW2p*ondfYfg6wJK8R&;pBx| z?Ap%#6k==@LnlL_Rb7zSuI~I_{~WHq06eXJu^DH~KYu9yw}tM%aw`7M`s+7Wr6Y8o zYoi49R&{(ZG6Z44H2h*`T{!-r3=A*?mra^PeDtizL3Oys>(ZWNQpp!#0Go<{EjzYVu{L0?HfmWdZ;AN}klL_R!sG$vP~fi^04?}WiaCF7*f zT_*#z&|TiC8%YESkYSy+AhpPy*bk5&3WOeM&<<@uI=Uy$L?|N=AS%Qj<5{Y|!c96u za2^Y0*ZFJ*Y&SLkb_#DBVpo-ci(pFLd^_bh`_DG?E;n?aQafk2g{QC906KP^lkSG} zShE*Ryj7&_#mr#CTC)#fVss02i;K2ExE6_xxRMQXg8MTxwq{h7h~~W5Q={_{L%0&` zOYnSp&LD>4K;dIC^_`lH^xd<}lmAAA8ClM_c^V@?6!EdttelYSFzX4*3rWIO(xRMc zxv~LvcqJLMGqHz)2u*I@QlwVyNvgRiz>|_G0(X~;Vz`y6FGKvrIC`5~Za|gw?5-?{ zLStc*WocMZVxzAk$HG?5d5kULdXAfowZ6t2L+Zw7q`82gH7IcE$p_02V?~s-_>eq@ z3DF8#deCH*ux~YMJhAcvVwsQ)Ks#WCBhhw-?1c}RM zYzC=TotJjZ@$<6_06Gf?B>%6a?KBw#dIf~PnG@OZ*RVle*Do5p)jD~q+DT8I1_aPK zleR*~9*>+(%z6}U)XZ4mRi0Nj6iDpR7_oaV-tLOf)v_s*e4NsDL_ASgsc0pmUOC?P z#ZC-YsC?0?Xf{tc5uolFdV;=ODs~`#-ZqEb@SOr(pBJyPuDGT}f{XY<%WTl*WWrgI ziQXuKYBVBkd04SPdceQlrk&_~g$cT}P9i3t)Y@MT=tz3#=0yx<4CxRbF6I&u-uDMO zBM)&jCi;__;<@})Tv$%8( zQiFinku?RJ#!q)bIGLrvkGyx+1Y(fEez@DPAmpO6plD`v$YW!jv^)=SOk4jDijrxD zO0p*;<=zkM4AHj9x?*!?kkuC)1az65SfLutx|K3}W^i8;5kb%yMq~yd--&7nnIlEN zhza*pEocHg9T?`SLS#VP#)NieVec*~W@onrL&lcl?tXzZXWiZ4B<}zg3d`60@U>4n z_j>zoEzs51<7KquLp1irU2LRal`6!;nP+)=&YoskziH);Q>*NNE34+F0b%2_MFNDnHucw7}aun^@#nN~jSwV!7<_{nQzM{M+Equk}T{r=uZZ1gpC zb>0XJulIg+>i5&R4YVE~OSaqY-OP1oi}=V;tI&v-R=FWQ4R(QueK%PmeX}G1Lx{6i z5bx=0LDqrcXLtuwSW*RRY=Hq?_UX_=of=VnrHl5-w{1=o z3z7DVX?r8?&*J4^<%{#G5kJ8iB<_ELZ zSaWs*%X5^9k_Zf+r;hap#|A}{8%wo8MJDEK-lQc0>?U!4HdtPOw=)rk>;hBn3@g-* zkEVDUw;PDKnEc`|nI37ZG?8?9(G2+I&5n7*r&@`Eky4s*U86eq)!5Pq4LLr7|CO+t z-)ydc%^4~ALR7xV2hHDI5R4^g6$+m#N<5Tsj{h|NEIF_=#}%mQQ>y{AZ?uztvDsnU zVoDQKo^{I?C~ws12k)FPS~<`xj0psUo_!vz5S?8%m}5p^v7sx@OolXvWpS1k`cZr4W~5$=QJO7IsV3S%qPl=v^C?{{C<&0OUp24^w^+cYDgs#65ZKeDNm%r zY@$Y_qOC?DdRfjl8Kdfm?4QW~0UmWA{qax0tN=hIte)T>%%vS>tOe!XsP$X6_L?DQ z6|qBet*Ge;D18Yhu;|pB`b;A%z9)DDj-ayR^#>MOXoxk295eRfTP()1*4-QRXLQr} ziU)I|pt9DS&sQXwkoA)^a{1BzOZen>KS~N!PZ46sB;roLj^J(zWPocsEz$HRi2)_Y zROlLrt#ROtMNvuB5?~_;|3#c3qCUo;L=YnmJw&+znD%&@R*mQ8+i5wxHw(X$1_}9 z=q|}yi}c3%TC8g=@ukuA&tjWCk=%B8}Uy-h+{B z-5wWL&KN;rzt~Nz43w3h!wKzwzjKyDxw)lTUAiXZ5oGd|#Jba}(Ayb%eMH8#Px%P@ z;EFNh$-F*Z=U&w(SKk9-s<{0_2f!`4b|UeIA=l((UB&2#;lthqSMSBucjt+5`;7 zxOi}g%mV`hHw-rgbwCt#d*?I@VBQRE&XTC$pk^=#t82_X0{g{_*D2y03byAg;1&qC zO%&83!ROWr)=xO;gxFs?^dvE15xUA1fIc6+3l$Boi^xoBiV)KJoA-D4xo+eWtj{# zf{N2bTg4waVZ5A7;kqIp^wyl&F_VQ%qyKV+iSEj~(PAswC!7D&qTe0S zFtYeW3`Tfcqrz$(?7r|m$@y$?a&^&gvt@h0sj{gn+`U*6F3(gG+Z}V-sXysRIyXY> z>vAbjmW!RKCM%tSqJ9k{Ec64Xv6Xy=SpTIu0xsAb4wswIq2zHhc%XBh5o(vBxwTVz zeM7v+?SDh=?3yIBa;)+qTh6H>uw}uo+7h<(^&zYZi2G%OGcYt1*3aq&AxkZocCcl! zlKAsKsGhMSTm=J6xI;E+4y~(UCvtIu^b+X_5R?(nvzYS3#K_G+ln#4A^3en#6BIeI zdMJ(#cL7XyMPNFET0puf1CkDI>M*K@x5(^X$d2=Ul=@o9J2mBQ(nBlxtAN@tH4}Rm z^YfS#-Ff?&6y3yd)H2CWmyYjI^6+Njx{I_IW#xt_3g!*_P!K{SQ|SrUO4fpUD;Zb# zw%W6jjAh~@ERu|Yp{4U$^O3{9E{$?%a}Dn2)@ntp)v4qTy|Ih*jS%SMr^(}T`*D_? z`VJJ16xk?d+LV1$&mJ0!={XF zJ8~vC##AJ#FTxCwCYYCGegIC!xADhpQ*CO%2UiR?D>N1q#0-lP^dT?H3OuTH^Z*P~ z!Zn-h8EiFYCiq(0466i&9Ym@u$X%USER(PoDCEgbktQZH#|+Yv5mS!D7!cV+RchCl z0tT*)5WycSDamg5=EN&3Orzx$QT|QIX8Dxm>HpbTcI)y|(L4DfPc5r&C{%~e9q@q$ zy>o~D5}P}fP~|q+c+av@I46pU^0>T1pX; zil&l{Jxk^)E7mML(0dNKW-CN@H541BEM5nb=~OFx>S5nGW605}HM=4X4$4E&lgXBH>%2Td4;Pi|l)k<)r?*&{lGD>9G#f#vD({CWJKr=aYZL%WzF0!f zu!qDZ61s0KH^fBQDo+liDAPG52$ZGKqS-i)7=4eN<8<)Trba7Fe}%v1u4Kd(C_!;9 zBP0$m$*~)9ynV=>U^PE%{fn)^hWJ}Qgr9iM zsP>10OB$mKFV2A7)XWChJ>aGECpdJ=T-Gbl`C2B}4xbCo(9WZqiSjx=N@`oOYsiLK`In##jlYXz}E*1bUy zTvr&Wg?TH%@EP7CIn!IRme7OSjrFOH1CuQ!5egglrU+$XlmD27zVmS#!RV+4;47wq zg0&<8IkSzR@^K!JZN7BAzQK4a<)$a(6@S)Q@~G&%%}szLzI&m3G16+^t4n=thg&5# z*SuiX5W8fYm3Tr?tf`oO7I-$nQhlLD&ZC1^8LInbDp_5^H|0cGYXEI~8JHY_Gy{kk zzs{lLsJ{k32z*;$T7;CQ=YqBZW$Auv1o&Stw}lRdbV@U8ipF8F=pEVHy_=ZSwK~Kh3-7~qvPZSq0udq}@PEY}dt-Q^C8uiDm zTs_#c+c++zER_AoQ+1&L7mhCnz&!WI#h@=vC5xN`_<r>#^j8D#b;WcHl1jx9&gyV^6;NK@gYrjFQuiYpB&bk zsZJ>!JSj0fyi3hd0XU+4pd@NBCdj`6eZZkcV1(i%M2NsuRVs~UMf)^1z*+{HtZ)JZ z*C>@+nj7oO>%zo(uA0^rz`tUPZq`I`G`&~v%bOR`>yC-GlPu5aHq$o1owr{>`5&pd zV^4eBXo&$84C*N~^WowJHjG>mM6wx4MDiU$V4XCkalv36H(-v?2&s(2B7+Pn%93;@ z;cmsQ&JQQ^;vz-xY<$NBZl_|Xzc@}FrHhcfQ*`FVUNZnf+wExQU!(TL{mzMD4yv*!~yqzVX2?; zgHqhj92++ak#*YRXc*26)H??YlXcpY0_H0j)JR?pTwPoGe79C^dkZmWmlVWOR5O)M z@|a12yVUq5q}nG7n@E;C%lt8mC-i| z7*-QxTIQ|iH)-yB1W~S~3OY`0XtxA4jooUfHcjWh1fBrUxyYtggpM}m%{i~=&hX!O ztmX;xUqz)Y9%c=7v}cF-g1?yJIsSgY51KQ*-i5q}R`iv>&6yJEYeQ6*}NH zEfqq&IHf&QR9@Uq*=cP`PKw<73Q>V)Bn^mYJx`HoyCin*XMF-Hcoam@)ZxvmDPdTE zEti8LED4~YET6>Hmwm9&;H(_TzD|3nH<$1fje$O#jvQK~^C8j#aUf=rps_ftb=3Nr7d z!1=4dZ8G*p@13d#K|aX%XDjBl8SEd4ZO5ZKmsp3J5@=an|NPluH20m@2GRJ2mL zx!1PxjIL{7S(_9k%XHoX4WeAsUE8Pf2?6Fg6k|&J@AuFv zof&mdT*qbhstQ#~LdFb&y)MgKJ}6 z_!GVywDk0*ACPt#`5jQjz!dddn`Ho$gd=*^Np@bpt){e!ojei36*aVg&v}C3f;sq7 zjf&Dqu*$<1D(kGKMkQ|>)X9C}fE~$$4J4%uW3;xFn|W<_^2Zsxaltg%-SXP-1X`7u zBNB0sUQwcormQ<3Vta zVO>f^DWZuWiIkWF zk!)8XyV^k42aja409{sSe&QHR)(<^J%X1NS3$wdD_G-_g%}+=7xFxvds9 ze$wI7)I>tz_gI2km(JL10gbRT;>VaW#RhTZWhBE>Zz_Scqlk2uVo}@uV2wL!#a~GW z`{^qL$vpA;t^NU~&0n&l(H_6oR6mQ=%j^sFJHXehAaDKY$Ri?bmwtSv&v>}oJyVWi zPmbY~jSY-VT!Z=}<0TTVi7H@LqS~XQ$3njDEG>I9Rnw{JV@fdTT~hGY>HvAGa8Jrp z%Nc9X9%(alq>p6JK|QUqVWQ)A4zoV#0!o+Qjm9Gmc4KKIjJi|WcFQU3B+Qq5h;KeG z;&4$RM&!4E?VWwZYvB^4s!9^Aj=`MnnJt%cX*q^WJ6p!W+9&F6Pxz;6oiHv~F#pIH zv=ET*Nsyk6^U^*s<%zN`T}l3AzVB>k|EVaJ%@R*{v}MFe(8aNR(>h#bDq{CVp0CCu z?K`Weujj*O#QB;e*JItJPk$k)`Xeq!zllDrs*-BUc#;Qnq6A zXaPK}MFta1Oo9b{vF(t1rwlRF)p}Fc#WyCb&d=nBE3f_Ob~I>i>&NUtZ1+mtMa|3> zChznRgdUIVH_5XbOuC=H48Mnnn)GT)~m11^{NUN-47X zE7F$NCPto(d19kMh@0E-R=M;taaPoZb}V@sO`1a&-)Z8?zX$z3n3N-RaFvpNd4-}yolZOugPO#K>z%-iD~K7yh)_o zP0z518RJ6J)v{mdWvQ7vjJ}t}jWmvRb#%YHyTBZ|kpsn?9?C(mqzeN` zkwK+8qE*f>^3Ibw@)SeFrcRE!)>v&}PZU1|HzpL16Rjjv4aPhJErB+x*{^y(qKq1W z(?INll&G5hl1o)xx*9j0lu(|j?Cy=_qFQ>p1=q$^7!;q-Ygp7Zq-<$DQI8Pbd z#>#BT%NN59ZsD&W-U`;Yoq+VxR>xLkGJ#oue}v@VQL&S58l>)iLV}+dH!!MbQcFT1 z268eb9TZ)Y^qkL5ickg%%zl(^mq5twcV8gYT4crT`Ics52%Ck&GX2o+Q1S4fPzUZ$ z&8`0_9%S@+l1#0u(q*$;!h?v01o}w4spFymDSZO+aa4gqu_>Q3O4{4t&NUj#& zN7Yl75w~2U#n>huhm$`OxaRfz2I|m z5OuyZdCwjpsOXtlef0s#-lRS*+dyJTRt~tJvQ6Y8ykwWn1yS-H!7nyd@Cm?}F+r`Q zerRY8??QomZ~0K7mNm8H5!0R_=Y8Gst&B?vTF<;RJwgu>Qk5OD4HtPlymg2(99KNj zzwQCE6z3i>N~HQ9bO%|Z#^z5r8d)xC6bQCDO0nBcc9QjG_>=|DNTJvRNG77OiDIJr zLgJ?+VAOA32PoeN969-sZulr=+`G+yiw(0o#=b2G80-PO4epUV<;=zB)5#6+QO7gi z1nnxIs?Q$I>Dz!?tD?2_feYAX`O=;!Mo2!cLwvA4TGXCflPy8Fr)o{{{16Rgote!nrQ_o^2gMT5$nB0rY-mTDvK#4V@{7W&H#@44dtVULVCKvBT z#2%WigSM?XqB5i)=5FADxhf+F@l^eMHY4|a!*y=M4GyGupzf8);baEUNCkgP|G^=1 zmG={Q#hB6z8C4FMtIh1t>QUJAp0y$pSLU5jjrt*65unIHU$kO-?(JzG%=ya{{Yz%Oh^dRHn(v%5je?75@Zf>?e6=d7e>hTak|TJIWf8`5`jKS0cMjx!$UyF4Uq z1lqdOrE#s!_=2jniOS<4;u?mfB-@abCL96>n%7cPsaIO1_}w{Zc~&DN{xzp+wN~qa z{XPQrq$i3yrnuuMhbc7846claglv#5>dkBZ`*A_6- zCCY3>jCqZ>L-+XbN(0(=+Dois)Yi!WX^$Uc9K`75Xb_wWff7`x8_He2_E7S6_ zpEsHMwd>6gy8k1~=hDq}uhSW}5m1F8*t8USUt$0rURUUsjjlPT$!4fHxD?S=BfboC zztTmEe!x0CBf9c0X2W+Pesjsl;K%@Ku#63>*XVS-X^-1swZQ2v&&83}bw zt%PclAHdC9T#kc*t+v?k0Hu!59*JIX@(1LV`%0}I5|!&O>)4{@;*4^_nI;ArA3*Ls zJ7&XFLggjZ9UW#Cf2d#3@-aiQfz!tjcbMv>0pjyg?kk1YkX1#( zv5cv&OU-zMeAo*H_2eIK$EQ`2A<*=I8H^Ed=^zq} ziKARJ1J&X7TWb)Y3S8t|7;)JCU#$u8A?a4MOm|~Qm35Nm7}bJabPD-SQ>jeuVXcdfc7Qj3}Ffr>S)&4Nzf)q1Rb=rhXo{C3~gdT6WY z#jr{$>PuU_eGet7uA_7>%ZibeYqmdjwc~AE1xRdb#$D-!MPpm_kYRP^o%2feYsiI< z*TNGUj;lAOZ2R`$LbYq{!jtHw!x!SrDaZ5a*Icz}p5n|M`!g;*v)C?o%R=um#iH6daTJ;+|mu-xY~TI>#{u-gb5;tj^bZH|0+;IQy1 z!@1q4S^vkd@@t?y^|z7LU~Y8gEvq3a58dAId}C-Cv%B#Xt(S4$LVI_iW}P zW9ynhSGFQCQ*ES!j#nHmsxLKL$P+)88)O;kD;?GnAeS3#8Ixc1059=~Yca<#9LB}t z=MYHcNzDRX<~QeiB%u|9_YjCg@`nrk75*WiOjj@n*HMSv@92r#CxCT#z$Rr#_KtD* zsr}paGt2Yqu656_Vja8%r!dmmD${+)bQCW^unz{q&LX&mEYV^&_#mQ`?*~D49&hCrM5?^NVlp8*7ACz%&{>iw~l+F`r~@&X4F< zA9C%357*&|$s#O&|5$a}pFK9OpvdMQJNY;Akv*HF`cu@}_3}4QfHO5&8?C8;?rwiI@&^;VMUjYQ6c->Zji}1`OujG+h@P!gM zlET{*&&&NF&CT_}1)on7y$N$6|J=pV*;hdV(? zGg5bIS-V#ZF%{Xi{X%;G<=raKfXvZJnyCy>NhxMH4>4QTI1jA|jnu5i zs*2Kc758iw+>X2t#FPAR^t&f`B$Y){NN6!SJ}7hWjICtkTAplZ@j#J}&NMCDthOMg zcGOxG46nS4a@UW+e-w&Sr5dQ*8zDLRVn|0*Y8tXGRbM8V$45E>l;%vg{TafQx=at; z^i=K&Xp7-1=$A!naZtxH3g7fPSWE=7F?wrTa@648qwCp@p1n5q+ypXdiiw&CW_A)IYNzCxq730qu_a(>pD< zy@xctkCSDH$l^nPCerhbQR&?p!e4zgAUHrBx0y!&kv?_eE&;H%rpI%d{ z4*+?D8H0)xd>Kn=DF!`3e{bA5%z zZA=z;Zh9e3X`-aVqkw~%w4;aFPP41hbZsxxE}#5JFn@vQ+$W(Td;qP*)O;|Z)$Xd7 zNRc0pPy4qUQ~7HK`B_@Qqn>r$pM&`@V?Nt@csum3dH4;eF1*2CBKtQJ^ui{?%AlF4 z>D`KYhe*a%fR+^W6bYn4BT)9qs11G%I4) zk0~6*w3&X8>={-ocn5QOlX(W1_=&mzm47KT0+6Yos`JFFLX>wT!0b%b{Ut~Q+2>@L z%d=n*3v3#gu!*Ys1~54aU{?EfnPWC|(vJv?aO08aU@uxO`h67!6g14K#SoBZ;bmx( zD|8sWrcMnN-hi|Ye9v}XVR>Rq4(7tpqJ43fM6gB^F`=ng{Wx=|c?fTAo0VU(W zn0rr=hfZ0+LA!Wac6fZBcBACK)$(mCLOz6&LpL7aaB6yF)_nWn ztd;8$lJ(O!f&-dkhbS^SZU>DaMgL&n)9$-4^c{}QkOrSa%kv_pk?qGlaWyPC$^(^0 z_BeDywZ`;Q!p^H_L9m&Q83zoowXf0pHm(m=GeK%{+TAd&;&taD1==*F45^w2t+U_z z{*TYYMN`w-6MYN z&2`Z?Zd}hwhDIU?u(fB>_h5HH#zBK(e>DgG#Mhxspdb(iS?^mWq(54pb*ycBif>rC zkaCVaCtP*eHov4?F?XEkaG#xt%Z3q6ylmx`IL>^@wmogVjLmf3+YhVpcAn9FpnasP zJU5K`z^u&>egGTwgk7e_eKFMQ@;_IM`arMM5Pm=#^@Lxx#C@^U@9;l&jQYT?-4K2t z)${T_hmL-Ot>F@WAR75bT+YOOvDf$TJ*SR-L#*i%eqb8;Mqb{;eR0?OvJL9!=ZZYX zj(&r$@e+QZ8vR6E?!lFG2t^2HsWCknF;d+ z2?~LP!pGn>;$sQ3h1g-`VebL`6?FsKBkCUjD}lq|XN$H2*^>_%fx{7X`@1I|R020m z;DnbYcq(LvmnC{C;D*r`zAIoy=tO7+#tqg5<_(4lM?>&P2!#hl0EG`l7=;%_5QQH_ zD1|3Q;0D(TmI{}{e~T}L{|a9W?-cZ>AFAIt2(KSGNIeLyA4>oYKY%XwmP!B#KLk!x zjZaOeHNp-W-~Se?AEEyNYyylDtbzfw#@x7ufC#>tuo8chPYl13u+z^D5kLADuVE1Y z(Feqjj1ycHa)ZZ@tqqprTNP;yv_sv)>4)jJguf;P3jzh}0ILyn+G`UPL3t5F%|0}Kb|m6Nu@tx7m|X3ovml`r~NIbReIQs0*g4ZJ4A+tEY$ z=-^1=9UV$lH5c;C|MgsH@g#TYAcdo<^d_(RJPO2==B7$G+x=LB$U;*z@VJg$*Fd7B zswjp_u_W)(DAZvVH$8J<;JJ7Sj7`_co|YSfa6Ud*j>}9}ma!ife1vRPsFOpsB$Byq zBHpZ%<7=o~kF9#74K4lC<1#?z!bRaN?#kyVPrcyq$rwZB7x6?UcOVa_UjLcT?rNsdzmNNWllh%A%(I>XWkcC9UXj ziMM?&wWYFL|0S3FLUzAYGo7ZIHbP2KQ>#?uE>mqVpIiw<4=qx?^P!b(?21xemNG0@ zoe3kAzqMRpDxoJFqHS;lcHNPeGWT^wVw+M_LpOKH0$b6g!V3!HO)1=*RJomK8h(e$ zX;8iVa}m$a$$@W4Fz#x~`2cs6`lGP$B@!sKOT(Llx!eSP*Zwx+_{nGYst$T%wMVk! zTzjMQctInRNjrempq^$j<-M>b;89at*~U9 z))bpY{H-u?R*NFcvLZ}NF;YbWtPAm_}9h4lsHhdr%%d~tgwYu9|HWkmEGm-jcR4=1WRtH%*~e|PROhT zA9!1Z@UK5j=xewET1y@CTV30SlQ?iGM39y(5RBmYB-H&Fg>(WyC`y2I#WTQP@E)Gk zjug42T+?Uqera}BE*hHiV~05jK!6@(#Vhy@#Vf&`jpuj8E852}6tuNiGLAH14g(1X zG@+ea^(*)b_5)5$YYmStZ5br%TM=O@HLob%ACMCcM4z4e9@BQc%Whx0&wGF3dyH_B zDRgz8y+|#+lJ#(Mm;SN(u6LJi$#(-wpqel@uQvQ8KC!2L$`pR98l@}xo$)*lW z`WqUgq70!Er#-wC#B&rcRh3S8$WJvYK=q}~J?+y~t60C5d*%)IK1j&f4=D{)Z~rQ& zv6k{+HEGb5gNsh0&lO}bd2`8KOYl#bz5zXL*LpavF*5QET#|EypP~?x8Tpb#BI!J3 z)#hn`!w)Y00$VLcZIUd1aO*Vq6r~Zrf$X`}LR$U%TqrL3`plnvo)#r!O!CfTG47UW zu*due>Ll!G%fGU~)^KfEUMO%j7s$+7?9`d6dNRjs!(4ZdreJbkDRgJ95zSmA;m#N- zaCU2?nMcuJNnPR6uoqlelqpxX^3yn~7O+Gj0Exl~cs$L%#FxRAx5`(pP z%-*ns0Tij=NK$&l&tA(+qSKYN+vYj5?{v>hbVuBtnTV>0`twyqJDrIbK*l;x##b~1S8n6GlX8KLm^spRk`lw=Bo&c-Z z%xu5r9kMOv3Vg1763Uk`zNUa%;m!=kx*l#tr_z>DCB?c`S9FfLUTbh@n<%ESIbR=F zUn1M$8WX3A``i`tJ!=d!VrwAgPSstz-X(Em##_62{|koz@blcSx~ars1iUxYVuQLe zw40gS%}9%{`qkkRqnhO)imL=y$I1iSihW^V^F`=Mc-m@>H<3AOLqpp1YD6CUlkjD* zuW9yVvF+H(?dYRsNi)EuPHk-z!)O}jsLaF@=v_he`)}}l9!N2{**3nSQuk*2#iQqA{i>xTq<8B)!UYwAH9qe(a5AB2Kyz8DA}h=ar2 zvG)yplkXt-MAt^*knxVMgGb*W2M)85TOPw8GxG0}l!QB4=(ayqJ5p9^M^dI8Oq75gFBCeSS2~_&PPhu1d~&2* zlcrpssft zP1_;6KEf1?ut9jar`DyNLVUiF?SuXy+84j zPD=UCO37g;{!wzYSyDV54>Zbk!$z{L_~1)v!A61~ zp9n8G4k^S$LW-Y=WGl`~L%Lf9)=v2T^ILhz*(@aZDT%jn3J-pJK}{%l`h2qPkuM6;2=LzN zVE|}=xK9%pSr=RvZ4XBnYmc`NBnb2apN@zZR2OLrj~5*ysQ$^Av<2Iu?Mna$>{0g# zgRLO223&$+gToN<1l&>f8G}b%lE@Kqh25d{ErQJuaz)(X_Q8JAFM5Km@H?b|Nr>MB zU6FTK1D6nX1YHq#Xak!Nw**~LcX$Jz5cmY%;dh7wqY!xn-jR2h1E&yr1l|#Mr~|7I zy9C}*cen$u5PSq*;djUbvz|n3m-}g+Zz(~cQxPdjRz1YA!yZL8ZnQ)s@;hDn1vA+!YJ5+xFa;df3PL8#n3u`6E(b#^i~tZ9NV7 zr73HIfv)N4n$e`DhUaa6a<{8BxX{UC=^PlF4?5EAYkm(S(>+gEYEBz#SJgXmvu}mPBBgohN{KFBg9xXNY`yg#HL`7Ax~65zBs^AX-$@`v6uIH&(16r zt}>F~Jg8L8WQlkK-KdD9$27|)J1-z(`cS1Y3c}1OrOd@qBqB60Rt%q#G{9db68CkI z@_U8!g?o7~3(_Se04)-jO_nd@j#pc-B2cfig?f{8-4O2oEj&7acUzpV?wmt52!Si( z#m>O%U`EZ^wXI7@k)$F_3EMfkG={9GPFXXe3>p~8Ko=~PtRboZ6{}|Y6qQ((?C`td zL1NL!(1OT82|YU(iyAVusz^RaHMz-jT#>rC1ogN86?}&LHs>xmHDy{}bs(T&py8B} zOrmfPQnhx2+S9mQ_?J=n)bxEF3vL6Nv1&D{;zFd;9F0J8Aq5Ujs-S{GI^qysk~S2i zK^#$t)7KKN4M)<>1exr#it&=#dbv>1AMQ+MM>W<+@?VWH9gd;jDX?PA^N2R;*m(12 zjG8Du`3>FkWi=c{{S%^|*zlCO_2p_vQJHe8+>s2VASu~8eWRP5@BXv<*7PkWeYZIf z;XUQ{oG56HdJLb5kF>U6<9P?bPmKWXvRXw_AIYt+-Ff*E6R0%Y5Q;!&Hy0jyvO7 zVf_K>S1Vfc(}Gi*kLYf>t>!q7Ge{jhGUuMq&OWLgJC2;MrOrN}oUJLfzq4!olsMf2 zYIh}1>B_Lzl52bU+4M^;>C3RUl5O+(|0~dDIOC+DRdQ{o>1SV?%L|C?4SlyNI_C57 zT~5<$f2{iRWl7MBwG^49-1t<=S~ma2fbtN0E=Vo-CQF-OW!nwkVD13P{$&x-8w#CT-RUC+wA-m zCo#j6BLRI{fnr`VuUxv`g~jfZS%_K|Cp6;3`g!y;AA9HPPldg-0M+J~?Kj82y7hpr zEK;e_j8kFo%dt3hc_M*Rm0avXqZ>yc)Umid_7}oRqo|;<76f*BOkIKv>DE9C;)Xi% zzUqo}TZ|34wPAE!#x=p#j4KjTOO!ph72(#nEAow@*U_%Q@5c6dX`{T{5nrAdU{5UY zXO^3VMRwz2hc)q{W$~hE@uHk94>PB-b6;UMzRFJg#qH~kP9ZlptQ*`=ud@9elQuVO zm9}WASZtLi43#G=l_yML|6QM1y%|7=!jrf zR*^G(0YUO42rl*T*n=gRj~x{Tv9bKny3jwC`(P{sv};iCbFtH3ANF7;F`bCNxbeQ= z|CQ(qOorL4*(7ibl-evC9tBP;Yy_00`S zHpX*HD>kdeg}*y&Fu+~KM!oPqP5B(BxsQ3*Gg5y&9xMQ$hgj$>9rRddhEI>{wdG|{0g79F*hLd!029z96>%ir_?qPCM-1tuW)sA01;CoJnq1lPh=`G(nLhalc z@n1de62E*Ge>ywvY&gDS(I0=nD7T(>Jn%jAYJBmIdI_c9b5SMkDsX%YcSi5u5jeU@ zp5M+uzM-qfccGzqlh=CgcT(`aq_vL3mxHCAdF$xIsIRCOBf_rVNFEhmR9` zvEx*I6EkjvYL-qS1!lCWXpH%EjdcuL#;g{RDX^$E$v#XbPU(QJ59*j2QIk1{W|i7F zG2jB$T$9%Hnt=H6U+1+@!I~hF%m_V^$wwp1YiLd~L1 z+&J50@r|TyBjKad=HiM_$?Fpr3E!mkGUBZG{-W!At3 z6$(%?mE^K9Ik;KV=1KJ&m@!a(zv~S_E+y*4 z84&c4Va2A*x%Cr^nwCyJWU{WZPr@Y-iHPK_ajC6}OtaQiGK5PdL!kQ;v7*Z?>tc=V zL4fPq_-(Nyc--6%7=>tE3eXy()RrMpVp>x9$!K%ALR}(aW+o}<&3v}Zdn)_GDR@t+ zLw7CTazb~N)Xw|-5sPg~keuYUuELk7r^z-2_gD(&Ie7EV8LPGpEC&N2yMzkTc<+hE#3OSpw^q=QCgU<2@A2PxGZPd|>FANf=>r)EhAQc%pqMKlDk(p{X3`>*l^YE3ES2JwxJo141$&W9GWnB+%HxveW^FC{0h z?wpil%@}ecvzr!=bGkAU1}nwmH>Tb?6iD@TD|`-Ose!OG)G9m=C&NiK9H7Qk&6Ied zjL6qooiag!9ThPzX2pXN0xOd^Xw#b4>L`yfS7j@Lg8QgokvV>Djwa;t6MVk8zKfS! z4q@+V;oU^DrZ@bjcC+^%7fBU4GZE(R0hi9pN2ze}ho}N7N>I0>Ch20{C8gL@KIz-5 zH+OwJGURM&Owcahh<8@%G5riXVu$QpSS+oRB&KLq@6Eafl~?c4zf?wd@7!?z#y7g% z%i-P{uq~QZ7dd}HkGgzq5`D(S5|Ysk8R|eJlpHd7tEXyF)k1^2nh#V!r`cb=v3R-@ zXeE)c=(r2F#4f7~^=Z}A&DE=79k+Pqk#%*X6FB2u*5#JQmeL}uIwug5Aw?$^dDY@yZGNsacZ+?(!QOPgUzfcgd}jp3-FP_d zk%>yLuHEE_xxuMlkt+W-z8moZ_xkzH48FzFx z8|_BNidZlfNp9IgtD?e|j#7)~juKdzLki3EIqOD%f#}rfMs@W@;K+iSu zL#_O2i9vg@Z1xV5`m{Lu&S>-`3{4f~Sk1637~ zH6RnAaL`)D<-qCHejvgq4IR(+7X8F+LNvBQ?%7xu+gMU+F9i#o92*-q#|421Yht4b zBgNdVErU?ak?l03g5g1`*5e|Rq!@rKp5=q}Ftt|6IP8d_$3L@KRkBzY6<>yo=B6r9SryN&pT16k z9eMLXuixCAG2+6*;}Q*nC&vU_epEfIzhz|PYEhiIJNlAT(ceiD^theJyI!eezsB> z>g~GWI+)!6&F^cu;ZO%6rZ;^(fx~p%x4P$foW82+qhYY(cH@XQ3$xe5zM)fFm=e1U z%5itxF5ng*_;(k+2Cp9xgk&z(wNSz8?NXMz(d77yW)nB;3+B&IhR%-iQQO0|qk&%)kl7nS+VA_>mM;^n5wM$7xSdS9*f-K)%53KbTiLg>U6`=&3Fj-)F@S`J7PX-T`Uc zOXY?yt=x0q94XRPnB@FL(*1{pn<8hl29^~&95EZuygLqotOb5`)Z?%fhR!QRsfoX0 zIo-N+JisnRS)1lN-*dW;?Mi)6;A%&oA_!%_N)H-1Q@PCyC9O?lM7?%LS8*IFfzC4P zAHevt$;aBXiC$22jdLg6@B*(38M|1m(XpUB$i*MApID4#sIpx0WHSp#aBslTtj_7k zLgM$w8lR{sHB3$8K=Lx?2(Zj}vZp-Qf{tsN@F$3*OWxynCzDN-vFW9b=TAtXCF<}_ zaCU;zoerXKzlyZsSSI#y@Qk&ZLgx*)A3v~KdFaAV#%0ntQGxXtt_Qtm z(;!aumc;l*as-b5LA1D-*(p%NU4RhNG}IOTV(XJqdN3a_RxPop7DJV8N|COI&fvFs zGGiOXl`gpqzqZ%0DnfT%*o9M-=HqFS0<5P79ir2o&5++23pshtW_o6KhQ+7$ic1D! z+dKS{Y`QIA0q<2gjvfHB*g~9=6fHBkV8YBgbtqAx-@y0i~IvmfJhPSvWsQUwZoWsgx?C7Gp#G z+?lEBQm<-jq_ruF?%YUqBOW!fQXGQEnw;ezwE($3#u@7g+lpp?$hwuwQly?0Q< z{2CW=pCegmi%3!ewG|+@#-J8w($k;%K7$f}K1FJj;kL=-hvY_@kw&VtM2qb-F3$B* zxxG2&>2zbKOHIM&ruSb%@R1wagSDGBxS6sF6)$*Q(9GB)ybrtZkTrpA=h)dFELqQF7L1PFh*0BzWxn z2KNfiS!y^3r62qzig7GLYrC#Bv8N|uRj4z#;A+MOe%~b$CQaRDg_T~U-{e-ZS+;bh z$u{>2$@OTm=GZivIvLICI8H|n8~Jf8l3;E&V@tsRqg#KmH_I%?sJZ6gXLg@v#+b%r ze@WoUGntH1>vAhqwNFcyZpWsTht%oXtW2zAPJ6}tftz(4g`m5~X2t7=a)eR3ZWm>U zScWKNJnSb3B?@;Ex5qeP7%)g4#0bUUoQ3C4E4fnEu`H+0;AGY|Fx#bKD?blu98GbW z^5pUP0s7x&>gEEomE*8PBvF$f6<5)p6(g@FWx zL(X8J=1GO6(F(P~@kGLP2|oge(fw z*bJMNe&Yw>eslCPJi`dz2bSJ@Fi*|DWuN}L{N8qK4?rgj007w!NRa;jDee3x>HeSF zUJcS+`6v6dGi9VvA!hsAR!)WDb8C{yaB$}{-u=4mb;I#j z<2D0bj%OJ>UlN6K?IN^~mF=Q_I|g*EbkBfop?-QeN9?F>Fhs0gsn&I3nXY|A7RD(P>iEB4$@b!m84#ORXF9|4??cV=0Y0`ktb#Dl!J0OSh zwG>13C2iY7L#gL*aQbkFF8j3*qIREY{7v2d*n#6q8@5Z~J{ZGkorJzK)n|9#3DXs_ zJGl>^xEF`%j_sE?$OWY;RapeJ<8p|xqjc93$Opal)ejdC7^+`hq4S;u|wcn}ARuzOP;JJL%LQpqjr< zN3W|^DzE1E9jNn-yH9{U$4g~)W+uosVqS0J z>ybs&Z{mEB4xx^|uA#+qGe@g@#gwXVvWT7*>f*4$6dg^9YBg3(#nNSoTIvp9Fwu$Z zk9F-YB4AFcx8>*UDp0^ZJ&pSzI}xI+;iMc|qQH8=DQ{ z9Nq~!DZo2H+I*KYLdk4(N3;jfQZ;EgX^ZwIgG}LHW6mp*R(kmd+3FC|k~$~en&SwZ z`&+dT6bp&G)AR)1U%yZN)UoI!n%0`-&2h+k@%EBWm{)r2gZEMA)m${Lu#E^+nrKq; z5yq?|%x$PK0Ybx2XiT9f)ra^r>uHOv5WDj<_W~1{>tp0(VzroEPH6+2_40M}q)>r2 zs2W_Fv~;o3py)yU491bSY%X-kGjnzU)d9kH>SHcK_xlOt;mpVkQvE7B<31w@k3C^}T&WFF52Orm}X4Trsz zMWWG|@~jrCEk;JEY=vjFK`|*U)^@AvPnmh~>%Z}HO<%pdZ$8II`t1|1WMmFYp-)%n zFqm0bDLq=F{v8>mss)Pjr!W((dV}XxZ~$JZe4}S|Y84%J_>voj%vN@Q!l!1hanveT z4;SreyWMs?tjG3>yXNwK3ebwbi9za!d0IJ!{9cJc3#F_;@c=qf_LWIx7)><-)q}Ur_?(rhSJ7IZol=Uh zf|eKjS=#y8%-B*`dPJO^%G@V7aSU_a)$4|0+l8zDSifwc*kr~qD9VY86kw8=uAkA8FG=GXvwwl4AGqd5FZ`z~QZ`V3qHKANqTJ+~Q?5)!PgLBmPr1G~VKaLHDmG)8<(BJ z;q><9V6C+QEiDWpNWl|b6Ig%3Owc7oij> zga9c&N(o|`MmFY;sbFtFiUuyw%7fF&*O-B)&8F%&KxK1Uzn0PBck0T>s3s>LD;8;6CX>54R(ZzXVon!;gYr;V zYvhr+X8TSTt4Z(`Om%sPY|;LDuSxT$idJiwIC{r0x)n-P8)$c$7S5 z`aRKRNxaUOn>tx_>@lK}TO~UyF(6Etao)#0*&S*g}LI#0Z#kHy^{yFs!Kq8rR&Bjjkq@7+Ritz!44W1Scg!SVZ$AHxAbex)H~}8|O%k!Gjtt@P3=o*FV{r@?b<1#>C9&#YhPorqIlCj1A8CzCMW2+|*Qf zMNqo51`DF=MPIrxchP(sGa}1KOTRcbK5%ZZPh;FqV=7`{!f8t|y#4frwxRXm7g?dl z;?Zh^`#m9skmb<4?+4H00Q+ivh{dMbYWN zM}Nr=r6Vsb%zT2f^Mo(0cXhvR*mzQ*Zm~3rWfohH6#Pv*s-bfD&_Oc&^tt!aF;?ih z>q!nhrBx5aEU;n}h$GK|?On7GmH;joKLlWn=uScTnCDw1Bl<+d3bM z4lNg|^vRO5ES5e<+9CwBcud^l{mVr-W?lfVl#z2x1Iq~HJ$;1YAPb2EovTEyXzJ3O z?7Y^YE{BXOEunBVOTm<+633+WWYV~M`V19BDx`0<2(T>`sW=J>3}g>+#esMtTQqq% zBz@F=m&f_K`|g03cX>Agx+buk40L|(VJIXO`2gf$nq_a+6nZ#|J7s*?9mD16N(7oT zQ&*d2E(#MUrW%hK)FkHEF!hX{m?vH51!BoDW6fz{uH*0t`CK22Tk4AGV9TKB$`0)Uu*>pf5q+^ZcGNQ|{@T8DYD@Gdb(t`O zYqy1ED)5>ll)6o9w*ho4KTtOFGm+&gf-GwA?z6}tM^IGRGt@*z zz{;*AeY$=lM>arQrRcNhx*%d!Vd98tg9|{@6bD}{ zISv?J-Q}*|Jd0x_pFEVXoGLir^ zIS+ENw*H^GU;oH}V&wWI2l)|v7E2>W%%#2o1wfwn0@a44=9SDrOJ2u2mTESOr^ycN zJdn8G0DY6$vpxXfrn1=LUcpX2PamQCNJS|>*5vHt^~J+~+gM~_3;unwmJKIcP9lVH z(#o{xq>}y~3qdx?R?FPZw!(hlW3`MlleyC2f7{y=RO&Om_k_YlVb1!=;eUB1!K!a0ce>8M$rgtp9h zWFUDeA7+M+|5ngb9OO`TOaBL#id7fY6m{!Td-ZP;F6tV(r+Gg{O8Y64ko-qO{nr4- zKWyZqFe$tFBY?(MZ*%}d!VQ)DTE&7QL-|Gwf7Fh}pFQuYfXFU-ar&5jCbYn0$NY?+JYpOG# z{HeJ!&X6iW&rQpe^YrqjRgEl?k5+(F!q~qoq4p!k`pG#z3}{gM{#UoE*=eRT%p%S0 z(k7MtX4hHSm5i&NN!Eho&?&>h2@f{sK=L%W*)@45c=w=A?~GmfwKZen@lMsW9g3cv z+|2Pf1omp81@?4ID9O57JnSVn<77rF?Otxt7p;QW=BrZlD9Qj*T3<>ZMgUptKO<`bOrNzze8yirsW_6;jg9#>W^`qY18#xET;Y_$Rz~*py z+@`J}O91C8Se|3D2e>*+E`R?GK#9JEzhhn3Cq&t$Hr(EyI;kXWvwg>!hrrq95hfsL z8m{3*eTpE9DF8GdeK-x4$*n{Yr|1dpoY7GQ|M*UW_I|l!Jlz^9SM}BfLvaiVWG$?f z1N?ujg1sRk$Km}fF4T{X%72y?_^$<4vbVNyCSm;Ne?jpdLU)JUTUc44ig+OaAuUG| z+pbyVNRj-N;^#!=H0m`S#COGp#*<!P!JB3> zJ~h6@*}D2_z|dMPw=>UIqb}`6ebHVX6JGf zPYvVtrxF{X+7H+(YD_TOxt!G*LhFue4Imtp{Fg-0L^P=hRr}!$(rC_{*)fw+KYYD- z=F;_wQss0vNMMLDJVe#-&+t2d(@Z0)&?HBSOIB7EJ4ClJrgE&Y0sE@~DMfpFmAlXj z0AC`WVa*Cz1Vle;Hgi@ewi=<9m5Ew0m(s{KE*c?E$6g1QP{U+11*w ze}e&+82dkhLI40f{>*dzXNUX0x7j~8nVOZn@+qcoPh*J!WbZ2o9Via8+ujY2#IbMi_J!psu8M8=~UCkoH1Cl^!4u+=4)xL#f%p< zvuq1G*6(?~?<6wB4{tMcB>Nh=!PebZ-`mfw*VpXt!L{GEz~uv^xN!z?k#MM~aOf{* zXToXP9mj@MXY+GaLW8;eDcTu{Xu1h^`UIRzT{VfMoP@*$4WeNvCua`xH-6F>+I*o1K0-|$)y!8r(b zE1^UM#yS2~P1P!WI{4QuppIBVh@I`dzZYX~>o^CCk61-JtL>{$;m4ga&tz|45sf5_ z)S7-f`n5IiVM3{GfEzh*C6q^N+z0Edqs6$j4h<9-$M}yDLR!;pZ@0~I>Z^p-h})S+ zG2ul%t!&9rZhj+ZLt;icZ-Rpg2l1;e+(gy1)-W8G^uGc^y(Rk8U%M9aWuwfs?V`bo zv^|Gji`zNU8=S>#MvkIGPfh3((~pl!kq!-GOIjCuO7hJ9rTeq0BqYd5U1KDUynx`A zUhmw4q3EB`4@SZA+kqBW@+(@fx3(Eq^*Re4n3;| zBe<|gOr)A}7gfF;`15uiu&oXqF5{&kgRJ(j*$wtcWHH%en326>36luT zs(E{SZ*H3Ne4QV^<#u`>#)lj6^S<^LomNY38o_#ER@M2hk@j2yx;}XzLprb90&e$U zfp>>r$Cx2s=cg~-=(ElLKGi(_^}g-4jCd{;{^m`x-2-=@?1Q^vxf5#tOlW$-@trdD z3)a>93XXgPquaAVvp6}EOrl$O0&IVWWD^5L;{jsfGWXOhi&x}KudKk`n_`=Ruv^uo z?nxDMvk=1ERB<^OUBPqJw-5?C8dJ}#X{i6?LbkZ$NMuu*H$h3YtWlpzEi%*~3xxqa zE0%eYX5!qRzghqAD&-(0mEDwQQ?4cL?PvBlix$t%h2)^%ULL*)i99$K)OIrzEJbp=<7`jY~8iOhu_X z_`p%g#Vu)kmp444OL;L(=ny~iLc};ua5Lqy6Y!f2L~7eq#j0JjnO<*l8m~V(-}b`p zutec#4#cm=4utvfS6W3<+$Q3Y>Zdf1UXj4fjlfizyT#6y2Ao}_lx2FP!Nm=n(yOyK ztT+;>fon5sg^&4HN`+(6)Qti~=Yx+(=_%NhR(etXw6S$*O>75>q2!~cnmnvHz8$y^9j5-G8!CCptID#*J4_h4IJ9(;(8)XQ8q==_aeEK0 zSMC-*<;S7v;-h2+am@)VHY>m$jZXnBEBPR$B5N^dUq&)gen-TQ8-m2kd&jy6{s!iG_QuR>apdbc+{z54RhE- zJn!jNqVkM_-e_4P_zWB0m|Mbo4>0fDSR%O0(eezcFh*HRFlMQw>U1=Ma3#51sdUU$ zJm*WV2Aw4FGgClZsln%KaR#9$CeP$&`V?ymwcbIkkI8CMYo-s1PYg9X0&BcM@DC(3 ztLEdln%*c!_G$ivrgSY=Fb|ZyL18rI<5#(7k^Tu_QTq-2^dPWoOPTjey)pYqI+j%{WD>u+ZCg zlA@!%ckCqxpo%oh^u4oIFQM-qR?Xc}q5uZf$f` zTx<>Ho!rmF#Sj5J72TIX0SzTDtNW4xxiX@}d)pwHkp-Xgu#f&uJ}Ll@Lv{qiWAZ5|IWk*YuR~f?EcA=FU46)jhNMIn&6@pVMWd zZM=fW(oBW>l>2(cC{4)-tLo9?s+3Pg7DDGWzsek)Bd@Up)q64G9opIg)1^N!0sq?X zUqet=B53Yn;To&ylpP+HU~iT?Y3Y8N{oa-b6`ydvKj|;U8ns9ekEZYMPeoV z8G31%$|y@~S^jb$mm<-Lx)D%Ipng)oQ)A8o=(j>q$-GJOwCAf|HtWS@q?xf+CyA-Q zjyleqHLXNt32$Ns%Zc~}*OFNQ^iGG(@ zUrc9Mi3!%#U5y)=CNh3C#?xm#i%1 zaR;{Z%r_hfp~e$tyd22RHo}{d+E?LdD%cJJrGWzZ>z1)bhZRVI3ciM$owyj(fkkKu9p6rl@t_q5x(s24fjg!(JkCHI zm;;tfA^P?K%uED;XvR<=#30J|7$hjRAwZTPf?iZ(8~F@6KydmA*y1hOG*$-P7d!2( zgl2aWh{M)k6#L-&59v+*6=a*PYss0Z1AlU)G-*q)pVH?dPc;rambVe=SmfbZZJ+ zQvcrk@#Y{?Bo9CQp^2GbpHeIQvB*9>TvG{q?R*QMX@oOcpy@(2bqr*DVj@<19q-85 zq0=_%9)hXOH`T3vxdSO~1ih31+Z(_R6|kSzhd$q&F3|PWIVVID-tT1kC8dzfL^kuJ zPc;@E8tv{B?B*yVzx`B|KmVpU>RwS-2Jur4N%(n_{x{_iM;GfK&3Gec3p?9?IGhmq zeo0_P1fO+Vw_iG1H7#rjJC>lpy3~OXJha_SPr0=Pq6<3Hrc!>BQGwumeQ`+ST6RPy z2?nO_w=!gTdbjuhwR5Ks4rB9u3emRFMxke#ryJW0Pod{UTjB=BJxI)EETiaAvl&AL=vX;MNtwwlHZG{wt3e=I_81kzxFSg2PH*25<(h?ic*D;rQ+m?XDM zWzpZ)l$KXKvh<8F->S>4OUX98T3i#QW~JtaBm(h>LL2=|8M6P3r>{u;3iTaqQ?`}0 z>-Xm+3+9WS6BcGHwG8wJxSPjbJ3Bz_hgJc6p=gl+o)El3X4lE@HA2>G#uf_<+Gy0d z&0M_sjU$}7$ut90g4CnLRGp)b=az6ZOAuYAbYO4=oF3($BNfHos znQ2^ZFWHT=yq~#Tw|~Ar@d2FHq6~qg5WB)mdbSQHPmy}UiNZ@TZVm-N^a_zk-w5?o z-!7?kYeMc-Q1pr>5}q0G9PEV#4jFnPhyrAKtV8Z;{d~#yy&(A*K(tbAHDRoy2=)2w zEMV3pr?;rTwrHHKyEW!=n`vsc>C|&dRVlJWby{5()yu|+gxXq)*e+9l>|AqI*;_6v zD`L0#^h%8ReB(f$v2S7 zKua_xY{fxrg!^V=XlUMlC< z(A9)nBxy%n1=0=%;=~Pw}oI|JmM$ikU3wBRFf{5 zaS8)Ik65x0!|-1$Uedo@2=!###VX>@1Yxb3j3;l$5*^gg^+9y`pGgdk=GbEST+Z1g$Ao=gV`Ssyv4n)SEDyYnlL;CM} z0sqw*DSOzP{KLJcDBk{8FCdTI^-Ap}7>cmKR|o_yg$tG5mY_PCv^d&30|}w;MF)AR zGp#G_{9j2?BGID#M!)3y9y23#64M^C*OMNv+4j?(9eloCZ}2-1Y>{$xM*X5n1JS|C z0H~E8qHIos2;nCpXw&HWt0>zRlYPwkfjv=ri)rJKIv zd!;{h@NV0;{cTysTctd)TtCNn9CG?#;d5k>KKBi}Ieo#aa6N46Zby0uX4aPHuALG- zqcX@W-U{-pnWl8--OD=U&W>v2lF+#R7@Uz=NJ~f3B6$u%Gu=H(tz9!*|G=WVB#@$I zlSlCU_MvN5#C>(yPRxlPpZ;x>kGax>auxH2;OiX$iuXr!5xMNyfLx(T2p z`lEHaS*C4Y!@VFYw%WdUYx;0uF4Vp&6jnY|V^*33xoT~vAwdD&E2gvtB3gRBKkpp^N--m86qIXtv7Lpwe&-=WKa;;{j@NUZ+Q z4FcJYb9cjP2q**z;^)`Y(qw?4uM<)UK4$K0wK@_4qp!i#) zU0F~tasY5>TSB#ejJ>8?fE!JmpcwB1z=vW9bCh&Rqiw2sbl3Y4yXO1!eANy>uU;)M zq9q2%mHo=`&3r#8WERMj9e47up1;}eT*u3HF9i9OUD=VS$POrkUw4w9;P+7slDZcm zr%D38thf>0N5OATp!S(R91^`rMf~lzVU7%)SQBSc*kFlSWyJLCuS9uyi-x*7Z}t40 ze3`oKe86s{UwtWTd_-h?`~o%2-g&UoWXl@ON#eYBCQW03S2*nNW&%PAfwP1lsex+PUQx?w zM6+S&kHrnrYNv~#r~CDpIWe!&j2nur1@34ftDcS&(UPIJ#lkyZ3QHMo=P{D{g4g$U}=u zYSL$!0ATgE%1dRu~pR)k8{=60q){6!6B> zOBnrK`IZ@}_CHFy3b3w{uT3Zl5`uKMq_lK*OG*gR(%mT%N_U4e2nb3@gMxx|DN-s* zcS?ib;I8Zb_ydc6*T)C;S?~MKi8*uT+zAomMRzUV&*AUcVYgMU?yZyrTD7~Y`%BYk zBV~yCeva5FL5wrlwuHJpkzYVlpZj%>bk{qOD1Tc4iXVCGIzsL0Mtl+RJ15GU1VNPg zPgZBb6J)cRxvSy=Wo?UDlceW(nS|NVl?PopSt5crDG;MHvV{Xyl{-2NpSV`)>>1zX z;l)Xj8brQusab8Mf06-Zr8w+ZW-`*r}NLrny;Foqw=0!0v%^r?~8^Ls@)O-2QIz+1p%``0M1z;ZIba zxykb4vGl9cxCJXAm=4%%7~hD%?-zaL#1+9NbFoeGqNaa`+P=9Lo&Lq(Z)h*&)d>+E z7`e_Ym@_l+3CcDk5O&Sgejo};3b2=Y^~r6V&+^Gis*e9wqQ`ET+(HeW+cLZ)hXUIE zJVj;J(}qs2(I}&(-b9bR=SY`xrsA`QtG=*Nh=nfT4+azTrOM{cdWiDfX_`%Uz8R68 zS0RCHNxA)oncG-R?BP8YdnS(PF2nKNYw%A}6*-+HLXBr&q^ zvqFO3yTTZHVI|QY-1d#&IO=l=sdyX<}n7y=0Q3@S;ti70>3+Uzf^&1|EumCV_;TBUPp>#P@y zoi*`SoYeV!7bx!+SW7P~)p#`wt-cr{f7=gY|YhF;%Dqa2NTZ&v*!{{>q7BOKV>V3WGb za&35TUDZa42$K4!m~nXD&}s%c%p)a6wbknf3>e63Pw=O7$u&D$xS^JIW7rg_y^3iI zdNBG;Be+m?RyJX`63K^4ZhH8I<=xBD31rU=68cp${f??kN!0 zz46|@;{9%|W62H5We|D|mFG>J5b-A=;=Mqq=RWVm)%oG@1;RM*vofJo1>C=M9YL2s z1P533Ro@*o+|*`qdhG7X{r#j@8#bPsn99vHW!)nbFRUJD8K+HBwxQn<<;F^U(4Zsz zuws)YpY%)50PZqr8`dqGj4ZRz$ex=;w}Yl*zhkNk7=My_t&drx7>epC$S%yMk7x6! zfJ$kN1nr}gfd#hSSA?~jdZrW0#M#0EZ{m3?4pYld`u*GIX!xxg%Mtu}$vp#Jp z;JlQixIev=Mty(UN`J&+iDujRlbPXl7p!82iMm);twuq~NQ!r&LL(l_X|`n|uZ1(U zQBmsrXjTib`7P#mo@h78zrk%CU8^yB!udMfJLU=V%=^N2RkS{_G@nrd5)vCO-dAJO zYUC^(T|A;bgUh$xb@sai-l#;M#19;f@25pye6WnHA=#^yaraH6QRxPJT((Kc#I*O; z8l9*R_x`*y&Nn}-XDsqz(sEvV%ugD&My=^Mzl0O>KrL(G8(qb|Uo)c*Rk_XJx`4gH-Tb5*htG}kc8vY< zr*F74iNZ)3RpFMHI=)U7C44ny6wPU^_qr1>cd5d&~S9`|~7 zU*8v`56($AQ&p2*PdV0zwV=M3UicvKNFih9dZ;cYsM^^mH9U5`Cec&pm`c5XT*B3) z^+w}qvsFPZcvPsJr{cU zwZ+Hj56!im%PgUZ!Z$Frr^wRhzKYW}Z-VCx{x*lv9n|Bph~WBCUB% zS_5}jlUJ^^e-qbn^p)eiH^S8OPh$>`E%kWaD|8VVOmalQh9_{ODwMvJ1%r(_gM+<^ zIfJ3IwXLC@9m9`F&QZc4to!pCz!c@rNAsIQ%NoZb%!jbospjA=k1*cs%|i*NFbI%G zV$$1usY#8bO;5l1u=hK{wSWMWL+C?=W;-j*n+QQ6>W;2mAMEPaKiUl+9}`2M+ei@tyLI3*9Fp1;eU&-&2wKHt6A&T)gJ^yl4Su-7HY!oIl7ZiX)U zUmv*6FI>xz8-dlL8oirZPD@?!@WCr2AF>-l{@;c$GD(A^HV6n;4BoEf-_A}etmZe$ z3uz>a94&JhTg<-xP@6#Q}UZ}$#KvfPvB(=jdP7mL%r z9`cFF&r<}&ACK9z=P_4AF{+VX=vPg2kE{Zz4^v~82FF@CqhAehzO%aU#5mFdm4vEX zOaXR%;v?l1`x53rjr$uHc%xE{3w6BR*I`g$n5lz&KMHbV=_rufmc4SKy2mV7_MW1W zO4E>B;}Z>8mGmH5tX(AgTCFn0Yuan8{vvUCj_S<16^&R7%5=MD0%ji7f@eA)D7r6?PB5;9Jh!tMKS;BqHfZ5lZ@!Iuk zex~Ib?hQmwg*?39t4Y&m_!HB=7>TtUDS!GxtLCXi#YfTXWk;uilJ^_mQ{1MFgoK#2 zY7U^Cx;VFzm))noA2hU7xzGE=g`)M|@obeInb8XQw62I;M;jJ}dr%yA$7q^CJ3nK~ zZWeZ~+fXl7JhT~^0cT-DF<48RM!&+IEyN*&SDPj>TYoSJb9&DFtyL<|nxUoO4Xicn zgj*An&w1qZiEe(?L-7sy;39Nm&m|)``t3YREjqfSVCuw|Rvu9eQC#`=E{UwUX6`w` z-Qg`Vy}8Qc>KW@bebiCnRdKNR(c%}it+RQIf*NDi;^~$0MN)>=^3b1@PAbe!mO6)a z*%>wtadr2*)OWq_(tgz>$^;c$r;xBa-ABItYbCG_?-MQRHWtcLYh zH}m~P+>oN&6zB-0-|LC0@3>Ol)5@T4Q|`GMB%V}VQ6Uy(*7TGBo7z-Dq>*60sWpD% zso*_R>B68VWzZ!BMKgJGa&NfuGq|~;dW(wk4V=WwOpypfzBpI%CcZYR>LuuvaH65f zl-Y_#sub<|=w}s|e{E*6|I! zG-u6@Nad@NPBQcf%|=v}bP+R;{0&oY(9Sn%alA?(d#p;?>Jo|YrC*lF9IjUb$D)l2 zPPdPgazTcrv;)oLZv&J~5qZYODbCJRfTQF*GFiHdrQCw`KfyI-b(I4P5^?dnjnRAZ~DzolZ3MgApP_O@l3`3UQx4M;>l!JTfXW9I^&uvoF7qe^8fGY?>?ID}VS%NIrs{a6AY3So zKS0nDO6tDw%uI`*mo}3?=HBBH+uppYa!iAd`Kvb<0y76$O%xs4bIh^tvIL7YAtHIr z*nD~M!X8cQMSlr=|A4t9GeTdc-DS~4!XdPIV`(u|n07G@#(1V`bTp%}cjMLyrK;8r zlzKKINJZjqc638AeKX-=pGAsH!gA)=iv<~(o@=EnqCU*sc}A{!NstQhdQ@IqGC?ng z=V&}GM#|cy(H`YZZxp|^&!6?5O3{3<_vKn=Onoch-zJ?{6uT5A=#92Kj4x{xOu@(F z0GF47;e}`rjd;=4+xB6n0ezySi@xbymKeG=jdqgNDtyrtmLiS`8ERd>k*1N19R4J` z_!~RiVne!U`M!KDn`(DbzYxeAl0?NiG`SkxF+qb97XA6$+>Y01*$I**p}rnZ&47?@x5%J!9N0p>nA5Lcov{z#nwzA9M#tBHp ziZWM=x5-SR$Hqm^y>J6n-9Xca+nKw6yCaOC%?dvF}xj0AFC<6TY-4)S3U>2vv(}^j*VH_Rsn~(-RlA);y>>5$hk<-`{4+(txJ1;;-3ydXK0q zGnAr#iD46W|Ncux5Bny(eaYPiuO2u0XlH+jrwqAVCD<~92UjN|9v*cu`Vx}oBPYDt zhx`^RP0l?ZX6Ey_MSR4sBG0Q1uqW4;?1&b8ptG{PIfJz!{S8%+Ie}%EgoN+Ia z(k>jaTqz~pcG__BITUI5fXzri{PwHuKCM!m%II_Jt5q(%_f`ZwwZZ(_Gh$gckwb?a zz4yuBW?maH&A{lVsZMaJ%L$N2aVFY%Ul z@P&Lv%%7DXZ^%Xe#yFOyfuE0Z@RCWw$NnW<=Mv$ABu`ZZ%WyKaavXEc%4iYd<-nW{ zT+iJ+j2nG=H*$*0`H9hEQf$8{C6s=Qrh1+uJr#}e)csq0h{$T%7S7}QW%OT)DE;y> zJ7mK0S&9nXD~r)e%*1X`(YG`E<2^MBRwG)P2~DInGO0G$O6xa>nW-=NVy5L(S;~Uj z;@eh|Zi*yZ3X5akvu}^V*yzq1Bf(| zR<0QtP%xn%@wHf-r*T(q46iG1o*p}z1+IiNarZt{9bSfR{Po+Frg!D>rTzFg3&7`N zlx}8%EtH^iYkyazR#vv4cK@1$R)Wh>xEY`K4GcyEiFS>WqI*cks^P>km0@CG=Y(A5m&n_>PK48 zR5%29F5-zcjhOYlZyM7z?xC&=t;Eq{M@0Y1BJNnbeye~Yk~^IvmRg*LyMNPx;7idB z-#CTC&we=y!7orzrC_PA^y2#5q%q;)?k#9!kdm{#h>XhrPz+hiJ6974QvprBDOo@( zy0Q3S^{iA!7H|#%>RD7Ov+KOx@L2BC7ZREY4 zwb#4CyqLovMH@HUZs5z~DbFzJSL=osAwP&WzYyXUiQ>LzGuma)F{ySQ-^nCWL=LcvVJF;)RsEHzS zes`{5jB`SB?09#Ilt~#QqzLviWgJxpzhh zmp89hxC3`_z&K3o@xY93hNp&a6c7*AzfjD>*4Z1C8!@G4#2Fc^P-W@sObOC>1l|xgQ+<1F#qGg@ z-R>Qo{)4-dK+|a4EtMK zn54(HkLW>NpW-_d|6qY0E9F2!&kASR)X(ckYrE@0sf1jgmw6>H)MSY;(fBFdEn#crinZ{diY z++@3zxk$nO3ii>I56*km1kC&ESD45|rf(r_*IZ`7>Zi%icEFy^pcq?GWZd9kw7ZC1 zj^>`9tKGo^N9v9jc{h`Cmr1o&xIi%U%85nqlUc;9tX2szJwGUeQ0PXqhvZW- z7d;vB2U#)l$T)Q!;7KQgdc?b)T>I`vX?DRWd>JOka{p%5OVSN42{%U{9$eU0l;n?H zy4rh(2Cv$xZuad9h${K<4&*iG!_FeUS2n2{Jcx00wcSm56;7*!Y^%vYzrsy&Fa0xh zm2~7|`tmToKH?_7_?ep?x7W>L$1e7j^kMd;*X6|tdGcbf87z%swB*mues`7sK9DA0 z%GJY6^P1&JUkO%#3v=Jv9rCI7#8%uhH3TLkey^WhA+IA~^?z z;%9eZe0Y4&$t6WD1(;$yVJobYK^^paPdgJN!D;!nUXTLyI=+2H;&p#ltppha-w!iX zb%?^wvl#e`hS+m_1@4T7?r)?nI85x{$28fHpIdG^SYgo;wKXFqc-3I~X7|lRhdcca z#ib4LZDRBR|R~u>p}~GGKqiowl7T7p<$K z@?dM%s@nB7v}l&mc%eR;C2>qlga-**ikGX-_D>;r1a{44QlJewbXa#FkrpBUIL16oA{o|vE&%S(Is-9QY z$-w4--l(N_I^tFGvaWz!Ab_puFhHvahf zn86P%v@iC`emc0YSG`(8uJdIQ0skrs+l4R%!k*S|G9)EH%T2=x|37tp{CPuQ3Vo)6|)BN6? zFNHnj0n~Iiv_fuU-Cgh3CT}ZlXHxXK!XFeg7F~778hbtW&eL{kGb-%PTr$VX7IqqD z!xeAs9WK*|70372s}C<@?R~O&lkQmQt5>vD) zSZM1TFju~ib9F_cxP?9R$Zagi=2!*>C-7v*StbdtLny09ncnjjdV1{<{i}fQNXE`% z8FuKVmdb+|2y94^?HHz92A#LnB+aV`zxlP+&12-MmCG#6V(-8^S_=d{rBUNjk$;fg zj{IP%rg$ucxFJ0GV6ZJ}YS5{lgu%ks6J4}O=@ThVm>T#x%|BM)-TQxK#qFX&DiC8Y-IUv)XQp^qa$3b(=J9i{gvr@NSD0 z0;7-h{S2b6Z7gHr$d65YpkYpZ_Lgd5SRmDtDvf%HClT2Q^C`^4vlhX0PlNA;lydmD zp}_Tx)``7V@HeAIQlXnH7P2w758v#`?>tyZeb8Bpfy?*+lvR{?o+9{-Lw!bMV)&vH zsdHCc#idn`=f=~NiCUgVzRH9m`b$^r)q5!yo?S|o*kTYTk~EEjo!I??gA&#L+*xsD zM!U~PJjJ4XAcl6rUb&|0YO0*;gPRv$^>t+5SR%RWY8{1Zzij($?+%J41FBo$hsrVw ziEhM#geuQ_3I&L?uFK!59HW+rMYER7xP^K{M3Yby_S*YW7_WZSw4uke2PZhUbF#(} zl!Ys>KTDd6Fdldo8Wi;K#`vA#E;t7p!jCU2=j=#6HtWyG-Nc&>o0BGkNhEAC#^olhteO9yyU0s6J~Qps;K#eN@nF|HL$uy=TOv2xAoh5jlr zH;vD?fLCjBW_jP^VAYQ)EPk zn}}>E{)s5U^!L+gX5dHp9#35*m=MKju6lV>?y*HO-v~$dNVChp%`T%6jtInYnXJ(- z!FG{>YtMI`E*s@o+zF?Ap-!8=i9OlY-OHOb?$qw-LdSf!BkplWn_;uSq^)Fm4f!_A71VC)bUki=iB8y|sAR(i;5nEa*&8 zvA?H1Q-gZf8E8bAk5`&O?ITl~0iPc^TxdL?5x?^UPInihAR|F+3C3VRFNS+4&~Uk* ze75fT=lfZaJ4(1{t}PD?-cyAqJJ66T!4X#}OQ^3UK(l%>T?kcsb5ULI;5EfFJumpl``Cn3YP-r!NbF#!x0!= zUIR%D>ar3i{WKV?9Sn?13&yF%^>;-irf;@Q=k?j=S2Y&}A<$3FZLeSZwkVwY{W(9Y z{Ouhm5-YklyTIuEthI#+E-p`K1x8NBxjQ(*uPF> zFV>7hv=7DKX0yynZzAEhnm(Pp(5^ARP}jY&_4siE6wm8Y7+bY&vLGbw)RmIfc1#BO z(!6`m>4^!REVV1iTDkdKz(0cZj_zl2@E+3YWMa^v>+#Kgz-aQGd)3ugFCqaR=w ziD%!1D@YNPjs&H~F~A$Gka{nF!@D#0k>=gk&b-CB5c+D} zl@k0{Mu%-Wclj#Z>V_h}hs6k1DTL_cz~Q}rOk=6cV34LDc%cbB(Xpj><2Kwp4lj|P zN@y&jcc3p10$P#&9U;_6Uo-58TSDqOUl3R*7%?fD@#{wL>lRtj5an_&2=8&H`$TU~ zGwq^Acu{%|2ThR4mVHVqmMyt5e5IV|YWV~X+UNbjB=byy*O3|hUTb z4U$=S z!ZX5Xh%=??^TO?wCD_CyoGeWZG@B2gCOp(`C0?WuexOR_8PW%l28yX+s^y02#w5X%m>$UH_reSx*2 zgQcjYqlvARrG=s8-|ioCdtUR}ZNfvOsz^j=g|f?3pP2FrjTcR0Vo6P_sS4B8tZTR^ z$%6gKDX)o+Sk`@>drJR8W!81p@dL_;o`oPG>Op;X>Gz8P8~vWkrHe~$T{4uyj%ur` zs~sJ!J9Q0P2U=a6`{N&4(_dC0x=XZ-V9kkLW0Ml;GO8nQMs8lXdRCve&=0F zs`!v~Fw(Ny4D4=?PX&L~3>iDYRu3ZAs|9)28T1s#UL5w6Z$0K*3KG*ZwGV6UyBIiTSen8(jYHfE?XWN9sE?8o9!aLchlSVzQ7HNq1138=KAUjwy*W2lrbcNuj_q; ze^Md4M~5Jt{|-GUKN2nG8VvpDN3_6i0|bHZvXv^?lv#L6gtwhPVrr=uZ35arN|&qB)_PbO@Aq?Nl{BA(D6h05;yTf z<-%{&y;+G8e##V>NNvy5&EbjS%Mcuku9Cm?V9ZPL7mRulZ!?l7f>AD*rqgMUUw6Ur z!y2;pg6wm~EX)exN^Zrvy$O+;GKR)CEkcS}!ctTVnvcs0c%^JWCqWC&FFgQ z`^d-joGp^x@$2}g(z3Cu=yQzXf*XKCpFGE;ezG(dk%=2DKp~)`g|3|4^D50YIGZY= zi-pP?$**eR0qXCit;*n_Q*$%PnZ{7Y#Czumc+%nt}ABWU--HG!$cR`$w@N z#}O~$tQ*z65Nm`fuS*`EHTSG9^r^V|(CI3fpiQr0M|-aU4GFuX4Ru!D)y0rDaof9= zDoY_1RFW@HHfa?4OVr5CHC`~G_g0Y0Gsa5!PS7K?f9z;IXb61&Orjw@gp@wbkCZ;c zGy+qpTtMYJyE7?$CT>J53m*UbK-R}Y9bVq%5wSgr5vn~>5vmF)K}C=3V>CqOaz4Uz zcCw+Xhw+xJzG*^OGrbjssrm7Qkiio;~S!-<{F{#iTygn1NI zgDx*Vn|+zx{UMp}#CNhAYND$S$vjmzUWXkhOm}b25Hu|o=`8Wv9GE}v2S8> z4nN(Tuy7Y-OBbmrN1|x$UNvN6xN!)zY<;bGte3ov%Z=pno3D8~4R7G^p2dGvs~>g0 z#0-0LF~y>jBUuJc7L_`|;2w{CIZ;R^4zBiG$FuvkZ4VU{$vNMc^oSPN5G6gtOTF~H zhuE1`$D;Xh&~`-%8{T&@aAMbPAb;Hae2>?#?EcTi0-==YnH3R z*!ERv^pY>$!NQ14a>u^+b$}x*@a4x#v4(0aN!pp5Wf9uxVl=ts&sNN2W>hr9Uw_ty zwexN`z#P4@J>r^Is_W>JP7-`K-mo<~SZZfErm|lZwWb=AEQd3U!oLNrNk8Dr^Vcie zT!W^BC}UVJOl>@0+v=iWV<6V!2l+j^ND_ox>vAioxP}n)l#IEZ5*!9sMop#JBih0 zd!gW&dJC$NSwZk4E*JcS@yT}vg0By@cu42z1I%-bu8cRjW8l$;RP?CQV)*UQe7fJ6 zq?9-4Kg!qw4Qo~qI{9rxz3)2g?k&bbHG->)(0llKAE3VVjldbdcy@EvFWUzJGffk! z8Y68)Mx)Mu;9{)8jkjTIBeCAQ1m$YjBkLg*nz&Z%B8Af*8%69JhwHIIB8cX0@_1QM z>pX-m6%6y6x%Zw=<_#u?pxTQhYZ2Jo_dO*VEjG~2MxT?4bD9j6m^(%U=Sh%F6iF!NksaJeMK`hotU+}|+_iBGA14C>5`5~t~!+LU)Z1FXxf7G%^6`=S(zw~+|Yo-1kJuM^k{7YpeT74i0~X(m<@2x9!GIGZqBQM<}nrhmBiw8n&yCSH@fKe$o+MFz7)T-{ffhkt-5NO z_)(o}8ntdsX5373n#xZ3QzqNwCiA81cc%t5iQFY7%`@s9O zn}7X{30oz?5Lq=;B9=|(HumkHc8-PO`%@~9YWywMud#l^KzHLexHFxBCs2y}z%W?G z^KCd0^Tb2M9j)qp8Xc20b);_My#|xel`B;0mIK#{ZLSSkH}@fT9|(x6!4p@sInlvq?{Oog|4HaO!vk63 z(ax81L0E$pIa`=Ny**+(a`UQ3Yy-@DJCV16^F};iV%zNS(I%1Al50^3j+6ue8J-y` zPx|pL-a(zGBoiU8v+iLvkwII&}um4YcO|xc;z) z0}eMP4~&##-)yQSlftVntK2!YXjQazlB19&p{XTna|B5g_YXg6x?^^f7ry19vbbIPE(QrWk~-j&%K39C=SDkz>xcwW%T7*Y2^Y3ESxPOi(d zs8&|41Yehko&_hjskaL#HsWyc%IGRCQ6e@Gm&o;{OUOxz{L-!qJ;w;ZDD+@o;pTJL< zDG?ceX?Y>|?v7TSYq>J_s|t3jBG0OtM8PSTawWp~W~s(3G;{R?;>#MCS26Ft6BTB( zeUu%n&Hg3%>4i+5*3FrZ9|>%Wghz=-e7<%`CT08hGI#M>-?2vipr!=%<|4W9_d4?^ z+g@oYD5=HDp+OBZ(}_-{PGoiC#raCUE;&v1N>1yyS%ov2jp<7cJ;;dsImFMINKlyZ z+v=2A!-^7ipJ-&@J+x62*YBx%FUW-2bx3+Cx4hhhI?e2(De{#K=uat(8!7L2v+6$x z2k=nI#EJx>9{QnD>8K&z$x-FEPDl$XE%d&_mD;nU-^u-2b@}}oRD}LSY}TM)Y4tt( z;M6c|iopjrh|l zy^rCW67q0S3O(1!W-o&r{@|zj*wcONeBL;*J!pwoJmiJ1uPuBlVbNZH&^{E2hMd9_ zbr_yv-@E`-#$tJW@fI(V_Ju26d2;s3?r@pDC8WGHMAyH(8xO^LHM`T#^I;kmYd2!W znizMC18;lTE0QEkPbjok?ZQ2IGMl?LA4ghhxxdAal)_eA!}hzC9g(3pOP%iJg@k9E z=e_A%CV}_TnK9MNPPGL6)+JhK4+G6d-Qx>%E7(=bKI_+e)?;P8Z2FtsHW20XS|zDJ z`0YYjk+&+7Y#yj;NKg;Jdc1q=f8YDl>ww|7&2l&t%!@_O@{nLz?zqj%+PepfQ-wzD zX_!U^BJuQD!x3@d_%jfBgg9I-)w60)!>klv2^ZcHoNd{>fTovN-m09SqN6=*FzmPU zk)C9$qx`eHrF2Com!AQD!PssbU8bH9`^KDU#^WT~Sk=ZlAxbf0@yqttso1tgOwduO zRaD14HMuLTF8j;5#V@^b6?qzGlW1|^G%`5||48v_kwgH3HijjWls#G>L5OUufkj#b z2Q=^tqDZ)LLc8vr~@`A1E?1L=U22=D+-IZH2yDJygi0`Mg5uo9U=8nIc9A$|4 z#K$n4yhOukcague3P(z+Ta3H6%ZI2I{o8%}OL5wXEW-=V5BPS8)gQY0^v1;mCgogV zo7b)6{Mw>lK}6`zW;A%=iSnwq5jxG-H>p>-3aSG1m3nyZzR5ePJ=B`i`Pz`w+4F7B zj5Ucjo0QO)_&}KOQ*W6}Lp5gTZ6VD?AKlHRmhex6AMXfTH>&PUDTZczJizN`kC!Nk z{t)Mc9uO8kKe|LF#TmP^xhu`m@Uhlddyi4{-@DR}1{>2Z?;%qVyG_7fmfwlt*0xsQ zXbgK3Lpvo$`A%tiDLP461&Ms+6OJ3TDPq=9?Rqy*K9zn`m6i-JeL{xcl?dhIe)FOV6rV*J1o`~yGm z7YtqhJXzjHOPl|BO;%7&QcP4y`G&06F9fI`2>-kSegWG)|9*~$Tfpx}i=)qa0~8hi z^~UVqZ-C|0XT1bY-v8H2$Y9ss5zWsv*k`@@OT?oFavXc}=j!dV5Qu+LLmeTQo`PUv zX=iWi@Z<1;GbK4v@?XypTHZO(3=Hjc!9w%1ns~JR@fYagIY6zf&jf^Q*BioIFmwqW93M$JR7wkqoNmqilwz@7#PP*2AmCBC;_66B% zA^@;7(4meJ(w|S3H!R38PXZLy)i*Yj*E2QL|GWHn9I`aEv#k)ckr%Xx{3jmxndN;8 z^ud!M&CUN^&p(a`&Dryb0U!#2h8~?f@$<>@<^uufBt#KIBVF)$0Gvc&Z|HnVJKH=| z?#6>QR)brEZ~lY?KeN0`L9jam_3ykKwAjkQR^L#@O4q>f@1u&2w_HcqeKP|nG8fz& zd30Fk&nL_KF*sN8L=G2AT?-TaTe`No7IrFNr^m^5)1A=3YXFVE3HGBxDmf5Do|Aw< ztF3J9CG8C@PDZT2yG@h?R1pX+P(GSh{Cu*!gTR%Sryw3}LHTjm?paE>I^L=|2uy#p zZ}wLQKT@kKpt_A>nQWO;`Gjx(C8XlP+&4|dA{F9yYQ%hN2k zhnBU2iiFc{|D&LBUg_*gd$n}dw&8bs0oeZx_Eoz9Iz*w&Z<~X znwAs_%2)DuCyoMv@Qk*e?qAvtO5@Ey>`xbh;?$iQT{0s(2NOQf7`xBNU=akjex3xN%ZnuG376W+3 z6xgsP2O-pW@}JTv8JZjYrP`mp;$-d+u88qUkZ+iPejo4ZW_n-V3rxiF+(a=c{gqxEY;RO7BE&+p9f(`*`(80=5A!g$yjx&;Nu@+)DWr*Ma|z5Yi0Pcn73ek`U&LF8@=e+a~tL$Ido8 zKD-&Axv(P=r7MhI{ka^RzogpHklLI@5Q zwLG&^2(`EplLFuI0}?{&^I7j768`Hn)8pd#cOe?x2jX1y7tHbp~w2iw07 zGCaHnmHGdqM^CaQBHQ0ydDklCwDY2vxhxHz%gEe4@8iT zQ8;%Fn%~UAyo``xp8=r`fKZUZa(wlV*pv)UnF(JF@JcKMUHUc1_qZU`x48b_Op-?D zHB(cI?}r@Ve)oamygYsb#`vFs*4%-uAd{ix!}IX`Q&Bt9yODzwBH#c^ zH1KeC2(6LBK%Y44GWj*RV37RljAO&2l;Fo?^kkRA8ol3fWSUqojzPMd*M&{swBG_^(QA-&L9zuP{5RXrapSyZGJPzj?FHQ77H|j1IaCp-w4O9={kH;t zYRYtRKO4d8Tk&e|C`2UtuWSPU|vcM+b8NcG3adtN#$DV2yXASS&8W`m4L2c+kq11ZdTnLbr}ey<0X zA_i2dkp3#x^^c=hm?aooul;K8*o5Mu|)fO96#^LJ}w11%q!0e zz>$MMABF5V;*7t^U}foIVdY@=BlQ9`>60bOyecFw4Ez}%NCfH61>owh|B4B~?El!s z@)w^B*kOD!9gdYQuOFaW1atxrZXnC~$8@r%72Atm$4>D8bB%#a7Sbgcd4G@XsHlIk zL~cSYK>}dha{)OD8-zqJ1%Hb}=%4e1j{5|~8nKl(5aR`iIgnnbB=LI`Ca0Lic!hA$ z7WADX7Dz==%Kje1QBrrZqDZ^2l5GHoBjA8k)PnqPaU5mDCsX7FL$f{x6xV@0ASs?H z{wBp~4*YB+z|93v1Oh1_Gv5rA-=jD)^Szd{UF;3|2?Ow4NR!*D{T2-#65;ZvvQEJM|G-(&cDntHMz%P{1WY=GjZ7<068<>!;-?d<|Pi25y} zpR>4=E#kjO_K_S=jDS!EImkSU{Vf_96SGqy3w0!X+ai$Ue^c4-NxwyLMy-F@3&}?l zh+v6vd^Rlrt~31&v&jCKtevbYVx#cB1t16&&==&CeFdzl_#F}xOIcm#lS#a4G@IT6 z66OD~I}=zI@jE171%ru*iQ~yM6t4+5;X%l<1_2T>q}(e0EgF!JpUm*tT2_D^2x9m@ zL93wr_ZUtKS`!F;R*PUDxe5jnNEukc3G2V1Do`IkS%zEcyW9>yhV}okxLxhVk^GNMs=I!V#LD5c**9b5s;nt>DjC{3n&=yz&1*}@3^xlj`UFHZ$N{r@>^!_b z76SfVRz2f;5|1~Z;L!({Rv;o|*>QLLcWI8Qw`U~EOuez1O29w#K{5kb&3HfkM^s1i z{?nIm$v?BvxCxZE4XTciGk}K+e?)icM?g6JV)>)he51fIA$5qg{wGX7J}sRb!DCY} zJzashhW}?`*tq*ARA*;Xs!{$gjtW9j|HGDe_$O>KR{FZ;s=BAd^?b1KvH&DKZrH~s zy&fNLpB*QueSN!d2J?UjH6A z2jt|M8kAiBYg9jphgIIzi3NiS z?*F*G711A)oh+A}X&m2E(3kIm#X|xRL0E_4yj17^fXaq44W$D@?`L2($Vr45-G8(F zwT|-00nhl76(((ynTQSrB?H#|Q9%eq$Z#^nzdjY5`sotxIYz1*=&O?enE?XzQ20Ek zXRcOMS!LlI1LmFw10h(Q`OlN(-7Iq+@UzyJCKZ{F@c@kz1ANHu8*7RuWB&*xKNng4 z*YefQytGpAodn7rP*DHV@T1JZL*-=nzt+D?9$E3%#YM-HM0!aDjF$k81wcc>&Z?dX zdj$FG2Cn0U&*MN@@ z{1nHvj$wQ@{4HI3d&AR~u&DPTbDMztrUm!7La?0A1$(-4XHW#B9(~+AN)92tu-)%0 z=pzgMH0tS=#BMFe;sc$11I*VUgURm0lhNg@Y%O%nPr4ELxQBm-X6u9pEiVIq$sxSN zH{=xTANMSu-Xr%X@pTk{&tU=!0t5c@WO;XkN#aS)@vm|F{*bf6%S$_x8BPGST>k{U1jhSGRyk_O#V)9qLr<@(O*hExt$}MFJZ2LK3xdH zh2&3A@H5MMG3R95zqb4cT7!jU1}2vG{+ePP6@!1K6aW0LGxFSxJr4H-KzRxH2V_zG z?vp>GJz2apG6JD3;3vL-OBzDFTSe#R`K!wIKk}Vbe9O58KOYWAbAf=6h1X}#{*d@& z2^SBb-OPbwIN%-Mbdyki7SZ2h>*)a^tc8d4XhF9$Sd0VNh2>tJ1NatL_^W&GlyHfI z&LwFJVp<=VxY0qFrN8A|*kIS$$?C{byv9WbTKx9<@trbZU(Z4Y6Q$c$wg!JKmS&aG zbv$Ja@rWiD94Z(`z)5At#*r(l=f_u4kU6>eVoEx z@mJ7XuomK2Dl><6COD{Go>3A}Q`epbRd%R2pb>HiZCpb?3--uAPS)=>>a{RJfQA4% zJS_y`2F8CODp{MG*q=59%Qm>bei0=6>%gNSlQ~W7a{-^+UKM29>o-7KW8jZlEtmLY z*ju)S`X*p`{f~k4ufgxMk?Qy*7}{4(xekQS6@K>o+_ z_2akd{zBcQIS=aT`NZ){Q-2{l(4T>PdMrME8RsuRONKK5k8a93*#nMWw)G3}Gy8u4 z{rUS4Ml(isxqo z{re!EpO7aX#q+auS>7Axh5Y+qo?j}v{Ns#;;|E0iLax;RAC>)E>R*jLLjHAJ#4YKI WV2Fl-DguAr2tq;G8GuO+)c*msIU7&_ literal 0 HcmV?d00001 diff --git a/resource/WEB-INF/lib/pagehelper-5.0.0.jar b/resource/WEB-INF/lib/pagehelper-5.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..187266c88e16a5edcc1bfe59dd26ac34198ba202 GIT binary patch literal 64807 zcmb5V1ym$WlLd;qI}Gmb?(XjH?(Q;JV6?(ROgI}GkHz`(#`_ut*O-~Zk(+vjw5 zol_B&Sy_4GM#jxjlmP{U0s4<~NneBr^ z(7Sw{j{N$f{ckflA$cirF%?yMIq?U%=_y$mI{JBd89M6O>A5Cl#wC`$V`p0F*>PGK zI$^dI6I&w}7rQt)m_bIQP=jjinm!H3!@1G# zGUyyZSuph4oeCn7G-@(deA%#wdj-Q%;Fzs}L=X55{O0;MW2pTwB;P>4i9pCyWgBq| z* z!dQ3fZHvcx&@fjZI0@5m`4Ew`urdK6y7k&)AIhP;sGB2I6Dy--Q1{K^jouY(Sr}Oj z^^2s!3Zy#C&^C(gT>U#`p002oC;L8u{~I=c8;e6FF(KkFyl8ykpZ?z&3vnY8R|jXW zzYR%?x{eO22AW=&Y&s)EykiS`s5U8dyk>*76qpT+x{#z)H2l(r5mw^B#58Bd($pBk zsSd##!zt`bN?qE?NBM>y0#*_uxIWC0?#jB))zrF0Qs3w66(Z2;ovsk(PqeL(G@>n) zd_s~#8gQZMDb08%1EFw+zSKLxQ4#ujN)xF8651)vgoNWC9L(xwM`({m^dY=?1YwGM z52)ZhFY4k61$=gz0FEi7@KG2z<l>G9z>BQ!km~3i<+>4cxENw*2;^?9}+$M*U3M zw+N5VbxLc!CZ-{QXG=I-X8IOf$5?EmW`i;-dcB5zEIQ^gEnBC|a#u0P?#BUnGRK8V za_q+|9ij&xESZ>M-Nxk*uQ^VpUhpfYFoP z2WN_7V11}P+z8vosQQoxU{oldY};je4y~Z$_4DrdWJzNpc^n22dJh zMKmAhTG}gO*bq8@IyG3P<#Ki`9mHMZW)ikwT}0ErX(5`xl0m$ljdx#c*khSt@g{A; z%{Q@=1DFDo5}HIP@D~%Ov6f#W4->@u6vReXB#o!s)0Sbxcz#msFA|U!ez;u}$?^hi$8hEz(gHQYj-X zIUAK?I$94?q;czU8C9@{C*bz4CX6{S`F%1Ou+je_Q+kJTmB`AH8GPqgZ!mIahO-Io ziB7@_Km=!uRIt46NB5OhE}r%$W|dr%f2Z5guFH%F^6RVJfgqW*f6mkI;it=@O2y8${G>5mpF3g0Qh(0+i4u! zr4gfi-Z&DxPdj5vT--+p7&a(Yu@f%McwyMP?f}kJ6J?|p3X@)$q-Q@fzX-(@1XB#r z7U9`uF;_6!AM=D!>g)Iw+?I|m;t#doD@>vWw4;;+z=>xRXOvFPya3Lc(FiM$B-c)P zE$-x^YC{<4gnPWkOeC$X0k*~+@f9KdHoOM8RWAGZpC_*FG53^*rT4L%q}Xl4yLQ+H z-zU<&B-)V5i*P%oWZ$nBOpjwVXFg#68g2IUOa*Sfq7B6t|I+@8Xd~ffb1Nv=8z&=%HraV#1mhF&!+F#HB(zGPDw^WWn||$A%hhiXkF6(hMi&0>zuO-#-z5 z2<#=Ce>|VMs2YkFu)d9^O%0N>% z$_=6&5SNm*zXpF}@h5%Zr7=QyK*6{Lgj`5E?-gRs=Dj%xq-xhkqhI?i#(necJsYEg zcG$Q3xJ4kaZ`fLUQGSrVp|(8$7G`PeW|xYDY1mRVF~_EI}AoO(pkoDCFsJBFp`NG_`8Y%|-d+SpG=2Gy`4(i+Dqn4wUeBQmvp&bn#0I~T`gFek_HRYvMSs5 z&c4xon zT&oI$rddnv`T#nAA~nH+nZ6xfw=8nj*w+#hKA^reKekSDDVJn|oMV_9Lq0f?!xGH=qZG{g zgJsP8LnqAg2VTeq3Im0JE*erRzRABRtBh>HmxH~aNHB)v9+aJ34 z7$X?%890gwywBmeSC&E%2#JJ0$cE_)_Z$Ox3x~dc^*FB>q8Sn}ym;Xio?17Le*jPw zy_jsXgm)AAX}(=s)S|be?_h?By?|&*Q`m#Qtt9g1?T6l67j#`MA)q1>)l(SEk8&Wc zfjp)TQb61pAU@|;IUdZyDqk2p3d9FqF-ug*8zR(+&+vnfLp)D~25Z!=I~vaGdY`y= zkjyt2`8}Kx-vq4>^_-z|YgRe=f~@369Po+HIW$@%8K?U9gD%TIhzC#!qkb>3nnA-| z!W_;avGw`QDT(UBHAHohoRo&iaDeX!LdMIZ zfv?eSsmU%6>QLJ(-RHM(UZD8~Bs^C_Z(h^#ibCi1Be+^z(+rojwJUa%v;_>>*md=~ zbg%N68c!P;P&d#vXKWmy!te`LW8T!nCn8wIkPi?p&QMw>snfJN*yK~E_Uj4&RpnD^ zOX$KW%n@oeRq2jDC;mQ7lTC1_+yw^$LV*VYqWc$tQ^m^8(bnvLMb4D3$oZ9}eUQh? zLXk)+(yGz47Ve`Ew_uWmV}gMb=M#qatPx=kS|(=5ldE3+F}JB}{bj!SOuy?|!)~oN zHOBwgVe`}wkneY9a#8tbmXs7M=wK*&-C}NM_v07;TQ*nU$Mb_7P~4#p0lSInC^AFr z@4dnFXeWX#Ec78J2J&H_g|Nf)`+cz7yL~NQ3b?#9C*@IC{c>Y=I+Am-X-Ie$<8avH zYRpc=GDmGV=mM!oA~J{~7&*qOJ7QX_~%LWRK}Wj@z#~|T6Dz< zRjs)QVmVTESVJhh+uqV`KBUdy#AQodY{?BzqLxd{vNMftba=B?sMgf@I8AhX=!k8y zlI53d#+e}-;kgR{mIMekk%omRf0V zMEi^1>LkX2jR5cD&7(5SBqC9&v=m!scINl?C+4dC(o%6*NT`?2S}Ywv;0;%D%eh+R2ODWlIQ*jUKOsJKvk)vEQZ3JFs(OPiwZ^0L zWnqhNsgoOHBcOsPc&dRrQ$fph`;^;MT!~`qDP#~nQ|})fypBdkqc8tN7qev zhzEXi&>i%A+Z$5)W=CMZf6U%BPRm-URcdar6e6M{EGHq=N8L_1*vt@yyjTb**#M*< zJYBGe0~Z%hnEB@KiTD=pnfMm&spy)XxQ6$p-DL#LIZ64x3J)y4C<{UMD&Mm8D&1nW zj<;9u>0GMZ;z6tn(QLu$wvWgW8a?=R2@YmDQ;0!p+t05R0?((~fF3IdBW4N7jF5s& zVbdz1$05|&O-pE^YFbN1Szqt)wlzh$-!;Ct+R*3qBw5d%Vu`Wm(`S}5Siw9tp5^R8 z_my9fj!tmf4(s~<4Tr~YSk8}HZJQH0YGJ{wblK9Qd`ry8}@#S&<}~kD$G1$VVr7-7Lsewm>sF>VxChv-b0Wr!BHCE_<3s z4V6G2_vK{-dSFT&{Mg*~xE*o86WKW&2hY# z8b)vJdbdwc)jcVK6Z+?du8bUbK>t^^L&VV?m*|bKng!@<|cZ( zRY4RDz;0Q+albDM5mk2twrH^?YuC|ePsQAKvxSD)=QBlxQ3Ts*Rp;5ln>XxJ*mjTl z7(#XZh`~wc9Q%}nr$#nZQr4Vnh-q>^52DqCq-$Grhpge5AIh>JI2Q3lA>oa)Xh?$6 z8(x!3X8aW0=2UnE`L##xDB;Hdk~Wqd1pmRLrI{`V zvU8#YEwUCEumlP(sljlRN0v7gy)66}{-+%1eJ+)u*WHIG_ljeL%F*me@q0->8Fc!aOq1YrsVq z`y#g>FAk5bn}IA|HgfVWucP+=uKhNilWBiL_t)WAZ#n zWb9FGu>TXesY;X*bcoBD+3U}YU^iK(SYpsc z?nsH?XcqNwGgN2E^LC)*Y^akfRUq>%Z%7K_VjjJpSREs4R7%rwAfICR$CL%@1Votc zBrb@pYNBA-C(e|wnj;1j-~&z_)lh*tff_-^SE-a;(3gB2I0S(>wtB8_U`C;XGP z@B@7IC;!i132&}P6loiLl76gX?GcDHdZQ_iJ40%^G9=#ZvEPz&QtS^fM%or&>`h|h zJ(T-AKL4ix`?pGx?c!cq+*gWn_LZV={o4~y@;{5If0=$Y>f0`;YG|L^rb%|Kn{_}n zLdCvWt%69l38m^A!~|r5G9vRqyi9&abR0)IgE7vgeU7he&55iHZ)g z0T1o@M3GcP87q#+EW$K2t!c!cF9Ho&%Z}It%?BdW743xw)FQ6K)#=xiBAn|SQ~9!* z;Ilsxm}uU8YqAgBSH@E$QRXzgidb#dO4r_mNAwu+00Xi+)Mb&SU5ZmBmEs8ux5_D- z6+u?Xo;z|e$GEHP_t#cb{QFXiaNY@B3s-3CjJ68DYW5|wll*N*Y1QG{%#-dL5-uHo z0-QD_Q=+Ar+=x6xUU2;iq7rP``K0~PPD-`R_9mjuFjd5t#~E&uGgx#NrBY(7mr27; zEPsY#uR3~VXly-NSCfw-c;GHp7Sn6zMeDRk4@f=FFojGe7X@nc7rtx2Z&JFXZQ`eo ze^P@aBl$pw8{KriFgE{u={9?S-bm6Zp;qa;8i`nq_9{HcDo#rJB*ISUJ_(g$ZdMw9 z%|h$3r9dZOa@DY-Q2?mW9De=`U|30PAmwnWT9Tz;;6OFzow_N0%S10AJK-^0Yr@BZ zP%}+`XS(#}A~)NuO81ar?PM_~yYu%iDXyjf|3-6JWoAFx0-X#3%R?OQ*;FL#-0~>K z*C_4no43)A>q|j%A95jamE(AG@HLst`Vx0 zX|8}g?3r|i<6@`l#7viNP)ROB!$fnj@e~Rg-r|xl|C^;}LUo=7ncT4YZ$6f2RXuBAj8eOB?>{YLp&u~tBg9)*Y5!V}Ww`=KRZQ1FL_ z#;XGO!OV>_ngoSU^mj0`h=`Eb^()lfapW*QQ6aBYI6r+ApTxMvkJzfy;TDKT&+qt% zKMsMtdCTLjS0zNZKz_mHRN6ikd5)djqvy2#*lOxSu;Zl0uJ{vSDU5z>r6(`c1xKME z4||j-$Wq%;S{D`9g z`>}ESjbHfuDM|{CQb!ECuQZ-VnEi`hr%av^Zl22SwoUnfE7C7k@w;3&AMUSX#o#7* zwjW6T0QO2DV}dgRMEpEpY({kfUISKMd|FS>(ePLcPRge&EPpEauAZUqR6}6$<89}D z6#@4Ke@!o*FWuEnL4knwzf?rte>=)6J9r5Hr)>0>K;M$8=dh`YHTF5yaCmH|)2W1F znB3wcwdjstAKQ@JP_2huF;-e43ql%lm|MD&&AB#?!2;X1Y15sJ}uzKO>=vnRg11Svzd46F@LMC#MT(%vf~&u zmVJ8bD$|C1`=SFjU)799`{rS9!?7lPn@G_PjPP#bki-tAN4LKRjb;=W+dUGmn>Spy zvA6$by?1KQ5PX?gsJx+Twf@{$Ys_2oeT}(gX!lT;(TuM#UlZIa@qF+K>b^y^Q-5&( zU8ne9^-REYzANQcC`o-e8sAhKH}8=@7;4EHCXmP|!FMcrc{D_kK+az(!lTF2EibJn z4{C|1eb3KrtCfHIBE*{yjbPnnxZovUs zSp*uJs5NWAL!nZPaGji?M{!2K9LZC-sozDI3$xe}N96DQ1(cP@sRr&kJ)0-lMDp^J zHK~!LWMfd>sNeEF@(N6koMNTlrKYdLVr|mp9p5wXeRM@1LNx%3MYxHRoagk*B}j^8 zesTJ01w&T$Q$t2q(AEbd=~wVn@^PyqHKnW1cD>i(PW&D}d~PD^XGx;6V|l!)3x^pw zKG3PpQ_?Rqrw-{?9y}4BUAyxnK)-qE3a9MdVR>$u zgCWF08YpT`zD@2moHlli_7i4(o@G(K;A*pPdw7!Tj06m4=wdT78WZ}r0Pzj#n$VKG z0$)hIKls+?klyh)&dzGw72=T%s0}>9P0ITHu<7Iy#?QpkraGydWF9&pzm$c$6sjBx z>HdIAVI#PCg%^^c(G^%ii$zhvF&w6>wMe+*)RZ*-rch?-6W$JGPkQ~m>BnVO5{IKz z1BWaF-4Np9sfHqxn4ZWZqzdUJH`Q%^s|~kXtk$10LLiY?DKp$6nMs&TN<}6mJ>WGh zogT!cONix{k~GP7FiCZ8xxNyX$QjK@xk;uQ`^R6*ox5gaM6cMPwCdPZi_WI&$1_UA zd5aLIO5wE_1axJ3ek3!v*fm57&1ecLPeQ7=zjL`EzLgr7atfq#Ai}w1A#72JEq?qd zN-b`Bd4lXj(2?P1h%YNE5p70%l_wv&Zt8CnIDr%Zast^M<8PX`((G{?<$%|}iy&X3 z2J7wD0;S_CS7iH_5#+x#Yf)q7zl4qy)idQqMYIq4kkSxJMJ?JwakNtqQ4Eeq%d~pS z0@*0W4@W{dlW*kBY;sDw(w}G&7QR5c{b^3T9CZ1OF@K!q_;%M7`nCxAdi^08gE3LO z9TkSlLztpvEJeoS7}Jmi3Q@=zCsL>cRBN}=7-O)Zo6-+&L6H%~c#UuAG|i^;Of3;Z z+pt1ROAMJ^%W4`s^mpg7W=nJ1prMOt0QL@Nu_I3ylWs|M4TTB`iJb(_*H72~4pO+6phbOm44M6#yi2v2z;R|~df7-du1J*uJdgZ0>; zp~+v7smrmxs2e|9OKWI|G0b=m@o4wBM8Z%E6qEp*KgCE*NfS^CCNu{dqtUCG%Ri+s z0qapD2d|kIr+}`5fiWe%&)Voy`>f+ao%>Vy9H;`dS?@gkn#^O6p(AWjUb&Ja0sB+m zPDWSc5trKQ_Vr1hLX4D7LKO-wo8zF94WENnZTA`CvN+HDO*fW@RHMBcQ94BF0$p(_ zoMwHxQ~IZs&y)O&cl=MvSMqoJV@ox^0v3MaEg_B`p7&LV(F~~*wguJ1Xj6$Jq{}9Y z>!QVzK$6ok6?<+&pkPw$T9P%G59mP0{ue;&>O91T5C0{;a5`p?aDEZ+uDfD5yO^Nu zWCXBtge1a0Xp!2IxPj!nn5WzIpQeLu$35Q~F~rf<8D_bQnMGSr5Jv^QtL`K*q6e`Xt;L+91>r#2Ign4A z{1Eh|)Ta(FZn&$jUGUl=M-z2WK5Y&X^ROuL$lE;8iXyRtd6XY z>7JlVaEUJM(%o*jUmt-;H~axJ=p{a%ffq$YAmwnUXRq0<%E%mRmkJZ1GC7$o+G&dk zr@!A($T&^wF} z0TWG0KO5D?esWo?haxs|f0T%Fw}@8kq3Pu;FiMk>9iJbjL{c7O8&iy*v;!f;bv-}I zm_uE{F1{0j3)Re)FL|}6P;(U$GH7oftIJjQ7@cxuZbj!e-+CPoIk!mX@~{d$?;fo* z>fGOutWR-Cv9~^SzsFurQQZ)zYaD^y6%k;b_QVSyrY|9^6M8}TVf*Qb|LW)O+Qgjr zt?LM+XZj=#)HyF=uz*X?krW_Igp0Jh=f$NR)>d@!gr96hRvf?D$fX{3Lo!H2RxZs^ zESZn+X)a6Oo8N*EqaG+8?T>`I76;90EG&&@msg&!ibo#{v`%EqBs(PP2(NT6&M5Do z3&ND>f=e@On-j0`s49)35+jsFdPE(fpO)T_{)lYX(J9^1t@;dJOCo#p8`>`P1QUfC z0)oo-2VcRrfWNCp#A;6oK!0Vb8($#d{&ztlWpD1_Y-i>97ntOzUMMdLqJ6ZYDNBD> z?g%dwSG4R1%_>JjrX)-e=4l>$k!iKF3@)f30(S#w++jZ|IJu5O-e%yAHAw*D!4YxMWw5q6-i|ge@fszRW3)H#Xc(Z= z8&@k?r9bt7OS-G>sQT&Fr8rwomb(g*skA`LR^}oywPCFmjov0_qY==zS4jf*(QQrv zo#$=AcqDv>*E^>cjQL2+qLlB?beit!iYJ6c*dZ?yO@7^e*;&Fxwut!Vo#>XjVf7{-(k{*Q<9-X3_52 zbCktArLL~CFjB8GH|?MqlIR3l1BaIulEO%G$Yl<08!N3qH;P$gB{s@ih=O5CYn;lN zU#xB{CDBE?9~x~oOxm5?5Y!&62Aq&wvgS=)qbMic*Vvq^sU}RiL}NtO)1K*@l-d9Q z8yfy(3^aPTZtIxNwY#hCxhz-c2C?WWRfnrdZ-Yh1F>x&_NH=uDV@PQ>jx{<3iOsQ? zILq1U%!Y=8AJ*?=nbPM#3};I|kCdb|V~jyLWI4`jQ=j zI-y^XaG^qYj($OTzQ2nkZttLh5NM7m=Avg%LL5_L6p=}i4X$IGVN;g|(u*wk5~r9# zLBxta*bj*jfFq(2_mc@4X!e%aD67{VzVdW?MgjOsV^GWsp2 zOo3s&$e&K~Ff)w+=gS38Z%ZIVNgc#FhPy}pOCrxYmXTh8zp@bQ>cN4v(?NFTpQ!t z8`Yn{-W5z+>r#Rr4%V4FO^Vh#>IKsx9SW23v^0==qiJ7D2HEN!ENv}@7e0oT=P?77Px zuz;osSazZUTd|X07#_4lZGsbYT5N!fYW?+P*(thZSnZT7@rn8>KoL5f{kP7lmfp?nBopX<=rFvkOy4)h4 zkyf@s%pccFQ$g!S^2AVi6)9ryp<6F4Y*Sz*Pr!VXOg=uWPC(|A}0NhHTfjBgJ)_-z-Xqc(uR!&y35=P2D_LhBZNI_EU%Q-O_haU+TMuwmLD z`{TL#--Tt4_#~%=bs;aW{a_ZSa0$ipGhZ1YC(zqv1;ae{ZNJjvd<8rFm$cs*VS{DM zjY^A*u+%&7?A!<(ps-p6D(RxENnByavm>|%3NfTCiD9fsOt>ca_DiBTHV_yXr4W}x z25K48l{G)oqW%?52Hw@bu-U(E2@M@8T1nwhRU2&;iNq?1-^r;sp`SW&Tq$oeT{y7X zLyBZ0(=K(#TBdst>t4HN9|mBBbl{e9@JiJhdl9bKMH13F^o+{FES_ZQKa{mTv-?+o z#CT)5k$*7|7R3J{O;h-iV{Fa-4k4S$s6t45px@X-)PzNu!W)CqNOduQ(cufBfQdU4 zp@r|jl1ydQS4r*J%MtnS2>gS4MP;hqf%+yIFW12oJ2bC{rhlC+ZZGm}Km0jKa{wYw zxG#X@Pz&*eA~_KGChm(hl8$+(%vj90KSIYqUc!4k#A^TM2>O$wI~Vs)aLYZad}xD4u_a7D!n7ABsoK(xtGwF!<;Wv~IxM0@WSC^O|N za#ugQ(`0+YvvtT zd;>Mj5#-eF^LuK!4A4W$>#zY!umI%_qU~x3pMRFvr+} z8?Z8Jb2i@o>|#FEJINv5)7(Gnn#8U3wGxjdvfLG6uJCaU`9@0AL*6o7xw@PBSq8B& z65>y?-Yie7RBcx;2fgU%(uf2<9%oWC$y?{L{r0$HDl`|qHin@)!7J2DYsJq1t9fUU zn1e_GCO#dA02PZdKV8_u;Ih#%`RngL^%yfjWRj!gCvt)~TZAd;!wNo+?uSD%QYC@-m&az)g-FT)FMsoc_Z+!Fjp9rqOu zF@mQb16rtZdiCiX!xFha-_900PMj6Z$hzgt`c!)gOdw!2_RBD({Ot@I8LY0zCh~LU zuOoax-cBp$7B}{TMA`+bR!H*^F|Ep|gaQ`R^#X-C>z~o>bV%Tv-*zv3gPaYp?fM_^ z^@PZN%zy8cDr}>2mu4!D#x3M7=q0BPgy>`+JDRhwgwM9(PRwqC#GT_GTRZ|wf#?+Y z!L+emG*^(d@-6vBj@ub3I6R&;$SHcCy{0MoftWmgkj~Z!hUf7yRnlbf;thetesXc9 zS(|FAPX^0zsy=M0U05tJAovGWDFIvMHByRk`VV?a0mkx!jrDOxY+Vl;??cSLVs9bh z{^S0OoL0WbN#Nflr!Q(!F>`h|b7p2_`fI%*NA+(IL`}7Ynxb=N3h&GpBn&yG=TL%< z024M&K$A>Cv`=Kx(oJl)t$#Fmhwy_=ReuHcPcmC?g3foQnGv~heLlP9VzIdYPXLz2 z-xh)nF@xww8!o|O1`S4gArH1gW;&Adraz*%Z$x2FM^0x$BJ!qVPJm-aF{ff}O^MIf zYhdAkknq4Mw%KSR@`jDBlu3jcesdwwX?{M^ zo!UrOl-^g}Rjw78R^45i_GBAqBQD++BSLqpg9T2v5Bxy#L7fJW@iiMix7NHPztd6a%=PXpOwB?sf~(k7sx~z8T8E=P8@Pra z7UqEv*fT!rF6fLl28C%N*Gs_QA4Wv0fgAl;_E|Dz&5SHoLpC6hE8m>hPNpU)B#bO$ zUO^wOFECWeM`y#43R_(kJ@V2nxmxa@5cO3M!qtI;{j7litOr!_)!2Myu{SV!F*#u3 znvI?6gEA30w&~M97{?O11}@Cn9ABDyGpvG&uvn$r&o;KnI7soZo=3{#SyX7w|MV(= zewE~);eCxPc$+)m4w_uLa1}qIKF+pZ^zZbiNSnTlN+Vz6$m?c13yIp%W^xfJl4*Kyw*g&Mud7H%cIrpBLz|Ov^=&!Nr;E?1++z)Yg4h=PEn~> znCN^(7x;^`O3OFN;BVP8vjw4-giN@FatMbAAk8=fVB$=1ggwzn?2NH?#&1D|T(X5B zR$*JRF@ibSn%ly8BJDw&OB2V{*TN-QS9`9cprXI=#j^H(2i8Zw2?Zf?Q*b=~-Ns$( zGZjYrFB&^X00QFqKf~!SY?h<(>hUG-e&}bK54x^d>%`=z3KPlc6j4&sfsomT{!mwr zB!pRXm4r-`O_vpP+*KL|*VuYK=HQcnp&vU`@Qw{YrQh{I&4gLRu=O#&?sB>Ddw$#L z@hA=W__J6Cq<)}-hle#^uOk6P;(|2xN9i)*xrZCSpP!0v?R!|g!B8NjEFQOb33HVR zoH`oh@lbZG(;7Fzetj%2jI&muwy$iE@t)(~mD#~fz zwu#*Dc&{bdpEJhv8F#u}=@&i9O{q>Nzt7;F?AD7L=RKYg9q_PZ5ldTPS@q9IkhDxN z?HpQ1iVxu#^eQVPq~KFM<3w{#b1sg8b?pRFI84$!8gTRTJEtZ0t1@KqV2 z_v~QHaxflXk;s!-IX=d3G51&5rcAY}$X>g~QjIys&nFM9+2h?@K@~Eq5@P180tpdv zYs;w_t}g=}Ow^;z1RZPD#+~+!X^TyOxG)qTTlP`^kR_*42)YH^FfaR#u9E5{k)kh@ zE@QbqBw8^Uj5iB%1dOP6UfbX)hzFS#`}o>-f|Tk6hB1fMx$y{dxy9__ipT$88|6Dv zX{FA~lUL1mn)0V0trV*jY;z)9;+}d;b%%CQagGz6!^W=FY?0Mq2eNIF65_f)2Sjg` zIRK9I2UUH3l^VNm%`*H}Yzj^;^DS#G(~nSl_&FR;gt^5R=RvUAxUtoBys`GPUT0&2 z?$e{3%Y8pQJP7@MDNu$3GWasM?&w9)73!->_GVA;I&06F{tM2ceRxoZ13GwzZ=R4h zIGj-|5cVQ%fzP-67G`!A%_`GUhloeVBA^8OCZNGs3%3!03QpQX77+Ynm>^G(GrsH0 zwvayzmmTISo0UsR`gTnmlqXcM`p|NB{Rg_t7xfk< zOo0CTmz0=oxaf=sY{JC!RKj*p{0On?ED9uX|0IF zil8%jFJM|kNq)xVPUTRz8Yn}`?<}oXF^h2^pJc-m$KJSrbG|i(`g)AgzEdr(jC%K_ zX^rZEVB2@k&!y%{jOi-3)`$_1isaE3kUd-|?pkeq!>`Y1PEmxM6gh;h%?ViOmP*8Soxp`{DkId#4$h`df zdy=cdar62q(Ac&L#YFiTp{M4wVrGKaln>o`rF#9ajcbHMAAR~>1r>#a?SGn7=VLznH$Yu#mtZ`EyQWK~Uh5m+XG^9l4^iU{kB0E%Z{J>cnSqNWiWoUc|G$&sGu!Zh%=A#T6bsB12y zJ@@*Fm2+8+8be?35Ue)IIEev8)8&MeX=O3 zpZrT&<@mixo7rz{wH1=(tEVETVd6j*hcvt>NJ=+6KYN5K+naUvOelASz|8R-6e~#L zh+-no^iG~&fi$WNjY3$;>UT&otKjH4)g8$Y_tqxM8*5$eK(iYor^2d+o(GWBJdxxB7z5i6oQ9BcKBOeX-aOHDb-oAh zEro8MdMuxYpiht5!C>CAu<)nv!pr9;j1kmw!#o)ULRE0cA!tEdUt0&Mi7kH?87&iZ zeSrTpD-6J_UuXGRk+FSInb5zavH$mF$1nNm|6jr`QMGef&_wgEg$FZP!VoiCU4B7m zX4UrSvT2}BZWgmT6QnzQ86bCrJu8ML7xMUA{tce9o$&|wEz2Eu4qjCws)l9oDAz~- zhU zU$1HB<>Nhu(B&s{lYzH$EFbsgy~&QZ1LL;qW9Q}9hIeXaQ+wS*FDC0%PRB@zhi@OR zb67G|pH^|5Stq;Av>m$x<+pi-R++myKa;zD?!4VP{R83gJ7nNh$L}%6!)R^fCejs( z_c-BShNhJ~NM+<>6|rw`1K9SyDhP0m<#`Au?cT1!a1n&8f8s$H>tVJbJT{Sw6xB<5 zubMmN;`!sZB+0y2Z-4toF>D_2(?_4(RNtyGg%(E#MZRgO-T_6yo%Eroj*6hig{-4R z!if)+Q)*dq17sc{;$}g~Ai!WCru;8naxC`u!l@IFa4lAJPUDEF}lT)^W$7oZ` zL(A!w=ta+J72J3)6?{`-=Meb2Dm~lHQozrzb=t_+I!*NdfXKh8S^o%>SN~D3=i7u( zmPRW7uC7R9kUB?5Of7b#6DfxKr429Gbu|yfCzFQWnfXHeQNhi*1NOzr>v!tT!ceT} zkA7|FdcN-Pxasg|-1YbWfHB0aGGZ-K5DUO+Lq;U|4$K7yU<%ns5-(=L0mL>iUK{Fm z-T)Yhwx3mHE8FK31^(le(;=j2L|bM`Sa*3w)-pI5UYaZOkfs3^axY>ko~aqRYpjJ@ zZuC0CcDSaB>Yl0-_&UYOQ?Xo3a3hS+q7yj#$m%klUqYkwT3i|iPS4Z2KSTW(Z#JXQ z1%rsPF?U=dWp6Uzy6%<`c27DdYPxfO;SNnwD7Pl9dL>xE3Ue@TvFL82*V?S5`e)Z- zP+ok4b@rv+A%l>&AV06=WmC4P8sL(i{ozr7gQdC-!W~`k_8t_@ox^XyJe}=`Rah2T zZjW3~b#-^S$)^9yCPiJY?ejj&9jc@50P6aJvnLbK_ z&Vqw)5_vkTJkfF_F579LHf@zY78EH4FQd6~D{3s<@N|6qmAPpYM`js1aAP7Dc)yBX8g& zL@8KOlE_w#!ie*Xvf>-z(4?0ui!VZQQ=VdSM2h1a4jX@u#2$wC#(86kW{M^hivDTU zBJJ=KqNlNrX+J5w98H^yNJB~YAp+X9Fv@aj*=-WNxSPQVm5JCRsv92aT~Jue198CT z9pUK%oWf=K?gXv)@L)r5tG$f7#>(S(H{ z#EOD6q3)KUcS-u2MewCka>_ptKhOh${VQT;UqIjGVh{B}3Nc2oANGH_Kd<*}&$v7v zZ;s6Yk;lgn1KNW`(T1=hh(qR~MvJ@gLu0=oN6VNIM`oo*A7GRgzq*5Y5VwCDXm*{Y zOjmP^E3jLshjWN6Aj@4dg`&7hG(464ma18&0XsPH5G0kVxk2yjlEed8dX6!wGj4~A zIxEy$o&so8U_Rn7L`5>%49?3yaEQ$>;`!7WuGS=0l~vnqR^TvjT=t0VHlhidV-=e1 zn^Cbp51N*bF7o)MU68j;de6GRRq-aZ<}}XQbZa7aD(!u}^jzzxH`Mw_a25-K?ng$o zs&;2hKA)YD>2X}qP^5b`E949)2&fDcN)X8(!h(op2-hxK#Jm7#p&*DDs35=5gXB(o zb-(z=tiHdZf>N?utmYJIG97)MelGgfO=VNd7iASZBfg@4Z8MJZg4W5$cb+;sHq}>Y z2rmvIL!U~g=(X%vR$XbUrS!}{AX0|Guh10J9?1-$+>o{=Nn0)FwA0jCAFsA@Qr>6@ zNj1=);-9I~lmHlg1ZWL0K0Twsg0H%G&f6ed{`P}f%Al%l)VOmHj%>$Mn1G!hwP7<# z`6@K#o3f-Kd@k<^D24)rtLJPTx`M1b1t~tr_A5j*ChtYH62;b!&Gk%Mv1i|Ly5sU0 zuQ)-Jd6GMZy(Rtct7^6OiZlu{1s2!@EMJIK}3Y-h~Ylotl5e zmnNB#>V)kE_dIM{SlT_rX#9|=!U1x`@FT^Z-S7P}wAb;cgI( zfwgU_f>8#KtlX9{MX=D+?pSGzK{i+;oTH2~Ipj{k*F&86i#C7YlFEOO*qXrjv|n*> zW3x8xmT&0^_U*pg=oZ@&1(eOx>YPSXLoiB$whOPghxAUS`B=v9Y5bwme?#~y0_BRq z*bcv#Z03u}ME(y5{7*&fAHh%O3w~%H7{V&n?P`LN@OK>V0NC=zV6_8Q%U@^}nMHB8Mx-ir%9? zKwdJGq#r_#He`)v>WGsOMKmD}@=1?2gjqz%P-3b&;1{vnX_gB}C}8Jrp2@G~)EfAa z%xrg8s5%bi5oJLuTu3#xx5DlrS3wXQna9BgC`sN&d(1vNk-_d6cOhn|E_8gVo}e>& z>Ab)-%}&gDdVJjf$#aq7Qjc3+h3*qXl!*Ev14Bw9LX^94_@>*|p0mi|x7zFyk$m{m zRsTp_|I{4tR$AsW_#ivB5>Qt4(-dqnQa3MZX!ytL^il_fLX0}gau>w}Hbku|XfQQ} zU>MV*zCKcmd>KQUEDen=V6B5VR_a?1B%PB)q zghd<6{+*;F5)udBSiX~tb=pK|q!2(ht;DfiVanaHT(h6x`u}kDPSKTxX}54y>{M)2 zyrUhP728I|){dQuZQEAGwr$%^#ZKy^|L&Xaar*nuIb*E7#(S~v-t~CS`J@aPLa~(@ zX!OCUs#KV(51}E-#TuzU0SOt#b@Bgl>^;-7zuo#y__&DnHwI+h-hQnqWg*W>ctg52 zP*~Oos-Y(1o{E|~dDPjt2?h4=MQ-TG$;;@+DVg+;)r2E;5xb0)0?c1YC{uGT9m>hr zoN-pCpol!=)gO(|^PHsyXdgrIt$iBXVprn3GBd=MU1XsaajS1!a-bvchKH-6q-R4G zsm!@Pr^~H7q`&2SpSdb?znqKFRB8@VW0WfCqEHJe6 zSEMWzAeQAtR50&rmZ?4<7Ci~X7xR13>VufQGrNp2g_@(%qcF2KT9W`42Ucw|4SG^Uo+2^BKkdZ?eIE z4$c0n5jo6>qJJa}$Dv3{Xd}qLRyMD-ltPG`XB6!3l0k7Jfx?RAjOc8w6g2F~aaNQ0 zuDM_ERolbmcq36S5N)w?SrbO>|)8mv(B) zu^3Nsmfl0d+Gt9$`$A~Bwai#}q$+?LDzC*d@1N&-ymAvk2+?G5d z7TV22XC-ynNHJNnKoSIkt-7dQMCMvU6P?-D-AC;QS0ifPgyN#0QdubfZ3H!b05p_L z~QjWZZhuR7OADd$0JT_HhWAe`dbduB< zsNEV768zEbr_hW5EVrZFzJn2Uer1d?P8$MEHndPsATqRiWgv>1=nw(W2aE|u8sg?= zN1rOsb^W+Do(#Z67Yt$e$2l`+8?G9K)qIi(k~4$awh5L1p-u>DpQH9CsZrb;e-5Ef zCADj;nRvIkT=N>rflyGLE%zhc@WdN-Ghk1)ZIZNC?`0xltYOIh)L3F4iJ$&;?s zrP9mNQpL^s?CX8MMo!2sZWE7qcfP_u%}Z1L=r4t3Ep&>lC_>{sEHI*&Kk>DSGjf+p zl63@?aiz<)|C$*naZFwXzGxN}tGKViHiXalC=il@F4IA|IAz~ye!5V5;Vv=wbH3Op z_HeG}e9auf1R1aYz-R&qAh&fB)E`^_(L?dk15|mnsr~G7ZsCp|X(pPo`?@9Hw126U z;@BvuivZD3_W^=qirmtg3PnScGFY8Eih#V!@XNyhO>X-sCr zjZ1?ZO#TNP%jsWmEQh&WQOHb2ew$A`R-0+tR!er5_Y;I3+!GFyJ~UBAw|FXBR%n5V8q}Yqk#=ryxRW2caYA z;OgG4t-nL2&M2P3yxDlp+sr*FMoSVh=&-adH2^>`O%yxNX` zoYkgfFI2pHHjwNb>%qOAo|claYUh$na&M0&wnC*s$U_VrV7M%cH#I?^)Fe|}h6O%l zUv?XGrs7m*lVqvgBx$1e+&bm8Wl!+l*5;gJPiEBb9^I8jwD~8MYdgGT#JPyxc8asF zuxr#;5HmAJ55Yf}Qn*m*u5h}RX5CQyLMqRgM9+nhVGMYget(P_0`Ay&9Hg6iL<<7= zL$f`X*;SB)8X|!Ez>s`KM!I#(-`v!f1`305VF)13SIKXc!kB;%1}D)!3qS{Vk9Ls!n*132i742?MGeqJKu}9EwqZM zLox1r-pMf9)|?w78K_S8NH$Qv9Z~2}>1=2L@g343#EJzXu#zrYN!FBV_bXEL2g5<; zFEvP)eS$e8H~sM3ze{~|5TEBg(go~A8WRCWu4{+Lz*z^zk~~=0(b?aPbdpRc%^rx{ zSvJg?&A<5EtNXFQ(bn_tIV8B=ao)MbHhnuH$0^Ms#YVs1&6Tlz#qO4PnKRl}zGVm( zBH{h!Eqp#=22S9`JGCj;3MeFt<06V={pJ(tC@DGmLt5g;jDVl>2z@RNR@kFFF2@h< zhR}5>cEZ&OM{-OdX_bvJDD5@0=$2s>vYH6joK8|1%?LjIEh9FLNM`q;%TnW6C zekJ!Pnr0|0W(CmP1eoSP=!SVlC>#CpSmz|Hb6~_vY51YOVAsyyHzDV5Q#pX<`Nqg?9roU=@|C zm_MY<&7?+?^!(?kOVTIEHCk6>T-X`BXNmTZr*WjXPdWC~d=lI*ZD5p>nn2?Sk69k} zmkwD+Ssrpvx79zrq3ysCagG=P`jVp16m8e^_5kVd=TBr-io{M=;OxS}nV zL>Vz3tMO|?$h2?|{2uEfonjh#ilNM}m&Y1l#^Uosr_X-vJmAty*VT@}p}#TE-rhQ#1r4n# z6g!M$34jTet>=x}9dP)SNGiMJPl8{Hgl*D;q{xMun(~8oPHTkGaFmq&_8B7xy&xPt zJbSc?Q0XtU7h7BZ>U~U+B4sV zmkLS`HXKiS?`9s?`#U(3U(Mh|)XIrVnbU$MeTRiBX3k1f<(oTh`Fp(j*!2T9vpQxN!Lj4VP4TxKrpOL-Xiotu z>X(=S3{Aj{to8tF8je?aqr6X!S?FPCjkUPa$j-h1^(}MU+Hsa-+;`;o71Fm}?wo*+ zo&D$wE1}~&1tClCE!7<$ecyg?6ylr(_yJWmnbn`S7-KZeH}A&*%oYa^`p>a(opmg-DFhlo)5 z6GCeolstcgvpxu>s=5^l%rbKlK(TKT`tI|LU9m4Jc5lI3Wwh_$`a%CVH3Xw1->U zYS&3F>^cWKl#K9BIY}Qt?`R!9NO`Rj@!7tm+Ot{_CUO0;A=D*ndYEo&^00S%Pw*v5 z4+y_Nd(I@D?t#PDt*LbKD_s1^YrmGXg2j_6Pdp0DTOwqm5d$-rqgK~}m=F>fvZaa( z{O-hXW0Bs`f8aiZhLzPk zKd&q5^Y`DcO+v}|AL69{RFB}kw_W0cf`TH2l68i1c7{R{g^Ege+n&#u-$xaNGC`bR z5QVDRew)qPS8f{5P!@$ElnW`)RW;BcA@#Si_pb7GH<1uEkMkBZaJLY(kQKCu?W7!s z_!`6Xp3&d#==HaNHs>22DL5%O8aNC??H6l3y{|Rc>b_)X;CTNrTlirl7I*onMj-ns zEXwd-zqx;kl71?a3OYI3{@Vwbscx>Pynyj>X%zRE(k{SM(L;AWLZ%NPNES*(rU&-< zP+bCb?G~!iS~DcUFor=_8_0#6ndoKbe(g*d8o9L45=L) ziP1;&S>D{Xw%-T6y{Y%4(@XcuX+HtHi?)xby?1)i+sTbP>Eyft{9TIImYg4=1GX4% zvIBoq-g*L0T*Xj{9CN>TwHy!SYU2;aYQLfQ#MSZBxT>MHAN9UIbq98BSJQijbV(fg zBm+N!-`kG&d!>9I&jUws+hq!_|*F$7;uaJljdV|nBT*K~te zfs#Td>te1Fv3!**x5V3Fa<%B8Ue+X*uOOV~7r&hn1p=hNr@;sD=8cekFi~Ya>9m-G z5wDx!a4|nNc%>yNeqFqu%@b>=Aq|7+9T)E5GZqjdla^hp++Ccw;m4iol`YnFYzt0M zeVtBVSuC)fcEecF!V&W0G|2gzqW-rbgkf|CaW2YTC@h+H*q}5oNk7PSww|!Xklfc1 zHDtI584tD9uOoO&*~*zWbq-}O6UZ2fSHIuYCn(#h~uz~e65Q&N^Vt69S-hNV!l=Plw&9-ORYX)Q(x#d{N8F?tTo`OQr z1sn%ep#f`{ujyVir1gjMyJ#Er`~7rZ2eQBPWnQ~h4k)0Qe(MiGK@4IiyJ9Al(;FQM zVH%;H5Z^Blw9T)r3dHjg^`QNR6f0O|o*sa!W~!IWsVs-lf--a8<10rsoKuyPmOu9p zk9#Y9TdZRmmmC^pESNEJ+JhjATpTOI?OL&9b*EU=BpQ7pv*X%tYSb7=;1^eavRilp zrt`7CAbiN>OD@!BTGTQFU}O5DAU7h6Vp^m3>CsWphUMM$!EO%a(4mS$TE{51EpeVe zCyHn%0}7;#JajZznA!b{2%S5zu2h(2Qi0W)2k@(@{l>n(sfdNF=5wC1=`}2xG4WU- zeyjFzRTzgDNw+SHm{$^7AMCLP{1(k|Edgi>aWBrn;5ZZoVejISgjg&G+L{~0rBs9h z49dDWi@%gp6pgUssON_m$Rxl-lSr~EP>kYKr=`%hr*UX8O%a`2J2v)c!SDL!Y~_H2 z11U^GQqwrZ#%KGjKvfin!z*qERr3vgC@fUkEDE7(=n93Qw~&#HfLo;kl{i^ChCka% z9l_4$)NyNzu}ce=|4!__%2O{1Yj5$#3WSI2W9?sxxn)bkS1n z<3M=n8_nV!QTCa^4(o~L|4$Fz?b4>>$q}*H~x`;b@ z?(nQUVH*gXGPI~zj9*w4Xim{<)X}8Ka-?b)cc}agb#<#v1I+RSX_flzWwdE=F=h%v zF$@ZWJV4oZb&+Z6Y=k; z?}j6rP!!f$UK)RH`G_q+AhPR+3v7gryRQ1IU3OA-{m_27Y+EpJH@e*j_GnthUPjU| zsyW?iEVO;xFv1p24+8E=r8Ns{kG_?JE-dHO0Mm;@##ljtcS-GE@k6T5cW|KtTOCC9 zMg!BD6?Lh^1M>*-rJE~-r?+SsZvO_yc2uyI#;+4pG8?;KM-6JK?=CXinl@Q84dDnG zsCAVBG!)gD*Nlcp5=XvA|Dv7b)E}&pmJw32O_j(rN;$AC^4|QeQ)!-+IvVXeon}`+ zCxD#FS}^9s<`vh+z(;H$%r;!l;2};6BOLGceS{P^VtBa1{1nxa9TDB0u%9>qvCtlB z>~uV_^=rSW!maYa5P(${j)TIBc?d3MT*ebh%kVpGwcp?J>Q_QfJyGZ4>9b^zwywFA zs<27m9sTg^YK5-`-HoF%Xe4y#t~O+5@F5}w`Dvin-)XRj!mWlFG{du}dho>{UKEiG z1&8?;k8gq%yw<&$e+{Ea^o(qo5R+q24I`oN($mxk2<1+haVz(< zZ_?JP_S6_r^j4P9h?rUOPqp#qbA!*m$8ToJANWPLv<7NGLC##EM0|Up!3L*XGihXr zt+8TT<+EHns&3i7%eod7TjBh9=9TcQ^I*r>pEBe(WOXb)MClA;IgPU~f=agijyOO1jf@CKKBaa*hlAMGqGQpq-A#}Qzn>RM14m3V}c+@Yn_!qHub+6q` z7mA25PfcoWr8LU>6iyhgmvPM;UU473SN~(4?3-pAVJPm1ac2!*6?DE6U9Me!j6yK% zRS&X2pcGr-H?y5lU)7JAYqq1a^VmvX&Y;=j-Z#TXtH~A8bW*&-{b#6s`$@j6Etz%L z@8QhbR&vMzLoLWi&m%YZzZ{&9YahP{D+MY!5e0!xcUfGB>Uk-em^GoecxfQ;oy${jI#!e)Ld>wFOXD3@U5uhv6C4)DMiTm}ranE;(EV7`A(UVA=Us z{vZ`A-Bd5_b&x-pCJ%Hb{fmR{NG^hO1fwk!%k^_#%40=cYyO_1GA5m!VuyF>uv(L6 z1F)=JlvQbjEpAw}I*wl(Tkm#GqD48h`bTfyI|6k%dIs#?_?1yK2b`G`hvo`lkTro& z;QIyhrk5tWEbu6s^JEZbgJbTR)hOA;iO@&G5wVw1yx6kOv-Jn7jwwo}*r}3m8f;2P zW%G)syEW>J=6WwLyaJ+z7^8MiW!;BRCc#Y;M3>^(uNEi@rL$R^j0PeRBnxh)mW=J3 zNwhY}?Cydd1|KL=sxw+H$Y)}zaUyyxtU)@F!faBP!wIfY= zcQa1LmrgWd9VDWCeBLv@X}`%|+#c?ZF}F8_Cvl0cG_a?c|j;fBi zlvUgmJld3a>OI(m;LUW4)35+dK%PQNw>Q2f+UPKb2H za04icDg10Ds-q>!qD_6@2%Vn|bnS@6|g&mx@;J%=-OQ}c(YZHIR7ps8h^-A6Zh zoQ(@axJJzo3(Z%siFTm6@I1_LuNq@q($-q0C&}yfFK`dhI7u(?O2H@0)#8`r^B6v1 z+-(kS;tGAF-}Fq$AQVKL!gA=!IvV4U9Oo5w;%YhXUXp&alHOelsowMM-1I$g?M|Sm z$$-4aE~0*d+R@C}{tn6@!}Q$RuL}5+%LSQ9)Po4NXg+&&N$)u(YEOAkvR|Jpt1=Tg zYNNd1G3svT4L&mhXfiDA)=i03CZ1dTZ8I)a%;EJ#Byf(TC1-j?B?}WBD@{-kZM@nJ zlPkN)1uLa3@J7}N*@C)OMmKQfwT1yc8GV)>)`n9DL(-t?PVt`U$CAXo+8pQp@<^}~ z64S(-=hbtlNkR#VenN3gMkp~gX*5uS^UHujJM7K9qsL?aeMZEpj zBJ(siTE4TBcI3HGjtK`u z17=Y}CuFJ!JO%{f`A%^o`ODU8;x)HYmZcsF?DSG^itA`UQgSA0?_|N|Ee@gd7aN@d z1_W)S&inZTMRpj`v|$&-Iid{^b~u9UnXw!r@MXm=Bp2I|C%)tkAm{j|f>v~yciNKM zfQ{>-^tf|aGAH2}mx-kVWp@MQC*e{X&eBKYR%QsbXE30Gc~pM7L~#e`wgO3 zVhb2Ddun;oG2XQ?Q#rLK3jI~Sg-aT^^1ar$otM(hUpvYeJDS-V{YySk#o7T??XzEM3qNKdoz|c9lw^h;f+9mx z={Jv!Cc;<%IftqhkEo%~+|4u=C(Hdl{qWb3;xh?tI=QRkFPn4tLm%*s_+iY8(_`|p zS-S4<$NTB=V(ZIc&M0=z#+M*QpdrlT({JJ(zHBUGCLrYX7i44C*uy?j8;|i|ge|_< znuv-3j7uN2UUt+@;~3_Zz~}Lo(KmmQpt)3QC$UJCc}+kPFg>j`kul7Iyyx5SNnx4= zt4!pMiEXt}k(sg~`35yRyP;DtOgU-G-WWi7i`m@>%M`HmQ8BcE_p!)>SI>gg?cM@tlpD5#>ANBP^2{9LYz0x zG5L~rt_04AQxzK6es=CO~I;TT8Wqn!EXm<{Bak3G{pm92xm7#V}b zaC|)_e)uYjZ+%ehwD>t$F+|*Z z8ekXkpT00>oK}79;M!&RM0y89G)ujmQEiM7CO)KUE-dF7WDvM!mV{`DdPw|o>)S0j z>DWtFte>I&$y0|FyJ;pPRSm=F{83zQj7`51*!w^T@c&j>J9u)RgPCT$)$XkFlf$t7b}xP zqW@X9(f@qjg^EMuYcgm6cKMfJlk#4log?Ex!P8dbBQ#;zpAjvATV=5 zul1-O*eF?1r$ZtP!UP(P#zCrIPv14fRC`A#0x4V@H>yStxpLeh4H_}Ev7imkI=+87 z!taL4{1tq-<8p=h1I_f|J8-H~)Xupn{M})#7B8Wtgsul zZY|Py0AIT-Y=au>N@OhARC^&b+G$1eS|+8@UU{w-wofLco%-0JZ5Lb%IVGG#mUT>5 zBZ1f*|8KvtCd)VWGO?|#M|I?1(u1;ss99N0t?(9E(4HhMi z(DSFSDgWHT@_*oK}-feMw^Z9E_HSI4L0rkw9X3NvUvi zMUMu6U%X?Qbh^>*c!75NFFC$8ZJsA^?e;t=spM8qW4gcLf4dKExZ|hoVUvT;>!$c# z&+8tWfS-$4Uf+RVim$9;#OzAZf*DChj3q?LapLzSVfIpv`&B$ENYHk<01|8gvioGI za64$yQZ^I;8snuY$!eGd`$`g+XnUHgI(J>B?^;{|@Xd-_|x+}0zJM}#*Cpdaae$Hp(G3BL#XduBHX2#1p ztBR@JD-%XBR3r1!C)J$+g-iDaE8?k;8?2cLh8$7m3yO1cV6sEHHz_P*SP<4O{KoEg zsxu{REIoC0IxqUoK^va(qW6AiV3}ISaCcp?a>Ab)TTWLClTH)O?jUQ$YLBNHKXt+c zrXHn65#A-1ClfjNv>;1W#WiU2)NJ{8z<}4qeHNnSV8euFXzz5y!te0G6aX{UrtBDO zX}SJ41w=8BbRS6Kh3q8R=*y5YItzMDMep=)zd5iDV6>7DtTAE{nZJ6Xk&K9l5C$tE z<|%dOw4VRhbMtsgM0#A@MUYY-orKL8o(qd-Xf=yxq^)|LE+GM;3n&`kp1+H>eD7HX z8P(1c28uRTt1;-9wN1LnJ+?gk^Mp4K|GIs1ynLl?k~ARt%2_?sftm3QW)y3pOyZO0 z#Tc7xjx3yFGBLyiG%H9aXM3OL;lQ!Ze@GiPxR6U< z81h1!=d?L7DW4j$Du01EkGJOH`6{0+ zvR2gw;hfO8df(VBa5tbE-eAceWxB@L7`M1_Nhsz~d?Z?Duy#6LCxLv62lVE2Wx1-!n96+r>%hSK%0gUr7Dr1<=UV&3Y8aa5>__zA6Q&_`q_`uH6@ zGh7G{=DNwBWQ){n1)76&;DcW%oX;&uOL-qu<+hn9^TJl+0KO9ly_`tg70y0i7v?H{ z>pd$Y9EZ1ji@ifu{iHRDeqkMoE;rv1<0(#g1Ura$P9eZFP1^@Hi*SeU_XMM#F~p~> zr{4EA94-F}cVB%o$l)k$M`FTpM!|V%k8d-Fug%;nR{7`mFQVVazPE&5r(yTGA*5pE z>-FN+0qtjkF4>yJrTN<)p9?UKCxR11zrA5eV3_9ZQBS_Sb&3b9n!hYc@A0?i+UrOP zKUnMiHS#n=gH9P2E(l(;;yJPQ3Ka)7nI^hM@4_Ys@6!RUhCJS~y0b&@6Z{0)DYs$4 zLWkGTt#+rK5i<;ue9t_up!8>8rF?OInt0)iJBP|9gHXyLOd@^EEruPY$F7Fb>1`l8 zgw>~*za;wDN1?7FY2q5+>*`H|L*zzh{IK+@*oF_V$pGLGV{K=KXR-JFr|7lM%;ocs z&rFTtbM+eWf6dn9Kb!pjbej!omX6A57@IDK6u0C40b<0y2tejk0Y5q*IP8xcXNCkZ z;sk*}3HuRgY?EFd0jh?EM8&mLRqOH``FfQyMaWeM&6nviJuh0HC!u71Z7H2GqL-h4 zak{)FQ@LHTLg6PgIZd-29#=ekUOi2-nY-Q|x&NTe@ZQCyub!A=(G{Dnn`IsBB;(&@ zyw8k`NU-zD0k4{X4!0OKouisS``fs5-JfYX-gZ6g5u0Og3GS431iBR$@j;MJ1@%jZV9!FJ1DugX$gM&SryD` z&J(UjTl?E2|3LzlTm|b{ap4~`-lVY+{e~WX>8!Jj7Rn1~(d0_G>Sg@sGI$tde_0~& z4RcZUeD4%WAX)8iN`UsGzhLf#E!5ruL=#1=)L}46U8&JUrYt1xgsvTF0}H`%ThK(Q zaH0dD^3}DsxN*4%PeXzXND0z+uS-zED(8mNYxwlYb{X3EP{RvaS!-XlURh^7cKg&d z=kP*70{)@~O)RQQctl`%-|X}&DDIUx{9w}DgLlQaMM+BS+<*H|1V-g@8GRB<-A3+KZy?5mPTq^D00FA{UzRMx3%c0AlTonlAqyaxr`04BGh zUZbVQROt6xtr0m+%Z^84m+FWz5r{yYy;aWIabbiy--*TnAhu7#Bl>@oI)Z(j0>}>s zoCKs2*z?DTZ}t~(&YUARCQVJp-QeO-;-6s-fT=Ojv?V(95WCDWU6laiWU`DVVYXhR z-LIR@Lw3%SSimzXQKQnP-?c=lM0RVf(i2By2)D}OTHJ{qvDVseo;BXLsz!_|2K|2C zbWo)7Gehs=ONt2rgtoV^@h0~dP$V9P>jKFThRI4oP5yQ#cxbAUqUCa99O*MSW9QP| zBy06@ohiG;ymXc}B+KT;h2|SeF5$@hv1^|S!4)Ej#C3X>s(_cQEPZHX0?fzE0?y6u zwqNKnF-fe5@DH9Z+hB>o%NF4zDO~n8mQ_~xuezd_TQQ<`ns@i|05UhK`XwsYLNs{$LkniA#h^=auGK%zoYq}GE%mlIxK<<3dNx}*Kvz{{UG zMxd9Usw+TLj73wP&lZ0G8tJ7b*}Hdf&JllzpC2)OHum^;tboM6F>?4?!8qynU;H%tAWO+)Y~w2H2< zhOq`o>A$^FrpFSIhlxR9Q#HkP8!SWW09XP$ zM|#gwT4P?5u%ZOfH;3+$K1G49?u~n}$3<@Qf;2Eqq@rx?LDrtA0qvUimdahK_rx8? z+zZ&0GIt!9d0WIU1HVK4L!8k>k@a*9eSGl>An!o6I(@^kyk_MybwN?F;f-@95$%fU zjniJo{E5sC{QNrl+$C20!Wg}NG}Frkmh8h>tQSFAc{=+AeEN%&7>OE5*cB9HL6&vR z_8QvODpjJ}l4@0lSPl!wY94{*zm#eB!pJ8xJ3^H3lIaibX)g)i$umJ(vn}e2FY%0;5&5lybQk7ob>aIMv#Szw?&|_ixwUX(G^O zd`!#I(B`lNd8%-Nrr&t5d-;&z$!H2)&?JgO3+9ApOJjcb^GwsFaA6ebzAeSF!J1+q zt$ubrz}x82+I0*T%I0;0>eScHFOEuUWNb~F?{S*Ha@*+^349^KW^8qs|FTgRGl>L3 z>yl8J(xKRxH1A0Ul^vchgZVa<;KBtDmQwIDDw<-k^3f?mcPHnAdF;=*IKl zE63EId7O%fRAf*|F6+iYIFv^jFtegKA)O(Fjy7Si8H;xBJx)M{>m=hnZ(59VFEo%} z1qgY;p>=N*p0_NHcwrXFcRmn%?`6s7GZXa^6}d3vnrfD*YfjH;b=Ws=7eFHD$GYDx z8?l2uBG(iEYHdGBbMQG;)p>hiPEL}n{W2&eF1Dx>N5&92ofLETP7@azcpTFC&5u=c zoQV2b=RW$5LyPO=!nxO1 zX3_Auup4BxW|`)Zy`Nw(VjqkM%m+2R7JmrknN=4;WSa&q^E(61gF7B+I8j4G4ZxL z6ksrL8-_t=?V@*Mkz<`d1hb__0;lLPJ$`@hezGeJtla^vgaVQwLGUtr9ZnihZ9WKT9 z;T=6gboKO{4;ehvzk?ztNrMy(8Jx+I4BI!@wTT{a#xOcso?=rKPBKI9m12&UH05V; zjlK>EEQ!Nk8s33=(9~Dw_PI!ylm;Jxy8x<*GwIDgs+U(BkRK$RLzYXWDq1`( zGIBP{BZckULuf?H^mB9c2O}d{?H=%NEb@hHOS?nnFCfeW7*pSD#DVv5`nx)8@1%sQ zc%K0H_k!!%ByXhNvf($nv^wP1`RTQ!KNg&9r5&FO8W^|)vsJ2Uw=UVcG7Av6Wd+?+ zWYf1>j_YcaV4U`VHBe+eI5(GQPCm)QLS`Q}Ls*0Jj!!n>Drke4nfA zah^C1vvPnXa7<+n<=>Cg;&0M#bxZbsman>B)r6PT+mtP_slTzOeBi--z6%c#cuU_l z_wyn??&vJmUHsEd59Ox8stnNPwU6R!E&VVT>EdeB4+a#gOx!{fEY)?X4_;tj)OErW zEZsJN#`8&wt-lg7V=ReMiGMq2Y<3h{H=>WvK|S`N#MRK)&e7b~=3n)D?3!esz_*~k7XZzM1q)tf$Z)s@6>#@bS5mki zC^ZAG*4lB2ECBPo&LlNRpywAN$qWhq;8j1^H|DnIqja2`kLwqxZJ2bo{olQ{qqT#I zjQ@bx6T6i05@f*^SbDgCr8@l8g+)(aRa#PL%J*wLZ+29&cu8{nW0dopp>6U*>=DvA zJ!y;8nt)4T=v+dJbM&ILyFK@AcSW&7{&h1{pk>iBCVJMf&@{c0VLHpJS0=LR^l@ZN z=K~w!)Ns^$y*{(sXV=X@bumsMTl}B~$#-G3f7Wv>8ca&()OG7;ACdh8ErN6nx;mzM z5=7(Qnl^!hwiE09z}DAy6cwYB=&N|&ZNh>%N3J3&Dw8wt5G+Z>;rK%Un3hqMK~U{V zZs;z)2oySMHxB1YdO16kcqFQGi3vLeEwT=*Zym|u-eJ8-Z|jdV-R=_h2Wau=UJK=V ztiHyeMqo;8HwTS=?0SR_F1vwALaQ7pp)_`^29E(}mBt6ezu(_=Wxb5TCvVFT`Ll-j zAMfv<`%3;*MW|{xpox9^7}V5CYHti6rU0YF_f>C1NVkI${-Pgj2V?gwg?Y$=H3>^f z)2+cT=8>m>`p+{OkAMn8DOsYJV&YbUWT6L3h02X}oZ^D?A89$CpG0%{T_4Z)$X~>+ zIHFj>7~8|OKm~T`g{d6Q+epYRd(FYGJUrVw-;sabTwx&pyuCt1W;Dj4l z3{x1tF^J`-rd7#H3Ga>EjTLCuSKF_@SZgTiHtV^zP#r)#)FcmQKQwCi?nSOSmun!a z*KGs2nP90_hz28F;X>b4AQSvL+3dv5LGx`SVgd#`URMK-49-SJ*LFd2w#zuVtUiv~ zHA*M5#w)q&J`ZKQMcC;tbxee_L@0z2%h5*AuW@vqE`t@swbb||ty=IV^M!NKzDl(U zOO`Qv#^2x?@%O}Pu15Tgm1Qzo?2^$bS8&1UwJVMttxj_u_C1yhV-xGkUcQ7;`p#(T z`;Pvk)ZiygJw0_~kt2I6RKSl4N&I8P1ZhRScuZ7TZg8Lway+Ao0S+P>g;`eKy$ z519z|BbD%yk0V)yMyJaMOlq5X8Sa^l7$6b7<{b|ta~YT9F}c5P)j2jP;tx{!AU}FC!WBC-yT# zJEc33JxXG;UoYB=L>kyhycaJ&ZtxV-b!<_iOlrN>Uu3U=_K-Or3<~!@0xc?b{*%Hk=r@KKNm@r*rs=1j3=ErPCy%RcO59T(hIHk zrJGA>>%5Ii2QGLq)#0A5-qXo@zed%@nlK(K7hV8SqDpNWL%i;`Xb?v!+>gZ?WPPsP zn`h10%rmRLM7|!6bAQ0?1}d(}8D?wpL?GXNRqXzXU!buq6mi?>) zao98Rvl3y-KyyXz*=3jGbkd~hWe*s4lo}gopbJL|j4#^oPQ(kw_*x{LR_xL2t$O#ftj$x(J)|;yUTeNs@03y=DYdxeY}aYhtnfnyt6DN zT{JxIT2ba?fiWdVhW|!4GI#GvYQ02RzVmGJi$`xk!`vf9#vPM+^B-1i&A#gmPef+x zl4c~{DL&+C6G;&Lcc|bz)j`>D=NR!|ve_s6Wb{x+?1Op=l>7|c!Nf_+7Ur<>0v(vP z39t!Ilcpl&;m*Nt4X^~U`@rP~60!!Vz)r~`i+TT3qfJr+`1(s4`#x)>G;RJy8rK?x ztSos%ez~OQ@#803@ePl_3*d~Gv1P+?-eprWhCk<-$)ooph4g*|njI`RpHcTj@MgIgiFung3=Cjh}nnZ2NnB z!6(&*l zrFlmtl-7ABYE9Q&8^3iWYIYgUO@VGbY(Bbck6PS()3I8fN!fku_sB7P=(~4ZH3n$b zyGAE0sXy{|oiJ=mp31|zYR+XaY)f6!M_iQK%XfJ({xCoKh9Rq*D_zHiMXS8&3{X;k zBY_*s!0ovo*LDoGROm~+HOIXx%n-uyzg*mD%gFs^`t$S( z*!TV3C?VE)doHKfH=PRDv;>T+=-L5fIcDy~vlXreg6Gn{?eg_fl-i-{B-puG4Xlch z0Sypz8?_Y8eCkW-Fk+{g;)=kSEzHX(D6|exEz2y+`t+vmmiiRTZmyeA$YNL!8yT4f z_M$A}5UW2L0T`ryC3y-uej``OM0oIGuwh3Uqc53*(p<;P_KTehLoOagKqr~)d6IBc zVf_}0gxjD2VB^l-4RObeV}@$GqD)u#HIwkn;2Yfz6`mGOSQE6GsQ9jJs8ie@fAp`r zh`Dj<1V#7MT3m)_r>%XV3mr6P*n_9?1(fL3dl)8SY6HV)`9X49%keCreV^2HM`KVT zCj>&%JZ<7Bk8&KVeq(13q1W0$uzHf}Z6mo~rsWZYhhu^}(norjtX{;uU+W3#s{YY> zg;|Il)54whzVaMw;zDF|#mU9#A~+Y_;u=PTZ9&E{(h16}3V;oL28>RqK>5TH6W4;N z2EIXhQpOOfkQ}gRD^C%e~UhBz;Dxxq@BK=sv-~|Nhy{e01y=O zAABy-ih{`Ba5~{MTFpmfPU)iV&tChbobCu!~*?P9_uUr(z5 z3R2~&Ni4JAGYexa7gSqN)Ii5kVtz<9XY8m(ozT>%Q&dH(X%yzczc|#ao(yS9P^=(W zmEZ`nqxg2{OUUx^nk|XsHs*3>qK#iS0|!~8nw`H@+j|$mW^01EvQw& zzA5qRndg=Qxk{qqq6bdC4knzJBQl+Q-O;WN%o1{NHTwslRX+u?iGCw=da8xNsbZ04 zYFh9!Aq(@`_<3OSuzyR+jv#!ULo+9G`Y`(mYC2)Kuo8c+H#y zrmnvuppzWtCMSN#Cx~fy#8OkW?9{o+{lvkdBkxg0MluM&=ckh~wG6VT6(9bEdJ!p%ok(�w!i% z2>rON>kA6*#CRTMC^Ti7EqW`6MBq0JmXX1n9xgk7**Tqnf4GwuhOnqaKc|+;iLfaa ziew`&a9matJt3G?ANnpw|0LtAbZ3f8rf|UQ$;#dK2`p)G4v+B{wD18#$ zLJbv*g3}mj5W-mqA_LscZf{?7XV3|V$TcHzp}w!sh7D&zk}Zuf6BK5SRtQlLF3L0e z?T5OE*CWG-g}3}%Z96{DgKNc6z8cEH^VDX)Pz^ABKy%zABHzR%d5WW&8h3d@$kxck zx|n3Yf$KHUU@sCZ`G67kr*6$`BHzwdti%Mk?f@=^{DVM%?-3H5YJZdYi|zLDS9C^) zC3&EU$r`ldlMX#Pr; zU-m{^lNFDdRtM>(JtunxoyS<#xI^VBiQb8yJD?feXp7o!X-vW189-fXT=M}!Cmr^HcNvr zxtV&~ff$EgqAB^pazP#;Q0VLiHg_=WJ%io}Tzo^?sE8m<93i`J-|_P!&qL<2lW4&~ zM1s5Lt^vFIgUYdz89-L=qE{U^!4U|I87*W>%z1;F5??!K5?i2W#uZ3>5>Cjg)3)aLw7n!xM zh%LGDH*PzJ?GQA_?Y3mTWH#fu%w{r)zxOQ{irHZ%9+|yl=U~H9A1Y?r@7gC|EB};a zi?1zKTe8f5)2bFr#Lsk+<}v6`&Uc4^LzegZGek8c2yuL~89fsPPF2*I;{LreXMo`C zlp(6-)qKy&i0^eDRBzXGL@~a7oWMIX1hq2NiiUHZPB)tLqCTdlaKm$fQ^ws6#yt*&^oe!H zEOCd2v0|J}H(ld%)!Pp97c&Ps@LtUd<-O z*z~lldUW+*8~YI+;_-WI8lbccpk4tJ&*M<%_*%d3r05|RW5Le4#vmTX@OyNnmt0XR zl)8T3g6*A1eEtz*g3}D#x$1+Z5zM2s(6obMYIdq=z59O=_D(UPMO~M6+14rBwr$(C z?W$9!Y}>YN+qP}n=z7zg&i{X%ulr(Oth<%0WbTPEpP_4drBMS}Y2Qb3Z{6Fx?)mKK zImTY!i?(G1l#zq1{s!0PZ@i&+vmcFO?hTnP@E6iK4%Ymkf*n#b8rBC@PlDIY)TW^S z@?k%-*&(TW)GbOw?ZUe~IDdCCS}@2%sHicIffegLTLz_a`J>weDT>XmlzW7@eVH?C zIAc!@>2ttlx8>J7%q98P6;Yq;7~y_;jzRZz`$FHI5hTiV<6}!s^xvP+-^M-z)hU^uV_4e(hv+2dI8RUXF zfQLb>wnaU_CB09Utd_~TH`^52wS+`{2*%YkTHme-tRl6K6?qj6t5(Xo?^(m&C9SXd z_a3ZPwX{sDtUw#Kz|8|_moe0Gk%~;KLmd8BExZhpQ~D`Ls|z;0v`st=wj(h#y~!Cj zqemS6T>;*~>3#EC>b77T68at1z4syXR<&-Lo~#$7m(z%sI?2cNvJ*`l=^te-x%Jg^ z=vQ4MrZ*GTz%DIKPn8L3L>G`)7ZWyBI{|--Tt*=8m&n)g`uC(hkzEf$lQDk=1+d3@ z-oYFe_c4D~h}Fp3D97H2)o9ub$3ThI2-`5n-oO>4Hs|6W#_J^FsW63c9Q0B)-8on_ z9FyX?L>;3Au%$Lp#yCh`V8K zCZ7trhg+NxU?Z}Wj@-hsQstGpfy;d?`Lw@9Epj`(kTO=!f8!P1%IowlBun>{CtE0T zTlt~gC;9m32$noPYre8|zrsGXG@_YN`f8-dJ~lP776RglVFEjRO6Y?_RV%1;+65;@7erygbE3J7Ov)hKSv{dzE2Nh zm2OS&I;|U@XT1M^6N=MdfynT;-Vww7zsZ39GsKp#bvAMQPao0F@qd;*L+X(3|JhW# zF=n(&W=j|o>@W58?KLI}hi2~+Uj>0dgp^05>Xz1xj~kn$hmJ_L{GF?4Ud(H5YE`vH zK>I<6tgo+Iz6@!0tS(?y)~ec}+r=VAJiZ$uf61V0*2?>KV8>I)I1zF5Q)b`o0uJ)=f(H zaUdiO`KHwQ$nal5`PAvVfchrby_TQ}H#0m-(iGJ9lw#jrm_?OvGh4?((oET|5<~W^ zC#VeScnTJ|UnAeOjBp-mbS5o>CLUQ%-9eIbWif{=Ae*l)A}Z_OV|u!ZLPO%wBt#5z zVL?z6yfK%uvgi_vDZQ zGc9~(zJZO(Zkvdzm70_ z!5M1!IQ_-OqkXW3DUXhAqk%-T0IC~tj>)p*K!QT9qdktb+@a;(VIN=yU#ED;hzz5D z${5nNFzi6IfSn!rs0)q!o`H1jSTx z_@gU}6!m;TO++D~cJQ$}bvA3VSK#ARiRg0dpmL{3gsHPt@YwiC3!a9Y1u4AInEzRH zLQw>p+2f%rYQ=Bc5+j*Ovv6sRv}zhRcWG@tz(iC@glgKbyVM=|$FwUlBc)X@x`24> z@_?Ej)ozb3Su_MSJG|vCI^1ne4tylvcK&14x+))(N`*9Az7EQas=qj#PJWut zHQ{mDzA~bsNC611#Uijc-1si$F=kBX%1M#&eeAa2e(Yl<1YV3 zQyL>jl?~1AR7Dkre^%GQOsQQn9P#K;$=m}o6(V6UWT_^58BHyW9)FHvTESz??}pZ_c*$dOZi0y#(#sj?i|)@3CvAx%n9DsoX7>I5GOD zKbXPPI>C#bFp3XZDQgMXU5_JYYLB`$Q_DCgZ?Z`Lr8lVF%i|S?d6^zQUuEpPsNhZG ziwT2zsBMapnB6QYiE^`5j_bBwY9-v8m7-B?W6!J&VhRT>J&hc0UcNjNxOG`aY1C`k zPexgkp^>7kKcZw3gRn;H4h>M0-FCBA;~k5#zo#76WRd?Sn3oKJ|=m8-o^AJb(# zBo)UwHlSLFZiqxI+eBR+h;s9wPFglJu#}-*9MAcJnUDV%GUUNtiuV+IzLn=2#uoDN zO?bIJuBDC+eaq0i-8^?m4JT2D@?+9J!Ltjnt^v>=Nc%kbH)8(qY}V;RDhhw5xV05%ntQi$TbUCWja0ZcV&vVYmNGeS~glu@BrHZU^YXfwst^ z=2exvH21uysf%1!Lyh@_9=pornS6h!D@+hNpE z_}2YmZveb5F8(@5_mYuiqtxCE9Lh`dE`aNvy!UQsjpE(D7?k(YN+(oV_%}$yCxJ-< z6#>fSHo}jr%|>8!eCR=u1J;Di_DM*+( zUvm4lKYhfycr@eWF|KWdfcf#SW&7J>&)Dw<`!W?CbL!0JA)_OIAdsERO4w~n*!d-N z3&pfabVDh+0F;=VA! zr8<^AcEMs{rJpG9(hY>)$Fv@_X$5c-8bCH5@pj%taORG&?Tm!j?j=R!S5__%TO^=G zBP38IB599B=%MzQ(?u8a!gQJV% z@ue60H|U0pm=l9U$Q97awMW+7c1rlIm``8z8g^spDMTf_8V$X6LNbkJonIXT5rH0u z+v>&Hq{=OWD`o334akQ{?C>(! z`&oof=7RAQaOSRz@>7C3PeBFcYinY2SCk{`hXagtF;Jkt)m<3%m)^*a9AnZX4gMfW z{oPe*)mjYl%VF4#LG0%g*q&NCQd@0<3vi0U?Tu)0yn$GzskLBlar%0Ff~SMy8b#9w zLkgFq%^J6Nb>&8kl3U*xVbg?bX;bj#ygT~COTIB%XBGHtW4AY+tdC~0gAE?qs=U%M zmDTl7e^>0K+BlBk9RAn{gcYakAjM{eD!m+S@4mGQoiQA6%Yz4axjh-_0j=bA6#jMI zr>&(|_M0~y+AgmpuXt8S=?^&#_oSsqU|aWyeP>uTSei^ue@R-8QycL1Z>%iBsL~nU zZl%CWmMJ{c!ic5>J7iUjpvg%oj@qD@=@iBY-x+qUzO@8(Yh|TuT@YF8h@AC7%Q^V4 zKHr@B`ODhd?5iGOZ}%EZO`jmSCS z_Z95rUTNJLZ?c(I|BS0CB(OKBR%{!H>z;KRle3Sfuq7y{f!WMGl`1+q%emtqk|)fB zkC~SW2A3}^5M7s>v!C79*&oS!8e!aO`MbTJDaw6%n>U~J;U^*jTg{2eMWO6PQWZQe z>X)hhSTP_^e^@mQHP>Z!tR&=;)u>oMtV}Bj%@9RN<5H}`fd9}-QscC0M~c{yxBXg4 z25~1Els3+sP+u;DB{(~RO_(D~A{47Uno?LPWap;ZD!cCV=|X6Z&SexpV9$%AN(DX_ zGauH$44Q+2A~BSTj}mr<&r2sOF?T5+pe{dXFGfc+snhe3OoE(QtLMP7h1n!;L=~{9 zMYxD#bl{MU7pOBBJw|6oy~@Bjc9{@b~ly@8{Xi6fnmor|sW zFO%E!qLKOeD39nve&EbXUf%(#2(PznMV1PBc%kTi{0njJ`xoCOjPs7<;*&T}`` zi&%(^X#g8dTdj&l#Y(4R%hhe6y8U`RU#pphhjgg4=$dw^U9-lsvf_#S$yIH|NI>(G z@5YNMAut#D^C;zpC+Fo~_K#Ed!zC5o4~lP7`9u`kZi1~Bl-$@!B($8=hXwG@aeq(8 z-k?wG-mnJnOzSO%#(QOCj?015s~m6++bt-Ys$n-{>n}wwz#4xQ;J&gS zr^il6-acy~`1)faZjpbhOg^StC&WvSKi&jtKQVqkE(M4^%(ql+S3fYH>rpc9)4g_^ z=KXd-pKf5^dSE9eBcNwry3xFJcv~Ih&~#EasK6+wOt;M+!$Nbvd?pmoda}VUgoY->6(9eE!1smqoh}h88_BS!%&?iKroc)p3JjDwOwu?8)D4uS?!D%FP02=ZTqvpj_ zD}67ZJd=6>SxEFov2OVi%fFKR04hQ-2lh1*b5~5w? z(SW*3Qs384_i~XdL?`x=8;+~jA1u>YqTK9_A#>Jj-*nV%RFxA5Uf zM)7`KW4E-4TD{#izo5xV_uPqK$IOll;h30Z)-Gb;QL#t8Ef70sc(XOkO^)=S&P2&* zpiZ2V_Y*@wCZeM$?5tP*0mIw+(UWvzPUTcVaC6Tdzfe8_`ij=J$QM*lus6M06!%~7 z;K^Gvj789(V(Cmpb~a|<#C}Hcb^Etv^>nFjwOyL`jCBk`^YJR9bxg3B666VTgsqGPF`gB^qTD;`QwzRMKCvH2>2k?A%^B*^!4uo&}2{(Vwu0!gwJ2gYu~-oWQ=J>gb%VyKr-6t=YmJFK)2OS1so+y=c3X&BUF~*^X zGctv8%96{VklhZlDa=d)S(Y4|`Uk(3fyRamIpo#0Q4*NaaNH-f1DWIr{G%Z9Y+GxMBh zSca^Z)tWBn(Od;{ac`aCQsSV?}oCRn{7gniee;bTgV}UTeB_EHfb3Q<#?yg zVH_Z_Do&f1!;#31R))CYaaT6%z^JkhBp5?kP_ozNkB2YPvJVYJ+L0(N_;%jr1EwE- zo@3}KiQL_0Lrm2!;TZ)wY2*>;Y-;Zbj9lu22nsFFT??tL&hZ+hN{{R>>!gWyhG5rI zFHliWn0kF3y=zh>r_2@Rd&#)S7VRarq;N}=B)McW8zcvw@!o#6_%O*Hc zRwzeNX!8MO$LWsAq*qaSt$J$rQltYLocl4)8e&L5S=34ynEU&kM~o^83u~>lY-eq(P`(2g7MyJ=WT}d8(8SLbxJt~HQEx{R9)VI z)dQR;ayaZ|&$gp;N~B3!E*?m*LkF${1kN+rxzj)st0`pC!nOd4DH zaCc2vq)P1*UxlOOWr2m4}{IltN{$kqTyrM@%c+UCHwo(4=Exstwm*q~xcd(#YC)vN41if<7d%)` zI(GNmxDZz%0}2!`kEdy`ua2&5sRyj;p#I(F=OliJe{d?^h#}kZGbJs^rnQ$Qds7M* zUI#@m%MQlv!pgM2m}bk)F^XR{#L>?NWY{NmdMLygxkFQ6$_MrIYVGZYy}e3ZQ_Y5| z=LWv4nrlY^#+;%8?LLj z0!p%0vvE!28r^6*iWXBy5_ah_?<(eP>PpspHnnkJ*#Z`B@MWhZj!$yOI)@M;+Wy_p zj#TYT(Ci3W-3jM8R3g@x*>WlEyK<+KvnVun+x-U;vuRqmQNc1uEfawNdt}jtLU=<+ z3F!lz@@iZg^aYm^6Kv!$8`stDzn!WVje}YhF7M~a;`XKs=tQF!*5`%atT`faYMNK|AM9Ji3tH3p66p)A zvT;f|j~$BWVf!|TXcBS*jY-|Qy7*?=o(j<&ykRSw&}vzd`5KqKd43iID7_Lu4>cf% z1nY+bkEdd%QzhnQF>?#JCB-?pJ7jZV4*vJVBD^v_S-DMK{>yiXV3t%t39WZ6AS^LV zvYKOB7NA*=V?AaFXn)U0eO}Jp-ME1d9BfFSUe**?n||f^feg?H3bc%G;GyeQQT9{Ew zbcE4q zMa_8+y;8b3mAA6A5vZ^#d7sa3q_a7XhsmY6ns2K#Ho=^=D@di)97;VLaHCjyVWL$S zdi_VnLPJ|eJMhApIeW%Bj>QxoPU;&GnV{4+hKp z^~&(IV>(`sRTGs&w?oRLwq@fvX)7P=F}|MhNFqsa&7j8BTuyUlX_|puu6IIr1zpuq zFXi%rHzH_WTz`)Fi6Y&)_0o_M&|8r0jY8xDLyWHkrAI&ZhotWfRprr&w0(zOryT!)krX;I!MTfDae8i#Ip#yL%S(|qPl~s4 z>fjk>vSoosZY?*tzcthnI7XLWVtc={--=^Ktjh)(-o$zj14pR@vv0l;@iBC>Mh09N zT<8S)jf|f>a3WD9v)JJuw^A0)tOD{XyPq!UZ@-{66Ve7K3K;nm@AeX7WZU7AE9%Q* zmCer&a0d3keaooS5Nc9x|Ea{eE4k^6g&J+eki;o12JyGBLLo}i{s`myFI*JM%$c(- z3;+N?ZU6wr|5x$&zgh18-|BHl3(`w@X^HQ|B%Up;69fs#I2I?cGEfI1A{c?5m6!q2 z5Fv;FW^9)j*_0H285Gq%Air5vfJ$(wkv3NzoSxQvqqT{)X z(v?OX$=UbqoiqCPW$W*Co0;DA>4P56I|!o8EEINQ)(Ph+b@s__L#yyfgUfezmJ|-k z%!3PUgHv0jD*Nd439+H_*)C;u@(9oyw;CGSxmPy-(rM?Yz}Kr67hUoVv~%~YKuIb% zwZwkW<-A8)r#az^51~ zCg@;^Q$oPKNA;yP2~kfba%@xX^b}k=bt&0{W!B1I4bcN0xXe+6iECA_4q?pAgvQf- ztFn2Av}g(!c~T96*M)QU{IuGcSJU*xRcD{TgL}9226>DX$l*G1cXUn42rQ?aqdchH z@*6l%>ySVakWL@l_yOr#rv@(H;+q)f&VH^)Zk*3#%ehxZ0PSv@>o(<$jo{doV?Pez zYtHK1FIulUR8KOc*-u0haND4A6Zm_I=eSE@_3OU>FA)OAXKSxXtR`kqPEc$bclA$fRpylDcfRRD0v!M3aU)_&~6=5C@CqZ zid4}g*7krmKh!rW;EGNeTA$vl88^MnLpN|BTsXAj zP>+@s9jwWkXBLAS0GC>i^s%A%@bUdNk`o4!$y;Vm|Ay3k#)fH=depb%2y987sO$RU zU=v%PCabg+8po%l_Rf>`Pu#a=Qkyexeo@wMtJKf}+!*ZvUjxL$pVZw6D zq?Yk3y{l)nQoGrOmgSYu8~vslpjmY@%q)-J3+10N(&FzHDfD(sCNhI9gE3bU~vkDZeBzaY>glG+r{>s-k3V-p$U2Xv3097FQ$t$t4jvV-&Nd@IWK#ZEl6gnO?%GS2a7+u-|Kbw=35DN7$3 z;faa0^<7R&91{U57PN9?5qX>4*?(h2jwtM}(n)~En4ThnK+M{{66lhMjgj#<2>MSZ zcVWMAwIbH{CGna`8rg`WsdIxg&Mj*P7Tw3C3mS;~AOko9p7#ps{nO8@XX66OaQtX0 zXC(~a^->Z|66UJ|JhDk*Z-Ui(2gzi+%5MjLd~O5~{QvQ$Cc&^zY2_4(^}`_C?`HCN483Mgv%7P?WmvjKy24XNSWe-kzm=LGcwpqxG{&tB zVUL@DN>j={ek0Y@TMhFsUCB06()!`cQa?a@`um{nA@`9xi6ZFQN^UYk6gge;7c`B% zg6*FjMUL_g=#jr$6kT04~!Wod<$ z#*yYT22I&O&_`2yDY@LqKh(D7P}M9`MS91O-Q5u3_vsNlLD@9@mpe`o(i7F*O}cso z9i3uZ_7c+Z*KwQ$N#|rr-m6~TayXTvBs9niGGrnXY|GSH9DBqP&d!7p*O+tg0UYfE zgt9`eG&dT(D&O$=-;fw;;0(pUL*P?}R0?6ulS{sJTgc4N?972Y&&ldk<5-Ih<`jjn zmmmXynYp)Zz*{TwPNAjRx;1HOb(6KN-C4-x&(MJ{DQ~IAKCqBvYU2zv*RmIpduuVo5b?dKcLjhyju} zb5k)%2Qcd*9k8B(&ljIu0eVL}M4Q5A#RS8rY@qYSXnNWgwosIOTvxN-Qz1T$AGgI+ zG1uKC=b7^bF~4-zhiRb?JewZZgF2iT>}~Ivxh<}c17&YmS&W9zRMAw3=xguVe-k`c za<=Tv1y8p&9aBpX%VuXB0eUBV=+1wx_{nT;@!ntqeg^F@8xvg7Kh3_ODI*d}hhRNp zw#7nLxeDlCX}+lz{0q2l*v9zkZMuf~x_QJjTN>@wXT1-;LU6a#udLp0>ttfL<|^>) zc3R(7+ik>hI){Wmm};fmQv#37L^)9gjkn3ahjYE|2{|rVC7M+#B^k z|K};K^_rizypbFBcH4ou-E3Yo z#K;3U=FnhKOsw?cA%-mP__F?4YfbKjS-ZArmPQarx{h3QnU%}ni|`JO0JhdJ$W2We!;Hg))6A!<5fVW8n{xIH*1LK>-aXceMBCSd9a8=Smm%x zjeCrk1O;)JXpBwNLKDl5vy-l1hYi|(o+{B#sY0#-Z3gCTn%Rrk>*|Ymw`MeYvKS`j z2aR{ZtO6OKmbG8&S|L#gUowJVcnp`TI2X~|e@#BBZ9?F*SG=#juGnl@8^=Bw6uU~d zKK=M}OYom8O0d?IZP2w#7u3g7ew~3H8&j{_J8W34sIl#cOrXjSr^DjKv)1`Mqe8pe zwdz)`IwY^p3sz+o1$ivr^t-~tr$w|*gRz&O*0)OeR0lopau97=HaS858JrcG ziGHOC>d}a*cju4HkQ8&~|J3JwY{}@V(S&9%xJW5pNE;O>}HI$xdF{ z{38rcpWTomDcbVoGC!(jn0wB-h0eE@>@S|yigW1dK!qeKeXOFmXNkaDXPikM3-l%V z&P??YO0;o|+FWvS>8?H$F}vOA7r3xB>dbWO+nMLE%*lTB-9GcaD^K*OXRb=!zgMzpBa^1+~$BJ05uDO0->y>W z97})aj0>XV)ypT!m*7rk8_d#k&H%Y5V9U4_RQVLC1|y>SzrE;7s72=7vtQc9`3bH1 zm(eP#tesnuaeichQMBH;D~m9Y(ou#RJDEL1)qIB;IM*9geh|g2z8GcszFKEv{p^h8 ziS3?k)}s++KxdD?=}Zm7sUj&adHNq0K~sDwkt%L}!=Md4=%U;`qx7dOXNiF`>UCM+ zu*1X*+{jGFo`4tpcZzLkH={}g$nKl7`+r=!*F|WcFAcO0RJT#xdQ$}{3OC>#l{NsJAOH zW=SAtT9e%ns1F%cK)8v7S5OoXw8bjoM1GEq>&S^0N>q%EHJf@IgPvhW##MAC;ooG< ze68JQz?k8jtQxfDA&CoNJSD`G*2NU!P3MEish*`@d6icQC4}f)7L=g;dyiYm-wrS7oesf>*Q* zoj*Rba)e6l7y*r+@;Nl0yV9xRM1+&PtwGRz8 zJ{b-&H>Y|Us5T&!$6B`9&%9GncP2eN5?Nc29026W=XX1ABfvace3>mp$U2s`KPSN4 zl60+%rl<{xBW+eB1=9e9DP&CyJdU3i{*M3@3Vr#38RVxSXl=zlC?SIUGG)DIWY z&u0P!;k=q2M97MRm7IoAAP~N2%s5z+?NINOS(}p`AAF!J-M4g~^gMmW#FSi7MB4(m zvMoM)1Wp%Yn`dmtP<4f_%GWxBYLD`k-ar7b4RP856#Ig_JfR)618?g4((_;V2Bfm< zn~Uk4;`6uik$kBWeQ_e>8MSDP0H3#=&JS_NzS^UBgys#v-D^YHXIvkFJ_VpF7Hf;v zY=cxEGPPrpA+at)=Yj7K@;(yv^z#Om%IXbz)bd1B<;*Ja5B}4)$30z?a)xT(0#))8 ztsC^uwq)mE#_D!s1QAge9F42g8v&&Uss~~HClufi;3(r1R$l_>OKlmIf8eUQpjaq~}N-onnii|-0A=a){~(2g@_ z;kV7oS*@(tA~BfQ(ji0E_E4eX>fgt1RQKdvDWKmhw^96?61bU$kKbv~J7Os7JxFLq z`wr(Wy1uq|MM7&HkgCjdJ z76OLorUphQ5fN``96H^`R%me=k|L`A1p))Em zbvo~aF*Q;G>nz_Xa4nB7=BZH8SzRLnrw3|0FV3oN?5N4|rfPYm!U2NHRlzwBL|guFm~dS#|BTDI zDZY6gG|2I0NvR`MQt6&RIkmWcAc47o0hS3RH+l}4_$5?W7a0YBJq*1829J>iKk5B z^SL9Lnmdz%;U(&D#r6T;b5s6f#JdY57w?fnD4aC8M4nYv$SNzzJgJ%elf4uHkRYBP_MZ z1C#O~fE{z2=-ZfJ6^R#WmH`Ae%TuT-niQ2rO;19Dk8>e*(9_B<0a@#GF4jLQnG{ZT zwc-CKs=t_@=I4SBG>>GZ{0py49}c)a0nY%!NElqxbv`UGQh{5>U1 zqO!b%#QKsuDhkg7yrp!A?*h)#|}Dwu)sld)MO(}IL;P^eWUMY#2i6Y9y}TS;T5844aaOtr`>ZpV`RN}l(0`iO`I+poxY2` zGQKV;2eAJWw|RtE(AgPsh{9b0tV^6Cc_$=a4aZWH{Dc8ua~}~-(hSXCjWVfa;8M{% z53{;VSx4i8l|@N6WMbLO!u&QU*2_5VJH(L{^EDt-fkXQdfW}X6-2@6?zAXt!!wgrj zq(uRpTLJ1UgT;+UhuE|Zk+)9BC6a9FBQN^Jf2+7!3hgq%cs|m^oSHHqdoEwLxFD?? zc794oX+o#s0IW00+a9VGm-E#KwzPDFUHG&qo#D>1HM|qES|xDshJx#>Bx%qmd$`7~ z9Cc=CT)=W0;0J+E_*I2?W>?gLz%Tr+MROKW`4RsOdUVSD%3fp{&@`wm+(Q7tXbSL% zP;pJfQW6!3ZDO@S&U+2G0gPB65ohGi6J7@!s=4B9v93rYR&q~|4(t}johpE0Bm%VF zYuxNV4Pov{yq~^Cm@GKc4`Qw7Z%RvO8cKUTM}9wbK50N|d^m|BJj}MFLBWklQddkL zQ%A2yv*R99x9(TZ%|5%1phI|b6LPBPp@)_~@qn;JcIbl3Ay?iTX|S=zS*i)&hlc01S*tBk05$e@`8UW zNwG*fsBa0>a}(vSdnP)CZ{bEA_qQR2hKpc4lf)9gQkH}wFotTp7hb&=jIrG}n&r041;n5{L--Q{boIm{4(Lj^vcJ zypF~s^XJKEm?TY&Nzn_o!jhyXAPjGVaED#PxlcVo^hvv+mE8A#|oeM)GT0z0h*q6EJzl;#% zW2rH`@wUn_1!G+^m_)|i&FU!+T8=rDDs`DAYlbe>7Gu+ z^qEg#UjYQgsQQPD#4TbL-abKCZUvz3l^T_j@8b1zIpyl*39|5xdaBVv1k22d+p&v8i|h(W{428 z;maT7k1))c=69oL#F>l4|K#M4O9{ei+D<#bTDwzwv0!k^2xz9vIVF}@4xz~NYPZQF zo!(TGivnYtlo!+MYLh8adE?45qo*y&ar@-2kFx83`i|r&*9w$haRUws0vUgpWe3I! zgaq#FQjlX_=DwO_hqnof*Myc3=yNK6rWXPAo~Rxf@Bbt7Z^8F>^8~qp*=4Dl0$>eu z-ym-SUSpML;t8o5PB0^snVf%v8P+@G$)_vDKB`Fe$^^uiK->){eDShUu_mFEEwT8p*wAI1 zrx1gEFU5UwMSszCm>N%SM1`3DYtiWf-;hEph?pSj7Dx^cd^pNA)T@#91`(QOP8q1k zZ{bV|o5vBFQ&dWFT%bcSpvEDdRscb{ESm7SQ(YOA?{(G4l=bspuvorF{8+BPU~5Kb z008R$c37m~V&drWf3CEtYN;Wsp>H9_|H}2t2ph{(6oipNqleZ7b5;4}CHe9Btrj+n z*=2@F6WEyq&T7uIR?ZXt)un)^%zR;e;dEUl1ojdJ99F?IolJ6kd`!Eonbo{K8_^J4@JUxl)^918sKMLwA;gi)C6>l(H?lSq!fZ{@XdOttGpu z3CS@w6%e$_ZzW;AHzd=noG1A^H%AJlQJvJQERf%zM;CQ#MF`Xww_(O>G-%F6B&(JG zc}!PGB+;mr5Zfu0GV@t`E;JfXS939C7Oo1AgIyT2UZOY`ouZdgY=H_kYxAtqrqgWh zw!XRJo+)2vD!W8Bnwgyl)>*_u%@$uM$O$crR6XntuHesNvD0#0$Y`nlLq|!;rJIes4Uw`D7uS)3(3GUKTjaIU&=YmpkNt`LtFr)j5 z;aXk#qlN5(jm+3%W(zydT$=Kybw2mvfYeB0nN&pMdFUh@hkFC{HU85&S!3YI*zCJ| z5#q14KXK2y_E{B|3gcV@@kN5UN9kWx4Zh7(h0d6zXn>GU2jQb~mw2}^#X~%9*_({< z@Db}}o0;-aoQbB?+e{m^E-*e>bA=2s8nN@-*=&VsDWB@*TaF5IEZwcRaMx|`s8jkh z#q#U<&oU^Q=mz!?!;w4GZqtko((K?k+SEdWN~!I^JJ{|gm-W6Bb{Ld>`abGlxsH|2 zj}pBjc3l6;587x#$wCD;#iG5cgGEC&S-b4|$FT+>s#3&|?-t3w8}1;>x3PQ$5}|n+uvF7+$By^x#T(`1V*L%U1X?dr-62lRm5domhM^ zN!T6W&v_0@Y@vf5!H=K>fawPuTk7p${GB^e03r8`f?&5;{P1B-zaMgj>NR9KM0J@L z>2A>(O-}YS$YP;PaHc%xR3ma^Qv6R$LZbPa!I)NOB1Eq+anf{zOcKGc)0@!X*s#w) zzs6hbb}Yd4uUTx4W#cOMIC01N8Bv_Re<+{ld9*kKSTQflM`(&Bk~ zhOEIMX2w*BU)GnD=UQEQMs1B6^={8|O0L@Efew!Rks$1D={e>p(fCH)%Nl1+%HgK$vAr#EaHFesj7w;hj2 zD=vQZ5jv64WfnHYAn$I^MBO9H2OH0%##j?18#| zLLEUFsZ+a{sb-IS8N%^!SBU6mpX0cWAMiy*lhD$!

I>gysFLDtV8NO!7@O{V-^~ zaLn`aOUrDC|#W+hBirHVhV3xn%T03^2@N{wY6ooxJ1B zoWTztGVi3YAZ1#CCjsr0sks_kP08AcfVL!EN$OQKDbu=!>TDrrZ2SlfTYMA2d^53k zc)GSSwVsgAJ>MBSplZV(^6_`>kp>erhRt&Ld#_7_^eVvE%j}^?vjtcU4zga7YMZ35#TMp-y{CSHfC+sfFRU}qv-dtTbN0m9yEnuQX%7F1@YG|65&T)n^I6GoT;#1N^^ud%T#=6@J&a2z z!%q!VHW{zJ-+l@TO^642(ziQ6TAlyWn^Z4)(T^M#d75J$s^Zw^lN=lJ&7~N(AOh&b z2M1BLq4F^3E0d&jXjYm?X6#sUu@W+zT_A^{IVY6RJ)A_Hz&$XlF$xO`3J&gWFYn;{ zeeG!uJn-YR8|v4Rky9|g&$?^3OV66Pd;UlO(h&UqSEZq6#+k4-W%{i!w{0?q`RHr_Oqvv89ov-`V;M@`>f6O61SPW;|4^d2+jB4p7KW#E-o=+9#ln8 zs_{KH)YTJJ-L2`dSq-2EErp~%qwqJW4`2ork0bY_RO}TnW>FT=K#L3W8(V4&CfzDz zxL1PQ(i5h*HY`FgnE%G+;p6Srie81uu!E5fF&1m~TnY6qDHWqi`{fZ9=)D3{$Ybr-u20rXmP-0?{&ygMP%@r2wO7v!djM z9*s7JBDJGtXik0S5`0^txl~ENcE+-NyjPK$A-p|_0QBz5aY_h9le>#!{y~Z}IDE9F zcl(sb9ZK{j2S@3)`4sCPU_t9QbrqdpfHb`}!SvBQ2^`?+!rwq4&)I=I9HnOT>L|Ab z1nzJ}k={zW1-iWx-_U*_Hp8)WlvFKXQqt$7HiI3bYL(BgW0J0eRjb|#FZ0Z(>UD*n zlSJM=W*8m{C|IjS!=Km@^>u_jh|x)A2Kf=@a-$}M!F*H$=Yhry?<0%@LP5BbFc%0x z=A*O$>60dwUfNWzMUiK_RCdj)--=nppmjOcwc;r`Olg~#QLH|+MbmqeS)uw*5cPSM zC-Y#)1w8b_X(7vc0CmuOs|`&P^Dx*pM0hQEsI8DX{@w9JvGaomGwb z#sas{(k3!OY8F`1T*^J!wCiNtKgibTu+b{yw+0l!bm_4q<+|OS^g*#YfcaAT>5W-O z+*miEirD6vezF&eYD@WJj9_Ieu_ENpJ#+a+S`vBUgpXIh9*5GH-F|L4V#4w`*F>uF z=+1GmG;1X`JaZ;Og>Q$@?OZc|H}h?Ke41{YqUuAd5vEN9=#2A^PVtYO9#f^fW6Ffg zYVaD-T|vh`n7~e^4sOa1ZpL41Sj3W1AM=KGn-aEmQ7B5n5#}xu=_Ohc;b5%}rCX3& znxJ#v)$5?UWo}x@wt$F_`u0$SdVI;&9f_=`Cw<4;Sez|w+0nEp{!?NNb+f{Ta$Lk4 zQ*E7fy(bwov5zgKJEn?j6HiN>J3Nu@JJ;5oz0&B;60}5EX3P!fJdw*elfYdxV*Ua@ z#F{vsVbvyCFXAWc#hGM++^J%XklD#ykfV_crxbm!fU${XBHdVn0X0+Rbd+$RnD$Nl zG~~w``vkM6{UJK*&)OtVkofoT29QuvWeszqmF*BEK4H&4DC3AAVCro<;8>OI%}%am zh3y}utpK%0CtG0Fe!;>@LQkqfHj*)uZVbo^#z@4sLo2ZQq?(2QcF#vVI6Az9=?w>v z#8)<}qm4|m)f7(^-?2FQxgCG1MAJ)~BX>f4l#jf& zF1DToO6E@|z+LRrxUvS@>Ns!@V-lX~#*lIvkyP#~D-38!Or&OkfpN%ziSn`+;K}+@OmVWEX;3aJvnP^a~CGE$Y z%~vGOZ#L{oR(+0j^|2OSQu@jt$lL^p_FtXEi`XsKoy26#a09iE7-xj#b?w_q_)ckI zxKgd)!X!@6Wa?`o0dOL^S#5kXol(fF^W8#n!$mT-MLxrZpIWq{?Z(xTpp;N6GhVyP zW^m{Yu|HUO=`Va=dfj6h@0&7Wm(TuVmo4pgKD~aN0`FXLgc#1&gdp7Cd&)EpA-Bw? zc`nRr!#-}_HLj2?_26Z~k~cmIh~h`~MPlSB#WF}KQ*68sy@qc}pro`Sgp17M2p4LG zue_ZQ^%PmIff>3zxFw}ESG&<<&QAnHF*SY1`CZxrhgl4qmpqQBFT>lZvv)tS__8SQ zG7<1%JVM#}*g9VXIo;@iQAdn^U$Jq&^&6+zNdpKtS(PPjEAY~=EDFJRl&0bx`Me#p z9m_a57oU!2<=aZ(+md8a^ixIb*4zR;1}WuSceYp31q}jlSq^1=b-3t^x*v$cgv-u# z)w|uNAG|Y2PIh|{%M{bObD4)(eB zuilr&rP&d5Yakh_Gy^HsV`|qFOWc;I1CLktQ6dXupeCuGiqr3^Pexr3P**`oI}K2G z5q)_Vrxm267lS!$&F3BSMkms*^KV~6hhHr(&@M)S(V!QkpPD8I?N_0mtSR4sutQ;oGW4D%5Yty(0+R+iXiy6QWkCsJ)dWK<}@yy8lu!6dW+X%~xR%S@UZJM(c2o_Tofqz0Z>B`C6)W_85u3MKV)Hs^#l!2Z z&neC*t#(mik8*`>=|E`?4IRnA6!%Cb%2OW-uja@mqXA*7>SYYuoK2&(pn~u>YpF$~ z`u-+{2+0g#%In5S4^vy072;R-C!^F(o(UCjVj`FT7O-3nfzL0!|Pfmx&!C=%JVK$LM41X#bR4!c+Q<>%S~ zNVi_%9U5;yv}yTG>mx%FaN^UGY4Kb9Ee0`V`PQD~RYR>_b+s&*F~!eMs-$K@ zV=yET7CV+7XQ{-@m%>RLvn{Wa`R$pNI(2jOTA)yK`^x%$V);az$@!44C4Z8rW~Y?6 zLF<8W(E=|a5c5ra0^cKbbzb^d?tQtrzN9hb+z2oIMyY-^*gd@U9!G-*kH%o~kal`f zUBP4Ix@x5?1IIxvd~4cK@5?jAeV;MAX#0pqVUp--SPbSOM|GAvEwD+rr)=P&r=0TG zszi2;fXWD@^p{^{1U8jpXIijAMPWhkFdO;3UvQUWBdel&26fC%R%<)Jzu(`%A*UmI zKcX>3?+bervBBn|B4#%=jH(kgh3bl#g5KJz%7!M!H(njhRBA-su^mofS)HEuq6`Is zpZhX=wuLr@u}5s?$!vTSs}H;iJ^n(!PhRxzhyv4f9A)#!Po1QR?G==;?LCU6foHcID(-LOR}UEmY&8drqQ(r{2? z2${(cJ;W4|bOO;pha65F+{zP@ye*vIYS^}oUZ`re^d&f04;k__EXS>=NU3O(mcemH z1J;DlxVLHven=~0FqZl3q~ymmgNKycUWZWV&ll*3Eh`ru=CYCU9`mq3&G9h%`SDKl zMsXmbNbdFBvFx_b2B#o2$EDn-PCsO0{(?Aoh$4vBw~M|t7d|PUR43$G*I~Qf>b}nU zg);-0P7Jkt%_M0h0>uIQsrS-776}p?r<2Lv^%Uiduvcg!it+YPRO%8(l%?jo{V-+h zI^a|Jd}&*up0~==%h-mbr!6r1w9?$F`&mBn^zs~{Z}#C@^ei&J;&$mk%U^!AL6)%c zyvx4RZLGK&%jq4ojfZw#`I{-;>CaZUtVsAdC(SL>D7^+vh;tNJ?aM1DtAa+JDbjf6 zh9qUU6#9d4GTp~3J5(CgFoQuJbEXG}m;&;_i$Y#bD`5bU~IKoZ#rT32q(-9Tpo(%Xp3&Bd_GJcBYxu zP*R+%JgIu*b()B7A#-jT;S#~ktvCtaA%ux37RZ7H#0E;_K`_CIU?Yr0R4Gqgu>4s3XbA>5=Cjo@*1yyddL5&FIT%uC*=>swQvIB zTKqW^=RXU6s;{F6gY!bTThd}?~mfFrSuXWU5pnRQm)PSY27+)5C9le{X zhOF#+<2i%b+nzgf;?c0NgeS^v)NBDea~!;^ysTUGE57&Z>mf(m65t7dWj!W4k>)6n zHlzz;njVf+WqaHdod!-t^R^C?7CBCsbFDJk0QAelBqWqp=J(D&;Ee|Wz8wJ;M8emxWmu;2nJT{Mj`{OF8wM% zN)Ir3aW!FjX$1*JJ0o{9`(Nu)|9LU_e_m|jV8>u#%-{(4@0Mn^jzC~8VLcNPB;z$ov_rk z?wzRmPUM_bRC%~7=Z!w8cvNKy>#qOl*~>KINC%v@Qy;ifD7R3k519;w$|+EfvS67! z3m)!y2L}&@A%{TlJKoKi^fj7(Ah<;|L3-9WHFX@w{Os+@E2oHj@f_yGN3Xz?V?xMC z>Zx(XxbC!cW#1QrGxl3Rc48yqCc|!OL=PsLYiRI>7P?ojka36j zo8K^L8EGRJuBDgr{Sc;vHb?M7;j&l}OzMrUj-Cqke2!JN*jmN+c6i(b!`7U4dDUwp z+}{&mZ!Pqr<@=2Dt&wC|rr=Gw4D(4Wws9ZzTdBEp+#k38l!Q-Pb<-(#b5*a7<@5uDK z^nknON%tY{JU|S;{Z+HVyo;GV#CX+2vq3JMhMfRSzr`E5Vlz?A zv2SWB#tgIcb0Ju9S^3s3!dZJU(Um3@zi~(d=ivkrS4O)-G*1Q{t5>NmsE6b$%E%1S zI}olmCGR5^afo6cwSkdq8sD2R^|B%yAJetAMmE_1P9#%i`xC4cJ?`_4gV$|v>3KdH z9m8MFg;l6It8PH@-(XkUe`Vxc_OO@_yoqeuaw2NOs9YNQ~Q{%6roSdj?m+nVdWVR@xG& zLR42~;dy(DZxqA(a=jGsvg-|IU$|6w)(G*oLdM{hf|Xns;?N?v8PT220z$kctLFvZ7q`{Ad4x`C0=)JA8^#wD$GipYBS6?c>U zZoS<}x3)HMu(Oo=2(!90qKu)kY;u)+>nUPv;OVASz+*1q$$1?RP-yye?=$1s>9NE4 z&f$Pz0OR)H(Z_dZo43!szqT3}-2b-HWpFC4tjmA?+5hd)daLF;zn!m~FYoVKxROxP zI?o5JIJ`R<`p_rf_qEnw9kTo61D5~0qZ0?szVm}G8J}Gmts~zG)2U%Hb8Lq{N9;h2 zOLg?&x)u6@cT|Nfi-Ljbk)#7Hek8as1Op1^w@ypc4vzTj1h!ds$@PrjCQL~wScY(k zEGw2ATyI5eC? z_)frj69`@2g@yy$pY`q(gl7*}b{?`SDNp5YQOJ!B85EWJHU_nm&r=8W=YzOzX@S{m z>Gv7$L~}f-Ey_$BfyXs~g4^Wb5-QC&wvC9wjMz6dRf8qQk7fQm%M=j4-<$pB_3#~u z>30#3HV#^L4h8Nrbj>S7Oy&~X?ClwqQ8n+gmaY7cBy1GY_x(q|S;%%3iQ7yXm8JR; z!`ivw3y~&1`S!7M5ghq2E}R2&On^bBBT!12bVsV~CBkx3C_Yi}yx)UXwqb+KEF8E} z@RF)B5-#3*tQ!+LXP&IEshv&6d(SpLlhtG~l=&_hPtS??)t0+%^*aN%$ zOD{twEw3z9sJ1OnC)+c>sPe6+Pjy?STa}4Pg^8_{y?q~K`{+8U|PdZ?x7=N4t?XgcL&?}u(?GfIcLGboKgu1j4dIKQzr4`PYH(mhfV(;i4a499To3_#&@Zn1 zQF1|)z^`A`t8iC zf7JNy^xjwz^JhJ<3o0yN=5#^zqv93+_Rr)%%I+WK0z>wX7$!z0mS#6f1H?`L7gF#a zkxZ?OY=MIsH)35(1iqIGsT%())~{*7pB25>^S*?H0;ZV1H`Y(_oEG;U^;SoeP2l{`>p;@GnpaBNHIj zzSr-uXY@=3w*VB%AEz9D!smjVfJxj<*phBW?nXCAEf?=lI1QwwLC5S;Z2^f0iG^?T@_4O7_I#nl2j(uNb8_GFe&Q zX4?iVRt+e{{)^|L3AqvdH>Mw>gP1YPjTAvCdz^g$MF>E_b%mme^e-u-T%2r8jc;U$ z(diO|2TV2&u<%@AnFMm5-fXfTid-bzbGEbcypac?_cKQ~piKRYm|+1b^xQeCL8b z0n0sq#R4dzYUb>2=FGyxd~++XUQuPT2h>?b1_R^0LPo>(|0TOoD}SugF;>8K>;ReY z6`~!WUEHkI<--YR)PL83*tdrLmjENS0!9?OLKg^let%2%y@CH7BVm5xOF}?F96&*d zD~w%$zJJU3v$6jjr+h9H`#hj!51^&!6;65azvuj?;r|`sNga8z6`*7spyXAv#!LM@ z;rCAPcZ?RPpFiIM7zqJJ*()mQ%Kbg#l@9TD#KiW5@tnW|iwGF(C9e?oDgF<{e@7}W zvIKV#>$(@vnDh#%joP0`Z|ruW9cr4s08k9@xe7?4@h3oORkI71_4kij5mU*8i-67w zfD3oA`uwxxf~Nln_}v`@d_rM2SBD$Ll}3EVLJAn23NZS`p2*LV3&Jz|leoXofn(8@ z4yL~s8;cT0^bi1k0r+HBfkUnSD=-jI%*gJ?0nzKup8vq+p$H%?1>gY?{S+7Y&INVa z{|Q(LFvai1yq??rCtxl}8kn^Heh|4pyO!zwx{%jXj$gvU``iTk-6#6JsMj;*USd9e za1-Wb{@m+QUe8H&i5L@oGvc)jRo8*9N07e+=1#u}_*b9(y#=nvHot`ZmhmUp8zP-w zm->42yGwZ1!v6yQYqn>5nhi*i@=zZ6Z*8`1O6? zOW^-p0=n3G{9f*Wou7|Q{cA1f=SJk^a>4cWBl4ehfrQnm^dB3S|0cPx%JntEOOn9lzqHD~RJb6yTrpIV Wg$BHsi@5_ASQ9YwRb09F>;C` DATEADD('2016-12-24 20:00:00', 3, 'H')", + "result": "'2016-12-24'
'2016-12-24 23:00:00'", + "paramDescs": [ + "*日期*(必选)", + "*数值*(必选)", + "*单位*(可选)" + ], + "formatString": "DATEADD(日期,数值 , [单位])", + "paramArray": [], + "paramData": [], + "returnType": "date", + "type": "function", + "validForm": "current_data", + "paramCount": 3, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + }, + { + "dataType": "number", + "must": true, + "infinite": false + }, + { + "dataType": "string", + "must": true, + "constType": [ + "Y", + "M", + "D", + "H", + "I", + "S" + ], + "infinite": false + } + ] + }, + { + "name": "DATEDIFF", + "chineseName": "返回两个日期的差值", + "description": "根据指定的单位,返回日期2减去日期1的差值。当日期2小于日期1时,差值为负值。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。", + "example": "DATEDIF('2016-12-21', '2016-12-24')
DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H')", + "result": "3
24", + "paramDescs": [ + "*日期1*(必选)", + "*日期2*(必选)", + "*单位*(可选)" + ], + "formatString": "DATEDIFF(日期1, 日期2, [单位])", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 3, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + }, + { + "dataType": "date", + "must": true, + "infinite": false + }, + { + "dataType": "string", + "must": true, + "constType": [ + "Y", + "M", + "D", + "H", + "I", + "S" + ], + "infinite": false + } + ] + }, + { + "name": "DATEFORMAT", + "chineseName": "返回指定格式的日期", + "description": "将日期转为指定格式返回。
yyyy 将年份显示为1900-9999
yy 将年份显示为00-99
mm 将月份显示为 01–12
dd 将日期显示为 01–31", + "example": "DATEFORMAT('2016-12-24', 'YY-MM-DD')", + "result": "2016-12-24", + "paramDescs": [ + "*日期*(必选)", + "*日期格式*(必选)" + ], + "formatString": "DATEFORMAT(日期, 可选格式)", + "paramArray": [], + "paramData": [], + "returnType": "date", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + }, + { + "dataType": "string", + "must": true, + "infinite": false + } + ] + }, + { + "name": "YEAR", + "chineseName": "返回日期中的年", + "description": "返回指定日期中的年。", + "example": "YEAR('2016-12-24')", + "result": "2016", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "YEAR(日期)", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + } + ] + }, + { + "name": "MONTH", + "chineseName": "返回日期中的月", + "description": "返回指定日期中的月。", + "example": "MONTH('2016-12-24')", + "result": "12", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "MONTH(日期)", + "paramArray": [ + "String" + ], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + } + ] + }, + { + "name": "DAY", + "chineseName": "返回日期中的日", + "description": "返回指定日期中的日。", + "example": "DAY('2016-12-24')", + "result": "24", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "DAY(日期)", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + } + ] + }, + { + "name": "HOUR", + "chineseName": "返回日期中的小时", + "description": "返回指定日期中的小时。", + "example": "HOUR('2016-12-24 20:30:56')", + "result": "20", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "HOUR(日期)", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + } + ] + }, + { + "name": "MINUTE", + "chineseName": "返回日期中的分钟", + "description": "返回指定日期中的分钟。", + "example": "MINUTE('2016-12-24 20:30:56')", + "result": "30", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "MINUTE(日期)", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + } + ] + }, + { + "name": "SECOND", + "chineseName": "返回日期中的秒", + "description": "返回指定日期中的秒钟。", + "example": "SECOND('2016-12-24 20:30:56')", + "result": "56", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "SECOND(日期)", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + } + ] + }, + { + "name": "WEEKNUM", + "chineseName": "返回日期为第几周", + "description": "返回指定日期为第几周,从每年第1天开始算第1周。", + "example": "WEEKNUM('2016-12-24')", + "result": "52", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "WEEKNUM(日期)", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + } + ] + }, + { + "name": "WEEKDAY", + "chineseName": "返回日期为星期几", + "description": "返回指定日期为星期几。返回值为0~6,代表周日~周六。", + "example": "WEEKDAY('2016-12-24')", + "result": "6", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "WEEKDAY(日期)", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + } + ] + }, + { + "name": "EOMONTH", + "chineseName": "返回某月最后一天日期", + "description": "将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。", + "example": "EOMONTH('2021-11-07', -2)", + "result": "2021-09-30", + "paramDescs": [ + "*日期*(必选)", + "*数值*(必选)" + ], + "formatString": "EOMONTH(日期,指定日期之前或之后的月数)", + "paramArray": [], + "paramData": [], + "returnType": "string", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + }, + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + }, + { + "name": "CURRYEAR", + "chineseName": "返回当前年份", + "description": "取当前日期的年份。", + "example": "假设当前时间为:2022年2月17日 11:20:30 ,CURRYEAR()", + "result": "2022", + "formatString": "CURRYEAR()", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 0 + }, + { + "name": "CURRMONTH", + "chineseName": "返回当前月份", + "description": "取当前日期的月份。", + "example": "假设当前时间为:2022年2月17日 11:20:30 ,CURRMONTH()", + "result": "2", + "formatString": "CURRMONTH()", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 0 + }, + { + "name": "CURRDAY", + "chineseName": "返回当前第几日(当月)", + "description": "取当前日期的天。", + "example": "假设当前时间为:2022年2月17日 11:20:30 ,CURRDAY()", + "result": "17", + "formatString": "CURRDAY()", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 0 + }, + { + "name": "CURRWEEK", + "chineseName": "返回当前是周几", + "description": "取当前日期是周几。", + "example": "假设当前时间为:2022年2月17日 11:20:30 ,CURRWEEK()", + "result": "4", + "formatString": "CURRWEEK()", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 0 + }, + { + "name": "CURRHOUR", + "chineseName": "返回当前小时", + "description": "取当前日期的小时。", + "example": "假设当前时间为:2022年2月17日 11:20:30 ,CURRHOUR()", + "result": "11", + "formatString": "CURRHOUR()", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 0 + }, + { + "name": "CURRMINUTE", + "chineseName": "返回当前分", + "description": "取当前日期的分钟。", + "example": "假设当前时间为:2022年2月17日 11:20:30 ,CURRMINUTE()", + "result": "20", + "formatString": "CURRMINUTE()", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 0 + }, + { + "name": "CURRSECOND", + "chineseName": "返回当前秒", + "description": "取当前日期的秒钟。", + "example": "假设当前时间为:2022年2月17日 11:20:30 ,CURRSECOND()", + "result": "30", + "formatString": "CURRSECOND()", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 0 + }, + { + "name": "MAXDATE", + "chineseName": "返回一组日期中的最大值", + "description": "取一组日期中的最大值。", + "example": "MAXDATE('2016-12-24', '2022-12-24')", + "result": "2022-12-24", + "paramDescs": [ + "*日期1*(必选)", + "*日期2*(必选)" + ], + "formatString": "MAXDATE(日期1,日期2,……)", + "paramArray": [], + "paramData": [], + "returnType": "date", + "type": "function", + "validForm": "current_data", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": true + } + ] + }, + { + "name": "MINDATE", + "chineseName": "返回一组日期中的最小值", + "description": "取一组日期中的最小值。", + "example": "MINDATE('2016-12-24', '2022-12-24')", + "result": "2016-12-24", + "paramDescs": [ + "*日期1*(必选)", + "*日期2*(必选)" + ], + "formatString": "MINDATE(日期1,日期2,……)", + "paramArray": [], + "paramData": [], + "returnType": "date", + "type": "function", + "validForm": "current_data", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": true + } + ] + }, + { + "name": "COMPAREDATE", + "chineseName": "返回两个日期指定时间的差值", + "description": "日期比较,返回两个日期指定时间域的差值。可比较的时间域包括'Y'-比较年;'M'-比较月;'D'-比较日;'H'-比较小时;'I'-比较分钟;'S'-比较秒。", + "example": "假设 日期1=2022-04-03、日期2=2022-04-04,COMPAREDATE({日期1},{日期2},'D')", + "result": "1", + "paramDescs": [ + "*日期1*(必选)", + "*日期2*(必选)", + "*比较类型*(可选)" + ], + "formatString": "COMPAREDATE(日期1,日期2,[比较类型])", + "paramArray": [], + "paramData": [], + "returnType": "date", + "type": "function", + "validForm": "current_data", + "paramCount": 3, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + }, + { + "dataType": "date", + "must": true, + "infinite": false + }, + { + "dataType": "string", + "must": true, + "infinite": false + } + ] + }, + { + "name": "TIMESTAMPTODATE", + "chineseName": "返回时间戳转换后的日期", + "description": "将时间戳按指定格式转换成日期。", + "example": "TIMESTAMPTODATE('1671172579', 'yyyy-MM-dd HH:mm:ss')", + "result": "2022-12-16 14:36:19", + "paramDescs": [ + "*时间戳*(必选)", + "*日期格式*(可选,默认yyyy-MM-dd HH:mm:ss)" + ], + "formatString": "TIMESTAMPTODATE(时间戳,日期格式)", + "paramArray": [], + "paramData": [], + "returnType": "string", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + }, + { + "dataType": "string", + "must": false, + "infinite": false + } + ] + }, + { + "name": "DATETOTIMESTAMP", + "chineseName": "返回日期转换后的时间戳", + "description": "将日期转换成时间戳。", + "example": "DATETOTIMESTAMP('2022-12-16 14:36:19'", + "result": "'1671172579'", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "DATETOTIMESTAMP(日期)", + "paramArray": [], + "paramData": [], + "returnType": "string", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": false + } + ] + }, + { + "name": "DATE", + "chineseName": "拼接日期字符串", + "description": "拼接日期", + "example": "DATE('2022','12','16')", + "result": "'2022-12-16'", + "paramDescs": [ + "*日期字符*(必选)" + ], + "formatString": "DATE({年},{月},{日})", + "paramArray": [], + "paramData": [], + "returnType": "string", + "type": "function", + "validForm": "current_data", + "paramCount": 3, + "paramStatuses": [ + { + "dataType": "string", + "must": true, + "infinite": false + }, + { + "dataType": "string", + "must": true, + "infinite": false + }, + { + "dataType": "string", + "must": true, + "infinite": false + } + ] + }, + { + "name": "DAYS", + "chineseName": "计算两个日期自建的间隔天数", + "description": "计算两个日期的间隔天数", + "example": "DAYS('2022-12-16','2022-12-18')", + "result": "2", + "paramDescs": [ + "*日期字符*(必选)" + ], + "formatString": "DAYS({日期},{日期})", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "string", + "must": true, + "infinite": false + }, + { + "dataType": "string", + "must": true, + "infinite": false + } + ] + } + ], + "dataType": "date", + "name": "日期函数", + "action": "DataSource", + "type": "functions" + }, + { + "children": [ + { + "name": "IF", + "chineseName": "如果条件为真,则...否则...", + "description": "如果条件为真,则执行表达式1,为假则执行表达式2。条件中不可嵌套使用IF函数。", + "example": "IF({员工表.年龄} > 60, '退休', '在职')
IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')", + "result": "'退休'
'在职'", + "paramDescs": [ + "*条件*(必选)", + "*表达式1*(必选)", + "*表达式2*(必选)" + ], + "formatString": "IF(条件, 表达式1, 表达式2)", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": 3, + "paramStatuses": [ + { + "dataType": "boolean", + "must": true, + "infinite": false + }, + { + "dataType": "all", + "must": true, + "infinite": false + }, + { + "dataType": "all", + "must": true, + "infinite": false + } + ] + }, + { + "name": "AND", + "chineseName": "且", + "description": "所有条件均为真,则返回真,否则返回假。逻辑操作AND的函数模式。", + "example": "AND(2 = 2, 2 < 2)", + "result": "false", + "paramDescs": [ + "*条件1*(必选)", + "*条件2*(可选,可输入多个参数)" + ], + "formatString": "AND(条件1, 条件2, [条件3, …])", + "paramArray": [], + "paramData": [], + "returnType": "boolean", + "type": "function", + "validForm": "current_data", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "boolean", + "must": true, + "infinite": true + } + ] + }, + { + "name": "OR", + "chineseName": "或", + "description": "任意一个条件为真,则返回真,否则返回假。逻辑操作OR的函数模式。", + "example": "OR(2 = 2, 2 > 3)", + "result": "true", + "paramDescs": [ + "*条件1*(必选)", + "*条件2*(可选,可输入多个参数)" + ], + "formatString": "OR(条件1, 条件2, [条件3, …])", + "paramArray": [], + "paramData": [], + "returnType": "boolean", + "type": "function", + "validForm": "current_data", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "boolean", + "must": true, + "infinite": true + } + ] + }, + { + "name": "NOT", + "chineseName": "反转真假结果", + "description": "对逻辑结果取反。", + "example": "NOT(2 > 3)", + "result": "true", + "paramDescs": [ + "*逻辑结果*(必选)" + ], + "formatString": "NOT(逻辑结果)", + "paramArray": [], + "paramData": [], + "returnType": "boolean", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "boolean", + "must": true, + "infinite": false + } + ] + }, + { + "name": "IN", + "chineseName": "变量是否包含在一组结果中", + "description": "任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。", + "example": "IN(2, [2, 3, 4])", + "result": "true", + "paramDescs": [ + "*变量*(必选)", + "*变量数组*(必选)" + ], + "formatString": "IN(变量, [变量1, 变量2, …])", + "paramArray": [], + "paramData": [ + "{}", + "[]" + ], + "returnType": "boolean", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "all", + "must": true, + "infinite": false + }, + { + "dataType": "array", + "must": true, + "infinite": false + } + ] + }, + { + "name": "LIKE", + "chineseName": "文本是否包含任意一个关键字", + "description": "文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个,则返回真。逻辑操作LIKE的函数模式。", + "example": "LIKE('大家好', ['大家', '好'])", + "result": "true", + "paramDescs": [ + "*文本*(必选)", + "*文本数组*(必选)" + ], + "formatString": "LIKE(文本, [文本1, 文本2, …])", + "paramArray": [], + "paramData": [ + "{}", + "[]" + ], + "returnType": "boolean", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "string", + "must": true, + "infinite": false + }, + { + "dataType": "array", + "must": true, + "infinite": false + } + ] + }, + { + "name": "ISEMPTY", + "chineseName": "是否为空", + "description": "变量为空或未填写,则返回真。", + "example": "ISEMPTY({员工表.电话})", + "result": "true", + "paramDescs": [ + "*变量或常量*(可选)" + ], + "formatString": "ISEMPTY(变量)", + "paramArray": [], + "paramData": [], + "returnType": "boolean", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "all", + "must": true, + "infinite": false + } + ] + }, + { + "name": "TRUE", + "chineseName": "返回真", + "description": "返回真。", + "example": "TRUE()", + "result": "true", + "formatString": "TRUE()", + "paramArray": [], + "paramData": [], + "returnType": "boolean", + "type": "function", + "validForm": "current_data", + "paramCount": 0 + }, + { + "name": "FALSE", + "chineseName": "返回假", + "description": "返回假。", + "example": "FALSE()", + "result": "false", + "formatString": "FALSE()", + "paramArray": [], + "paramData": [], + "returnType": "boolean", + "type": "function", + "validForm": "current_data", + "paramCount": 0 + }, + { + "name": "IFS", + "chineseName": "多条件", + "description": "多个条件判断,位于单数位置的参数设置为条件,位于双数位置的参数设置为结果,最后一个参数为默认返回值,当所有条件都不满足的时候返回默认参数。", + "example": "IFS(1>1,1,1=1,2,0)", + "result": "2", + "paramDescs": [ + "*条件1*(必选)", + "*变量或常量*(必选)", + "*条件2*(必选)", + "*变量或常量*(必选)", + "*变量或常量*(必选)" + ], + "formatString": "IFS({条件1},{结果1},{条件2},{结果2}...{默认结果})", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "boolean", + "must": true, + "infinite": false + }, + { + "dataType": "all", + "must": true, + "infinite": false + }, + { + "dataType": "all", + "must": true, + "infinite": false + } + ] + }, + { + "name": "SWITCH", + "chineseName": "条件选择", + "description": "条件选择。", + "example": "SWITCH({字段1},1,'A',2,'B','C')", + "result": "假设字段1为2,结果:'B'", + "paramDescs": [ + "*变量或常量*(必选)", + "*变量或常量*(必选)", + "*变量或常量*(必选)", + "*变量或常量*(可选)", + "*变量或常量*(可选)", + "*变量或常量*(必选)" + ], + "formatString": "SWITCH({变量},{条件1},{结果1},{条件2},{结果2}...{默认结果})", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "all", + "must": true, + "infinite": false + }, + { + "dataType": "all", + "must": true, + "infinite": false + }, + { + "dataType": "all", + "must": true, + "infinite": false + } + ] + }, + { + "name": "SORT", + "chineseName": "条件排序", + "description": "根据排序条件进行字符和数字的排序,UP为升序,DOWN为降序。", + "example": "SORT(1,2,5,4,3,'UP')", + "result": "[1,2,3,4,5]", + "paramDescs": [ + "*字符或数字*(必选)", + "*字符或数字*(可选)", + "......", + "*排序方式*" + ], + "formatString": "SORT({变量1},{变量2},{变量3}...{排序方式})", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "array", + "must": true, + "infinite": false + }, + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + }, + { + "name": "IFERROR", + "chineseName": "异常处理", + "description": "异常处理函数", + "example": "IFERROR(10/0,'0')", + "result": "0", + "paramDescs": [ + "*公式内容*" + ], + "formatString": "IFERROR({变量},{变量})", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "all", + "must": true, + "infinite": false + } + ] + } + ], + "dataType": "logic", + "name": "逻辑函数", + "action": "DataSource", + "type": "functions" + }, + { + "children": [ + { + "name": "ROUNDUP", + "chineseName": "向上舍入", + "description": "根据设置的小数位精确度,返回对数值向上舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向上舍入到指定的小数位。如果小数位精确度等于 0,则向上舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。", + "example": "ROUNDUP(76.9,0)", + "result": "77", + "paramDescs": [ + "*数字*(必选)", + "*小数位精确度*(可选)" + ], + "formatString": "ROUNDUP(数字, [小数位精确度])", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": false + }, + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + }, + { + "name": "ROUND", + "chineseName": "四舍五入", + "description": "根据设置的小数位精确度,返回对数值四舍五入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,针对小数点后的数据进行四舍五入;如果小数位精确度等于 0,返回最接近数值的整数;如果小数位精确度为负整数,针对小数点前的数据进行四舍五入,被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。", + "example": "ROUND(123.456,2),ROUND(123.456,0),ROUND(123.456,-2)", + "result": "依次为123.46,123,100", + "paramDescs": [ + "*数字*(必选)", + "*小数位精确度*(可选)" + ], + "formatString": "ROUND(数字, [小数位精确度])", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": false + }, + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + }, + { + "name": "ROUNDDOWN", + "chineseName": "向下舍入", + "description": "根据设置的小数位精确度,返回对数值向下舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向下舍入到指定的小数位。如果小数位精确度等于 0,则向下舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。", + "example": "ROUNDDOWN(76.9,0)", + "result": "76", + "paramDescs": [ + "*数字*(必选)", + "*小数位精确度*(可选)" + ], + "formatString": "ROUNDDOWN(数字, [小数位精确度])", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": false + }, + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + }, + { + "name": "AGGREGATION", + "chineseName": "聚合运算", + "description": "将一组数据进行统计计算,支持最大值(MAX)、最小值(MIN)、平均值(AVG)。", + "example": "AGGREGATION(1 , 2,3,'AVG')", + "result": "2", + "paramDescs": [ + "*数字*(必选)", + "*聚合运算类型*(必选)" + ], + "formatString": "AGGREGATION({数字}...,{聚合运算类型})", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": true + }, + { + "dataType": "string", + "must": true, + "constType": [ + "avg", + "max", + "min" + ], + "infinite": false + } + ] + }, + { + "name": "MOD", + "chineseName": "求余", + "description": "将两个参数进行除法运算然后得出余数返回。", + "example": "MOD( 7 , 3 )", + "result": "1", + "paramDescs": [ + "*数字*(必选)", + "*数字*(必选)" + ], + "formatString": "ROUNDDOWN({数字},{数字})", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": false + }, + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + }, + { + "name": "TRUNC", + "chineseName": "数字格式化", + "description": "将小数点格式化成指定位数。", + "example": "TRUNC( 2.123 , 2 )", + "result": "2.12", + "paramDescs": [ + "*数字*(必选)", + "*精度*(必选)" + ], + "formatString": "ROUNDDOWN({数字},{精度})", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": false + }, + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + }, + { + "name": "CALDTROW", + "chineseName": "明细逐行计算函数", + "description": "明细逐行计算", + "example": "假设:明细有金额1、金额2、金额3等三个控件,明细行数为2,第一行值分别为:5、6、10,第二行的值分别为:1、1、9。CALDTROW({金额3}==10,{金额1}+{金额2})", + "result": "当金额3等于10的时候运算加法,只有第一行的金额3等于10,明细第一行的金额3赋值为11", + "paramDescs": [ + "*字段*(必选)", + "*公式或字段*(必选)" + ], + "formatString": "CALDTROW({字段},{公式或字段})", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "boolean", + "must": true, + "infinite": false + }, + { + "dataType": "all", + "must": true, + "infinite": false + } + ] + }, + { + "name": "ABS", + "chineseName": "绝对值", + "description": "绝对值", + "example": "ABS(-9)", + "result": "9", + "paramDescs": [ + "*字段*(必选)" + ], + "formatString": "ABS({字段})", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + }, + { + "name": "RANDOM", + "chineseName": "随机数生成", + "description": "随机数生成", + "example": "RANDOM(5,'NUM')", + "result": "26489", + "paramDescs": [ + "*数字*(必选)", + "*文本*(必选)[NUM(数字)、CHAR(字符)、FIX(字符与数字混合)]" + ], + "formatString": "RANDOM({随机数长度},{随机类型})", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "boolean", + "must": true, + "infinite": false + }, + { + "dataType": "all", + "must": true, + "infinite": false + } + ] + }, + { + "name": "POWER", + "chineseName": "N次方", + "description": "计算数值的N次方", + "example": "POWER(2, 2)
POWER(4, 1/2)", + "result": "4
2", + "paramDescs": [ + "*数字*(必选)", + "*数字*(必选,N次方的N)" + ], + "formatString": "POWER({数字}, {数字})", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": 2, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": false + }, + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + }, + { + "name": "SQRT", + "chineseName": "根号", + "description": "将数值开根号", + "example": "SQRT(4)", + "result": "2", + "paramDescs": [ + "*数字*(必选)" + ], + "formatString": "SQRT({数字})", + "paramArray": [], + "paramData": [], + "returnType": "all", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + } + ], + "dataType": "math", + "name": "数学函数", + "action": "DataSource", + "type": "functions" + }, + { + "children": [ + { + "name": "GETMONEY", + "chineseName": "获取所给定数字的金额大写", + "description": "将金额转换成中文金额大写。", + "example": "GETMONEY({1234})", + "result": "壹仟贰佰叁拾肆元整", + "paramDescs": [ + "*数字*(必选)" + ], + "formatString": "GETMONEY({数字})", + "paramData": [], + "returnType": "", + "type": "function", + "validForm": "current_data", + "paramCount": 1, + "paramStatuses": [ + { + "dataType": "number", + "must": true, + "infinite": false + } + ] + } + ], + "dataType": "finance", + "name": "财务函数", + "action": "DataSource", + "type": "functions" + } + ] +} \ No newline at end of file diff --git a/src/com/engine/salary/formlua/core/QlExpress.java b/src/com/engine/salary/formlua/core/QlExpress.java index 16b716b7c..30ef2af57 100644 --- a/src/com/engine/salary/formlua/core/QlExpress.java +++ b/src/com/engine/salary/formlua/core/QlExpress.java @@ -1,6 +1,5 @@ package com.engine.salary.formlua.core; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.engine.salary.formlua.entity.parameter.DataType; import com.engine.salary.formlua.entity.parameter.FuncNames; @@ -16,7 +15,6 @@ import com.engine.salary.formlua.func.math.MathFuncsService; import com.engine.salary.formlua.func.math.MathFuncsServiceImpl; import com.engine.salary.formlua.func.string.StringFormulaService; import com.engine.salary.formlua.func.string.StringFormulaServiceImpl; -import com.engine.salary.formlua.util.ExcelParamUtil; import com.engine.salary.formlua.util.ExpressRegularUtil; import com.ql.util.express.DynamicParamsUtil; import com.ql.util.express.ExpressRunner; @@ -29,7 +27,7 @@ import java.util.Map; import java.util.regex.PatternSyntaxException; /** - * 考勤执行业务类 + * 执行业务类 */ public class QlExpress { @@ -79,12 +77,11 @@ public class QlExpress { // threadLocalData.setExpressContext(context); // ParamContext.get().setValue("formulaParam",threadLocalData); // ParamContext.get().setValue("currentUser",simpleEmployee); - Object obj = null; try { ExpressRegularUtil.checkFuncExpress(expressSql); expressSql = expressSql.replaceAll("\\{", ""); expressSql = expressSql.replaceAll("\\}", ""); - obj = runner.execute(expressSql, expressContext, null, true, false); + Object obj = runner.execute(expressSql, expressContext, null, true, false); JSONObject resultObj = new JSONObject(); if (obj != null) { resultObj.put("excute", true); @@ -116,58 +113,12 @@ public class QlExpress { } } } - JSONObject errorJSON = new JSONObject(); - if (null == jsonError) { - errorJSON.put("error", "参数为空"); - obj = errorJSON; - - JSONObject resultObj = new JSONObject(); - resultObj.put("data", ""); - resultObj.put("excute", false); - return resultObj; - } - try { - errorJSON = JSON.parseObject(jsonError); - } catch (Exception ex) { - errorJSON.put("error", "参数为空"); - obj = errorJSON; - - JSONObject resultObj = new JSONObject(); - resultObj.put("data", ""); - resultObj.put("excute", false); - return resultObj; - } - if (!(e instanceof PatternSyntaxException)) { - String func = errorJSON.getString("func"); - int funcIdx = errorJSON.getInteger("errorFunc"); - String[] funcSplit = statement.split(func); - int startError = 1; - int loopLength = funcSplit.length - funcIdx; - for (int i = 0; i < loopLength; i++) { - if (loopLength > 1 && i == 0) { - startError += funcSplit[i].length() + func.length(); - } else { - startError += funcSplit[i].length(); - } - } - int startIdx = startError; - int endIdx = startError + func.length() - 1; - Map replaceMap = ExcelParamUtil.replaceErrorPlace(startIdx, endIdx, func, expressSql, context); - errorJSON.put("errorIdx", replaceMap.get("startIdx")); - errorJSON.put("errorEndIdx", replaceMap.get("endIdx")); - - } - if (errorJSON.containsKey("error") && null != errorJSON.getString("msg") && !ExpressRegularUtil.isContainChinese(errorJSON.getString("msg"))) { - errorJSON.put("error", "校验失败或参数错误"); - } - - errorJSON.remove("errorFunc"); - errorJSON.remove("formula"); - errorJSON.remove("func"); - errorJSON.remove("errorData"); - obj = errorJSON; + JSONObject resultObj = new JSONObject(); + resultObj.put("excute", false); + resultObj.put("data", ""); + resultObj.put("err", jsonError); + return resultObj; } - return obj; } private void initRunner(ExpressRunner runner) { diff --git a/src/com/engine/salary/formlua/core/QlExpressTest.java b/src/com/engine/salary/formlua/core/QlExpressTest.java new file mode 100644 index 000000000..d981054d6 --- /dev/null +++ b/src/com/engine/salary/formlua/core/QlExpressTest.java @@ -0,0 +1,27 @@ +package com.engine.salary.formlua.core; + +import com.alibaba.fastjson.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +/** + * 执行业务类 + */ +public class QlExpressTest { + + public static void main(String[] args) { + QlExpress express = new QlExpress(); + Map context = new HashMap<>(); + context.put("a", 1); + context.put("b", 2); + context.put("c", 3); + String formula = "AGGREGATION(a+b,0,'AVG')"; + + Object execute = express.execute(formula, context); + if(execute instanceof JSONObject){ + Object data = ((JSONObject) execute).get("data"); + System.out.println(data); + } + } +} diff --git a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java index ec8cf3bda..a0ea79549 100644 --- a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java +++ b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java @@ -129,13 +129,12 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService boolean isCustomFunction = true; String extendParam = expressFormula.getExtendParam(); - String formulaType; try { JsonNode jsonNode = objectMapper.readTree(extendParam); //返回值配置 JsonNode isCustomFunctionNode = jsonNode.get("isCustomFunction"); if (isCustomFunctionNode != null) { - isCustomFunction = StringUtils.equals(isCustomFunctionNode.asText().trim(), "true"); + isCustomFunction = StringUtils.equals(isCustomFunctionNode.asText().trim(), "1"); } } catch (JsonProcessingException e) { log.error("express execute fail, sql extendParam parse fail", e); diff --git a/src/com/engine/salary/web/SalaryFormulaController.java b/src/com/engine/salary/web/SalaryFormulaController.java index 44932a485..f3d611dcc 100644 --- a/src/com/engine/salary/web/SalaryFormulaController.java +++ b/src/com/engine/salary/web/SalaryFormulaController.java @@ -9,6 +9,8 @@ import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.util.ResponseResult; import com.engine.salary.wrapper.SalaryFormulaWrapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; import weaver.hrm.HrmUserVarify; @@ -19,6 +21,7 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -28,7 +31,7 @@ public class SalaryFormulaController { private SalaryFormulaWrapper getSalaryFormulaWrapper(User user) { - return (SalaryFormulaWrapper) ServiceUtil.getService(SalaryFormulaWrapper.class, user); + return ServiceUtil.getService(SalaryFormulaWrapper.class, user); } //变量项 @@ -95,7 +98,14 @@ public class SalaryFormulaController { @GET @Path("/des") @Produces(MediaType.APPLICATION_JSON) - public String mock(@Context HttpServletRequest request, @Context HttpServletResponse response) { + public String des(@Context HttpServletRequest request, @Context HttpServletResponse response) { + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode jsonNode = mapper.readTree(this.getClass().getClassLoader().getResourceAsStream("com/engine/salary/constant/des.json")); + return jsonNode.toString(); + } catch (IOException e) { + e.printStackTrace(); + } return "{\"data\":[{\"children\":[{\"name\":\"CONCAT\",\"chineseName\":\"链接多个文本\",\"description\":\"可用于连接多个任意类型的文本、日期、数字变量或常量。最后一个字符可使用'#分隔符#'标记为分隔符\",\"example\":\"CONCAT({总价}/10000, '万元')\",\"result\":\"100万元\",\"paramDescs\":[\"*文本1*(必选)\",\"*文本2*(可选)\",\"......\"],\"formatString\":\"CONCAT(文本1, 文本2, [文本3, …],[#分隔符#])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":true}]},{\"name\":\"TEXT\",\"chineseName\":\"将变量转为文本\",\"description\":\"将变量转为文本。\",\"example\":\"TEXT({当前数据.性别})\",\"result\":\"'男'\",\"paramDescs\":[\"*变量*(必选)\"],\"formatString\":\"TEXT(变量)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"VALUE\",\"chineseName\":\"将文本转为数字\",\"description\":\"将文本转为数字。\",\"example\":\"VALUE('23')\",\"result\":\"23\",\"paramDescs\":[\"*文本、数字、选项*(必选)\"],\"formatString\":\"VALUE([文本、数字、选项])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"LEN\",\"chineseName\":\"返回文本长度\",\"description\":\"返回文本的长度,中文、英文都算1个字符。\",\"example\":\"LEN('大家好dajiahao')\",\"result\":\"12\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"LEN(文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"SEARCH\",\"chineseName\":\"在文本中查找关键字\",\"description\":\"在指定文本中查找关键字,返回第一次出现关键字的字符位置,文本的第一个字记为1。未找到,返回0。搜索开始位置,表示从文本的第几个字符开始搜索,默认为1。\",\"example\":\"SEARCH('大家', '大家好大家好', 3)\",\"result\":\"4\",\"paramDescs\":[\"*文本关键字*(必选)\",\"*文本*(必选)\",\"*搜索开始位置*(可选)\"],\"formatString\":\"SEARCH(关键字, 文本, [搜索开始位置])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":false,\"infinite\":false}]},{\"name\":\"REPLACE\",\"chineseName\":\"替换文本中的字\",\"description\":\"在原文本中,从替换位置开始,往后数指定的替换字符数,将这段文本替换为新文本。\",\"example\":\"REPLACE('大家好大家好', 2, 3, 'dajia')\",\"result\":\"'大dajia家好'\",\"paramDescs\":[\"*文本*(必选)\"],\"formatString\":\"REPLACE(原文本, 替换开始位置, 替换字符数, 新文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"REPT\",\"chineseName\":\"将文本重复指定次数\",\"description\":\"将文本重复指定次数。\",\"example\":\"REPT('大家', 2)\",\"result\":\"'大家大家'\",\"paramDescs\":[\"*文本*(必选)\",\"*重复次数*(必选)\"],\"formatString\":\"REPT(文本, 重复次数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"PAD\",\"chineseName\":\"将文本填充至指定长度\",\"description\":\"将原文本填充到指定长度,如果文本长度大于设置的长度,则不做任何操作。填充位置可用参数:'LEFT'、'RIGHT'。\",\"example\":\"PAD('你好', 4, '你', 'LEFT')\",\"result\":\"'你你你好'\",\"paramDescs\":[\"*原文本*(必选)\",\"*长度*(必选)\",\"*填充用的文本*(必选)\",\"*填充位置*(可选)\"],\"formatString\":\"PAD(原文本, 长度, 填充用的文本, [填充位置])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"RIGHT\",\"LEFT\"],\"infinite\":false}]},{\"name\":\"TRIM\",\"chineseName\":\"清除前后空格\",\"description\":\"删除文本首尾的空格。\",\"example\":\"TRIM(' 大家好 ')\",\"result\":\"'大家好'\",\"paramDescs\":[\"*文本*(必选)\"],\"formatString\":\"TRIM(文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LEFT\",\"chineseName\":\"返回文本左侧开始的文字\",\"description\":\"从文本左侧开始,返回指定字符数的文字。\",\"example\":\"LEFT('大家好', 2)\",\"result\":\"'大家'\",\"paramDescs\":[\"*文本*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"LEFT(文本, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"RIGHT\",\"chineseName\":\"返回文本右侧开始的文字\",\"description\":\"从文本右侧开始,返回指定字符数的文字。\",\"example\":\"RIGHT('大家好', 2)\",\"result\":\"'家好'\",\"paramDescs\":[\"*文本*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"RIGHT(文本, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"MID\",\"chineseName\":\"返回文本指定位置开始的文字\",\"description\":\"从文本指定位置之后开始,返回指定字符数的文字。\",\"example\":\"MID('大家好', 2, 1)\",\"result\":\"'家'\",\"paramDescs\":[\"*文本*(必选)\",\"*指定位置*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"MID(文本, 指定位置, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"SCORE\",\"chineseName\":\"获取选项型控件分数\",\"description\":\"获取选项型控件(单选框、复选框、下拉菜单)分数。\",\"example\":\"SCORE({当前数据.单选框})\",\"result\":\"选项分数(注:未设置选项分数时,结果为0)\",\"paramDescs\":[\"*选项*(必选)\"],\"formatString\":\"SCORE({选项})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false}]},{\"name\":\"IDCARD\",\"chineseName\":\"身份证函数\",\"description\":\"从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。\",\"example\":\"IDCARD( ‘43070319980706334X’ , ‘BD’ )\",\"result\":\"'1998-07-06'\",\"paramDescs\":[\"*身份证号码*(必选)\",\"*查找类型*(必选)\"],\"formatString\":\"IDCARD({身份证号码}, {查找类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"BD\",\"NA\",\"AGE\",\"GENDER\"],\"infinite\":false}]},{\"name\":\"ISSTRING\",\"chineseName\":\"是否是字符串\",\"description\":\"判断是否是字符。\",\"example\":\"ISSTRING('泛微123456')\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"ISSTRING({任意控件})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISJSON\",\"chineseName\":\"JSON字符格式化\",\"description\":\"判断是不是JSON字符串,参数可以是数组,也可以是字符串,参数为数组时数组中必须只包含一个字符串。\",\"example\":\"假设文本控件={a:123},ISJSON({文本控件})\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"ISJSON({变量})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETJSONVALUE\",\"chineseName\":\"JSON字符取值\",\"description\":\"获取JSON值。第一个参数为json,可以是数组也可以是对象;第二个参数为json对象的键值,返回键值对应的值,json为数组时返回的多个值以逗号分隔\",\"example\":\"假设文本控件={a:123},GetJSONValue('{文本控件}','a')\",\"result\":\"123\",\"paramDescs\":[\"*变量或常量*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"GETJSONVALUE({变量1},变量2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISINT\",\"chineseName\":\"字符内容是否是整数\",\"description\":\"判断字符内容是否是整数\",\"example\":\"ISINT( 2.123 )\",\"result\":\"false\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"ISINT({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISNUMBER\",\"chineseName\":\"字符内容是否是数字\",\"description\":\"判断字符内容是否是数字。\",\"example\":\"ISNUMBER('2.123')\",\"result\":\"true\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"ISNUMBER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"SPLIT\",\"chineseName\":\"字符分割\",\"description\":\"字符分割函数,将字符以指定字符为依据分割字符为一组字符\",\"example\":\"假设文本控件=ABC#DEF,SPLIT('{文本控件}','#')\",\"result\":\"[ABC,DEF]\",\"paramDescs\":[\"*字符*(必选)\",\"*分割符*(必选)\"],\"formatString\":\"SPLIT({字符},{字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LOWER\",\"chineseName\":\"字符转小写\",\"description\":\"将字符中的字母转为小写。\",\"example\":\"LOWER('ABC')\",\"result\":\"abc\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"LOWER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"UPPER\",\"chineseName\":\"字符转大写\",\"description\":\"将字符中的字母转为大写。\",\"example\":\"UPPER('abc')\",\"result\":\"ABC\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"UPPER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"TEXTBEFORE\",\"chineseName\":\"截取N个分割符之前的字符\",\"description\":\"截取N个分割符之前的字符\",\"example\":\"TEXTBEFORE('abc-12','-',1)\",\"result\":\"abc\",\"paramDescs\":[\"*字符*(必选)\",\"*字符*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"TEXTBEFORE({目标文本},{分隔符},{索引下标})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"TEXTAFTER\",\"chineseName\":\"截取N个分隔符之后的字符\",\"description\":\"截取N个分隔符之后的字符\",\"example\":\"TEXTAFTER('abc-12','-',1)\",\"result\":\"12\",\"paramDescs\":[\"*字符*(必选)\",\"*字符*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"TEXTAFTER({目标文本},{分隔符},{索引下标})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"char\",\"name\":\"字符函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"COUNT\",\"chineseName\":\"计数\",\"description\":\"返回指定表格中满足条件的数据条数。\",\"example\":\"COUNT({员工表})\",\"result\":\"1\",\"paramDescs\":[\"*表*(必选)\"],\"formatString\":\"COUNT(表)\",\"paramArray\":[\"Form\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"SUM\",\"chineseName\":\"求和\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的总和。统计条件中不可嵌套使用统计函数。\",\"example\":\"SUM({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"SUM(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"AVG\",\"chineseName\":\"平均值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的平均值。统计条件中不可嵌套使用统计函数。\",\"example\":\"AVG({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"AVG(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"MIN\",\"chineseName\":\"最小值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的最小值。统计条件中不可嵌套使用统计函数。\",\"example\":\"MIN({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"MIN(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"MAX\",\"chineseName\":\"最大值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的最大值。统计条件中不可嵌套使用统计函数。\",\"example\":\"MAX({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"MAX(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3}],\"dataType\":\"agg\",\"name\":\"聚合函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"TODAY\",\"chineseName\":\"当前日期\",\"description\":\"返回当天日期。\",\"example\":\"TODAY()\",\"result\":\"'2020-01-01'\",\"formatString\":\"TODAY()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"NOW\",\"chineseName\":\"当前日期时间\",\"description\":\"返回当天日期+时间。\",\"example\":\"NOW()\",\"result\":\"'2016-12-24 12:05:38'\",\"formatString\":\"NOW()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"DATEADD\",\"chineseName\":\"对日期加减年、月、日\",\"description\":\"对日期加减按照单位加减。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\"example\":\"DATEADD('2016-12-21', 3)
DATEADD('2016-12-24 20:00:00', 3, 'H')\",\"result\":\"'2016-12-24'
'2016-12-24 23:00:00'\",\"paramDescs\":[\"*日期*(必选)\",\"*数值*(必选)\",\"*单位*(可选)\"],\"formatString\":\"DATEADD(日期,数值 , [单位])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"Y\",\"M\",\"D\",\"H\",\"I\",\"S\"],\"infinite\":false}]},{\"name\":\"DATEDIFF\",\"chineseName\":\"返回两个日期的差值\",\"description\":\"根据指定的单位,返回日期2减去日期1的差值。当日期2小于日期1时,差值为负值。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\"example\":\"DATEDIF('2016-12-21', '2016-12-24')
DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H')\",\"result\":\"3
24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*单位*(可选)\"],\"formatString\":\"DATEDIFF(日期1, 日期2, [单位])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"Y\",\"M\",\"D\",\"H\",\"I\",\"S\"],\"infinite\":false}]},{\"name\":\"DATEFORMAT\",\"chineseName\":\"返回指定格式的日期\",\"description\":\"将日期转为指定格式返回。
yyyy 将年份显示为1900-9999
yy 将年份显示为00-99
mm 将月份显示为 01–12
dd 将日期显示为 01–31\",\"example\":\"DATEFORMAT('2016-12-24', 'YY-MM-DD')\",\"result\":\"2016-12-24\",\"paramDescs\":[\"*日期*(必选)\",\"*日期格式*(必选)\"],\"formatString\":\"DATEFORMAT(日期, 可选格式)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"YEAR\",\"chineseName\":\"返回日期中的年\",\"description\":\"返回指定日期中的年。\",\"example\":\"YEAR('2016-12-24')\",\"result\":\"2016\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"YEAR(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"MONTH\",\"chineseName\":\"返回日期中的月\",\"description\":\"返回指定日期中的月。\",\"example\":\"MONTH('2016-12-24')\",\"result\":\"12\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"MONTH(日期)\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"DAY\",\"chineseName\":\"返回日期中的日\",\"description\":\"返回指定日期中的日。\",\"example\":\"DAY('2016-12-24')\",\"result\":\"24\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"DAY(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"HOUR\",\"chineseName\":\"返回日期中的小时\",\"description\":\"返回指定日期中的小时。\",\"example\":\"HOUR('2016-12-24 20:30:56')\",\"result\":\"20\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"HOUR(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"MINUTE\",\"chineseName\":\"返回日期中的分钟\",\"description\":\"返回指定日期中的分钟。\",\"example\":\"MINUTE('2016-12-24 20:30:56')\",\"result\":\"30\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"MINUTE(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"SECOND\",\"chineseName\":\"返回日期中的秒\",\"description\":\"返回指定日期中的秒钟。\",\"example\":\"SECOND('2016-12-24 20:30:56')\",\"result\":\"56\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"SECOND(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"WEEKNUM\",\"chineseName\":\"返回日期为第几周\",\"description\":\"返回指定日期为第几周,从每年第1天开始算第1周。\",\"example\":\"WEEKNUM('2016-12-24')\",\"result\":\"52\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"WEEKNUM(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"WEEKDAY\",\"chineseName\":\"返回日期为星期几\",\"description\":\"返回指定日期为星期几。返回值为0~6,代表周日~周六。\",\"example\":\"WEEKDAY('2016-12-24')\",\"result\":\"6\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"WEEKDAY(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"NETWORKDAYSPI\",\"chineseName\":\"返回所选时间段内包含的工作日天数\",\"description\":\"查询类型为attend时,即按考勤制度查询,将截止当前日期之前(支持选到当前日期,最大支持跨度为365天)的所选时间段内包含的工作日天数返回。
注意:此函数只能选择过去的时间(可选到当前日期)才可使用,跨度不能超过365天。查询类型为statutory时,即按法定查询,没有限制。当日期2小于日期1时,差值为负值。单位默认为日。\",\"example\":\"想知道李四在2021-11-07和2021-11-12之间的工作日天数NETWORKDAYSPI('2021-11-07', '2021-11-12','李四')\",\"result\":\"5\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*人员*(必选)\",\"*类型*(可选,attend为考勤制度,statutory为法定,默认attend)\"],\"formatString\":\"NETWORKDAYSPI(日期1, 日期2, 成员, [类型])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"employee\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":false,\"infinite\":false}]},{\"name\":\"EOMONTH\",\"chineseName\":\"返回某月最后一天日期\",\"description\":\"将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。\",\"example\":\"EOMONTH('2021-11-07', -2)\",\"result\":\"2021-09-30\",\"paramDescs\":[\"*日期*(必选)\",\"*数值*(必选)\"],\"formatString\":\"EOMONTH(日期,指定日期之前或之后的月数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"CURRYEAR\",\"chineseName\":\"返回当前年份\",\"description\":\"取当前日期的年份。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRYEAR()\",\"result\":\"2022\",\"formatString\":\"CURRYEAR()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRMONTH\",\"chineseName\":\"返回当前月份\",\"description\":\"取当前日期的月份。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRMONTH()\",\"result\":\"2\",\"formatString\":\"CURRMONTH()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRDAY\",\"chineseName\":\"返回当前第几日(当月)\",\"description\":\"取当前日期的天。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRDAY()\",\"result\":\"17\",\"formatString\":\"CURRDAY()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRWEEK\",\"chineseName\":\"返回当前是周几\",\"description\":\"取当前日期是周几。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRWEEK()\",\"result\":\"4\",\"formatString\":\"CURRWEEK()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRHOUR\",\"chineseName\":\"返回当前小时\",\"description\":\"取当前日期的小时。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRHOUR()\",\"result\":\"11\",\"formatString\":\"CURRHOUR()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRMINUTE\",\"chineseName\":\"返回当前分\",\"description\":\"取当前日期的分钟。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRMINUTE()\",\"result\":\"20\",\"formatString\":\"CURRMINUTE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRSECOND\",\"chineseName\":\"返回当前秒\",\"description\":\"取当前日期的秒钟。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRSECOND()\",\"result\":\"30\",\"formatString\":\"CURRSECOND()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"MAXDATE\",\"chineseName\":\"返回一组日期中的最大值\",\"description\":\"取一组日期中的最大值。\",\"example\":\"MAXDATE('2016-12-24', '2022-12-24')\",\"result\":\"2022-12-24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\"],\"formatString\":\"MAXDATE(日期1,日期2,……)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":true}]},{\"name\":\"MINDATE\",\"chineseName\":\"返回一组日期中的最小值\",\"description\":\"取一组日期中的最小值。\",\"example\":\"MINDATE('2016-12-24', '2022-12-24')\",\"result\":\"2016-12-24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\"],\"formatString\":\"MINDATE(日期1,日期2,……)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":true}]},{\"name\":\"COMPAREDATE\",\"chineseName\":\"返回两个日期指定时间的差值\",\"description\":\"日期比较,返回两个日期指定时间域的差值。可比较的时间域包括'Y'-比较年;'M'-比较月;'D'-比较日;'H'-比较小时;'I'-比较分钟;'S'-比较秒。\",\"example\":\"假设 日期1=2022-04-03、日期2=2022-04-04,COMPAREDATE({日期1},{日期2},'D')\",\"result\":\"1\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*比较类型*(可选)\"],\"formatString\":\"COMPAREDATE(日期1,日期2,[比较类型])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"TIMESTAMPTODATE\",\"chineseName\":\"返回时间戳转换后的日期\",\"description\":\"将时间戳按指定格式转换成日期。\",\"example\":\"TIMESTAMPTODATE('1671172579', 'yyyy-MM-dd HH:mm:ss')\",\"result\":\"2022-12-16 14:36:19\",\"paramDescs\":[\"*时间戳*(必选)\",\"*日期格式*(可选,默认yyyy-MM-dd HH:mm:ss)\"],\"formatString\":\"TIMESTAMPTODATE(时间戳,日期格式)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":false,\"infinite\":false}]},{\"name\":\"DATETOTIMESTAMP\",\"chineseName\":\"返回日期转换后的时间戳\",\"description\":\"将日期转换成时间戳。\",\"example\":\"DATETOTIMESTAMP('2022-12-16 14:36:19'\",\"result\":\"'1671172579'\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"DATETOTIMESTAMP(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"DATE\",\"chineseName\":\"拼接日期字符串\",\"description\":\"拼接日期\",\"example\":\"DATE('2022','12','16')\",\"result\":\"'2022-12-16'\",\"paramDescs\":[\"*日期字符*(必选)\"],\"formatString\":\"DATE({年},{月},{日})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"DAYS\",\"chineseName\":\"计算两个日期自建的间隔天数\",\"description\":\"计算两个日期的间隔天数\",\"example\":\"DAYS('2022-12-16','2022-12-18')\",\"result\":\"2\",\"paramDescs\":[\"*日期字符*(必选)\"],\"formatString\":\"DAYS({日期},{日期})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"date\",\"name\":\"日期函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"IF\",\"chineseName\":\"如果条件为真,则...否则...\",\"description\":\"如果条件为真,则执行表达式1,为假则执行表达式2。条件中不可嵌套使用IF函数。\",\"example\":\"IF({员工表.年龄} > 60, '退休', '在职')
IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')\",\"result\":\"'退休'
'在职'\",\"paramDescs\":[\"*条件*(必选)\",\"*表达式1*(必选)\",\"*表达式2*(必选)\"],\"formatString\":\"IF(条件, 表达式1, 表达式2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"AND\",\"chineseName\":\"且\",\"description\":\"所有条件均为真,则返回真,否则返回假。逻辑操作AND的函数模式。\",\"example\":\"AND(2 = 2, 2 < 2)\",\"result\":\"false\",\"paramDescs\":[\"*条件1*(必选)\",\"*条件2*(可选,可输入多个参数)\"],\"formatString\":\"AND(条件1, 条件2, [条件3, …])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":true}]},{\"name\":\"OR\",\"chineseName\":\"或\",\"description\":\"任意一个条件为真,则返回真,否则返回假。逻辑操作OR的函数模式。\",\"example\":\"OR(2 = 2, 2 > 3)\",\"result\":\"true\",\"paramDescs\":[\"*条件1*(必选)\",\"*条件2*(可选,可输入多个参数)\"],\"formatString\":\"OR(条件1, 条件2, [条件3, …])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":true}]},{\"name\":\"NOT\",\"chineseName\":\"反转真假结果\",\"description\":\"对逻辑结果取反。\",\"example\":\"NOT(2 > 3)\",\"result\":\"true\",\"paramDescs\":[\"*逻辑结果*(必选)\"],\"formatString\":\"NOT(逻辑结果)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false}]},{\"name\":\"IN\",\"chineseName\":\"变量是否包含在一组结果中\",\"description\":\"任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。\",\"example\":\"IN(2, [2, 3, 4])\",\"result\":\"true\",\"paramDescs\":[\"*变量*(必选)\",\"*变量数组*(必选)\"],\"formatString\":\"IN(变量, [变量1, 变量2, …])\",\"paramArray\":[],\"paramData\":[\"{}\",\"[]\"],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"LIKE\",\"chineseName\":\"文本是否包含任意一个关键字\",\"description\":\"文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个,则返回真。逻辑操作LIKE的函数模式。\",\"example\":\"LIKE('大家好', ['大家', '好'])\",\"result\":\"true\",\"paramDescs\":[\"*文本*(必选)\",\"*文本数组*(必选)\"],\"formatString\":\"LIKE(文本, [文本1, 文本2, …])\",\"paramArray\":[],\"paramData\":[\"{}\",\"[]\"],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISEMPTY\",\"chineseName\":\"是否为空\",\"description\":\"变量为空或未填写,则返回真。\",\"example\":\"ISEMPTY({员工表.电话})\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(可选)\"],\"formatString\":\"ISEMPTY(变量)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"TRUE\",\"chineseName\":\"返回真\",\"description\":\"返回真。\",\"example\":\"TRUE()\",\"result\":\"true\",\"formatString\":\"TRUE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"FALSE\",\"chineseName\":\"返回假\",\"description\":\"返回假。\",\"example\":\"FALSE()\",\"result\":\"false\",\"formatString\":\"FALSE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"IFS\",\"chineseName\":\"多条件\",\"description\":\"多个条件判断,位于单数位置的参数设置为条件,位于双数位置的参数设置为结果,最后一个参数为默认返回值,当所有条件都不满足的时候返回默认参数。\",\"example\":\"IFS(1>1,1,1=1,2,0)\",\"result\":\"2\",\"paramDescs\":[\"*条件1*(必选)\",\"*变量或常量*(必选)\",\"*条件2*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"IFS({条件1},{结果1},{条件2},{结果2}...{默认结果})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"SWITCH\",\"chineseName\":\"条件选择\",\"description\":\"条件选择。\",\"example\":\"SWITCH({字段1},1,'A',2,'B','C')\",\"result\":\"假设字段1为2,结果:'B'\",\"paramDescs\":[\"*变量或常量*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(可选)\",\"*变量或常量*(可选)\",\"*变量或常量*(必选)\"],\"formatString\":\"SWITCH({变量},{条件1},{结果1},{条件2},{结果2}...{默认结果})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"SORT\",\"chineseName\":\"条件排序\",\"description\":\"根据排序条件进行字符和数字的排序,UP为升序,DOWN为降序。\",\"example\":\"SORT(1,2,5,4,3,'UP')\",\"result\":\"[1,2,3,4,5]\",\"paramDescs\":[\"*字符或数字*(必选)\",\"*字符或数字*(可选)\",\"......\",\"*排序方式*\"],\"formatString\":\"SORT({变量1},{变量2},{变量3}...{排序方式})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"IFERROR\",\"chineseName\":\"异常处理\",\"description\":\"异常处理函数\",\"example\":\"IFERROR(10/0,'0')\",\"result\":\"0\",\"paramDescs\":[\"*公式内容*\"],\"formatString\":\"IFERROR({变量},{变量})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"logic\",\"name\":\"逻辑函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"ROUNDUP\",\"chineseName\":\"向上舍入\",\"description\":\"根据设置的小数位精确度,返回对数值向上舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向上舍入到指定的小数位。如果小数位精确度等于 0,则向上舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUNDUP(76.9,0)\",\"result\":\"77\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUNDUP(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"ROUND\",\"chineseName\":\"四舍五入\",\"description\":\"根据设置的小数位精确度,返回对数值四舍五入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,针对小数点后的数据进行四舍五入;如果小数位精确度等于 0,返回最接近数值的整数;如果小数位精确度为负整数,针对小数点前的数据进行四舍五入,被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUND(123.456,2),ROUND(123.456,0),ROUND(123.456,-2)\",\"result\":\"依次为123.46,123,100\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUND(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"ROUNDDOWN\",\"chineseName\":\"向下舍入\",\"description\":\"根据设置的小数位精确度,返回对数值向下舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向下舍入到指定的小数位。如果小数位精确度等于 0,则向下舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUNDDOWN(76.9,0)\",\"result\":\"76\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUNDDOWN(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"AGGREGATION\",\"chineseName\":\"聚合运算\",\"description\":\"将一组数据进行统计计算,支持最大值(MAX)、最小值(MIN)、平均值(AVG)。\",\"example\":\"AGGREGATION(1 , 2,3,'AVG')\",\"result\":\"2\",\"paramDescs\":[\"*数字*(必选)\",\"*聚合运算类型*(必选)\"],\"formatString\":\"AGGREGATION({数字}...,{聚合运算类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":true},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"avg\",\"max\",\"min\"],\"infinite\":false}]},{\"name\":\"MOD\",\"chineseName\":\"求余\",\"description\":\"将两个参数进行除法运算然后得出余数返回。\",\"example\":\"MOD( 7 , 3 )\",\"result\":\"1\",\"paramDescs\":[\"*数字*(必选)\",\"*数字*(必选)\"],\"formatString\":\"ROUNDDOWN({数字},{数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"TRUNC\",\"chineseName\":\"数字格式化\",\"description\":\"将小数点格式化成指定位数。\",\"example\":\"TRUNC( 2.123 , 2 )\",\"result\":\"2.12\",\"paramDescs\":[\"*数字*(必选)\",\"*精度*(必选)\"],\"formatString\":\"ROUNDDOWN({数字},{精度})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"CALDTROW\",\"chineseName\":\"明细逐行计算函数\",\"description\":\"明细逐行计算\",\"example\":\"假设:明细有金额1、金额2、金额3等三个控件,明细行数为2,第一行值分别为:5、6、10,第二行的值分别为:1、1、9。CALDTROW({金额3}==10,{金额1}+{金额2})\",\"result\":\"当金额3等于10的时候运算加法,只有第一行的金额3等于10,明细第一行的金额3赋值为11\",\"paramDescs\":[\"*字段*(必选)\",\"*公式或字段*(必选)\"],\"formatString\":\"CALDTROW({字段},{公式或字段})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"ABS\",\"chineseName\":\"绝对值\",\"description\":\"绝对值\",\"example\":\"ABS(-9)\",\"result\":\"9\",\"paramDescs\":[\"*字段*(必选)\"],\"formatString\":\"ABS({字段})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"RANDOM\",\"chineseName\":\"随机数生成\",\"description\":\"随机数生成\",\"example\":\"RANDOM(5,'NUM')\",\"result\":\"26489\",\"paramDescs\":[\"*数字*(必选)\",\"*文本*(必选)[NUM(数字)、CHAR(字符)、FIX(字符与数字混合)]\"],\"formatString\":\"RANDOM({随机数长度},{随机类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"POWER\",\"chineseName\":\"N次方\",\"description\":\"计算数值的N次方\",\"example\":\"POWER(2, 2)
POWER(4, 1/2)\",\"result\":\"4
2\",\"paramDescs\":[\"*数字*(必选)\",\"*数字*(必选,N次方的N)\"],\"formatString\":\"POWER({数字}, {数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"SQRT\",\"chineseName\":\"根号\",\"description\":\"将数值开根号\",\"example\":\"SQRT(4)\",\"result\":\"2\",\"paramDescs\":[\"*数字*(必选)\"],\"formatString\":\"SQRT({数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"math\",\"name\":\"数学函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"GETMONEY\",\"chineseName\":\"获取所给定数字的金额大写\",\"description\":\"将金额转换成中文金额大写。\",\"example\":\"GETMONEY({1234})\",\"result\":\"壹仟贰佰叁拾肆元整\",\"paramDescs\":[\"*数字*(必选)\"],\"formatString\":\"GETMONEY({数字})\",\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"finance\",\"name\":\"财务函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"default\",\"chineseName\":\"default\",\"description\":\"暂无\",\"formatString\":\"default()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"text\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"extend\",\"name\":\"自定义拓展函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"CHOOSE\",\"chineseName\":\"返回索引范围内指定的值\",\"description\":\"根据索引位置获取数据。\",\"example\":\"假设:数字输入框1为0,数字输入框2为2,数字输入框3为3,数字输入框4为4。数字输入框1为检索位置的变量,后面3个为检索目标。 示例:CHOOSE({表A.数字输入框1}, {表A.数字输入框2}, {表A.数字输入框3}, {表A.数字输入框4})\",\"result\":\"2,从数字输入框2开始进行检索,数字输入框2的检索位置为0,后续数据位置依次累加1可以得出。\",\"paramDescs\":[\"*索引位置*(必选)\",\"*索引目标1*(必选)\",\"......\"],\"formatString\":\"CHOOSE(索引位置,索引目标1...索引目标N)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"VLOOKUPS\",\"chineseName\":\"按列查找,返回所需值\",\"description\":\"按列查找,返回所需值。常用于薪酬模块。根据条件获取查询参数所在列的返回参数的值。返回参数可填写多个,用英文逗号隔开。若查询不到返回null。\",\"example\":\"VLOOKUPS({税表},{税表.收入},AND({税表.收入}>{税表.应纳税所得额下限},{税表.收入}<{税表.应纳税所得额上限}),[{税表.税率},{税表.速算扣除数}]) \",\"result\":\"按列查找返回税表中收入所在的收入区间所对应的税率和速算扣除数的数值\",\"paramDescs\":[\"*表*(必选)\",\"*条件*(必选)\",\"*返回参数*(必选)\"],\"formatString\":\"VLOOKUPS(表,[条件],[返回参数])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"MATCH\",\"chineseName\":\"返回指定数值在指定数组区域中的位置\",\"description\":\"将指定数值在指定数组区域中的位置返回。若数组中无指定值,返回null。\",\"example\":\"MATCH(15000, [1000, 15000, 2000])\",\"result\":\"1\",\"paramDescs\":[\"*值*(必选)\",\"*数组*(必选)\"],\"formatString\":\"MATCH(值,[数组])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"FIND\",\"chineseName\":\"查找\",\"description\":\"用指定参数去另一个参数列表中查找匹配项,指定参数时,填写1则去第一个参数列表中查找,2则是第二个参数列表里匹配查找第一个参数,成功则返回true,失败返回false。\",\"example\":\"FIND([1,2,3],[1,2,3,4],1)\",\"result\":\"true\",\"paramDescs\":[\"*查找值1*(必选)\",\"......\",\"*查找值N*(可选)\",\"*查找目标1*(必选)\",\"......\",\"*查找目标N*(可选)\"],\"formatString\":\"FIND([{查找值1},{查找值2}...{查找值N}],[{查找目标1},{查找目标2}...{查找目标N}])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"INDEX\",\"chineseName\":\"数据索引\",\"description\":\"数据索引函数,根据索引位置返回一组数据中对应位置的数据。注意:索引位置是从0开始的。\",\"example\":\"假设:数字控件1=2,金额控件1=3,金额控件3=5,INDEX(1,[{数字控件1},{金额控件1},{金额控件2}]\",\"result\":\"3(索引下标为1,返回数组中第二个参数)\",\"paramDescs\":[\"*索引位置*(必选)\",\"*数组*(必选)\"],\"formatString\":\"INDEX({查找值},[{查找目标1},{查找目标2}...{查找目标N}])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"UNIQUE\",\"chineseName\":\"唯一值过滤\",\"description\":\"唯一值过滤函数,得到一组数据,然后去掉重复的值,返回所有去重后的一组数据。\",\"example\":\"假设:文本控件1='A',文本控件2='B',文本控件3='B',UNIQUE({文本控件1},{文本控件2},{文本控件3})\",\"result\":\"[{文本控件1},{文本控件2}]\",\"paramDescs\":[\"*数组*(必选)\"],\"formatString\":\"UNIQUE({过滤目标1},{过滤目标2}...{过滤目标N})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"FILTER\",\"chineseName\":\"条件过滤\",\"description\":\"过滤函数,通过一个或多个条件过滤参数中的数据,返回所有符合条件的一组数据。\",\"example\":\"假设:文本控件1='A',文本控件2='B',文本控件3='B',FILTER([{文本控件1},{文本控件2},{文本控件3}],'B')\",\"result\":\"[{文本控件2},{文本控件3}]\",\"paramDescs\":[\"*数组*(必选)\",\"*过滤字段*(必选)\"],\"formatString\":\"FILTER([{过滤目标1},{过滤目标2}...{过滤目标N}],{过滤字段}={过滤依据})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"find\",\"name\":\"查找函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"GETHRMLOGINID\",\"chineseName\":\"返回指定人员系统账号\",\"description\":\"获取指定人员系统账号。\",\"example\":\"GETHRMLOGINID({表单.张三})\",\"result\":\"'zhangsan@qq.com'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMLOGINID({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMWORKCODE\",\"chineseName\":\"返回指定人员编号\",\"description\":\"获取指定人员编号。\",\"example\":\"GETHRMWORKCODE({表单.张三})\",\"result\":\"'A001'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMWORKCODE({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMMANAGER\",\"chineseName\":\"返回指定人员直接上级\",\"description\":\"获取指定人员直接上级。返回值为对应人员直接上级的ID。\",\"example\":\"GETHRMMANAGER({表单.张三})\",\"result\":\"'1559563038252396708'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMMANAGER({人员}})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMEMAIL\",\"chineseName\":\"获取指定人员邮箱\",\"description\":\"获取指定人员邮箱。\",\"example\":\"GETHRMEMAIL({表单.张三})\",\"result\":\"'2345@163.com'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMEMAIL({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMSECLEVEL\",\"chineseName\":\"获取指定人员安全级别\",\"description\":\"获取指定人员安全级别。\",\"example\":\"张三安全级别为1;GETHRMSECLEVEL({表单.张三})\",\"result\":\"'1'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMSECLEVEL({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMALLMANAGER\",\"chineseName\":\"返回指定人员所有上级\",\"description\":\"获取指定人员所有上级。存在多个上级时,返回所有上级形成的数组。\",\"example\":\"GETHRMALLMANAGER({表单.张三})\",\"result\":\"返回张三的所有上级形成的数组\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMALLMANAGER({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMDEPARTMENT\",\"chineseName\":\"返回指定人员部门\",\"description\":\"获取指定人员部门。返回值为部门ID。\",\"example\":\"GETHRMDEPARTMENT({表单.张三})\",\"result\":\"'1560052731319352218'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMDEPARTMENT({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMSUBCOMPANY\",\"chineseName\":\"返回指定人员分部\",\"description\":\"取指定人员分部,返回值为分部ID。\",\"example\":\"GETHRMSUBCOMPANY({表单.张三})\",\"result\":\"'1560052731319352218'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMSUBCOMPANY({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDEPARTMENTNAME\",\"chineseName\":\"返回指定部门名称\",\"description\":\"获取指定部门名称。\",\"example\":\"GETDEPARTMENTNAME({表单.A部门})\",\"result\":\"'A部门'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETDEPARTMENTNAME({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDEPARTMENTCODE\",\"chineseName\":\"返回指定部门编号\",\"description\":\"获取指定部门编号。\",\"example\":\"GETDEPARTMENTCODE({表单.A部门})\",\"result\":\"'A001'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETDEPARTMENTCODE({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUPERDEPARTMENT\",\"chineseName\":\"返回指定部门直接上级部门\",\"description\":\"获取指定部门直接上级部门。返回值为对应部门直接上级部门的ID。\",\"example\":\"GETSUPERDEPARTMENT({表单.A部门})\",\"result\":\"'1559563038252396709'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETSUPERDEPARTMENT({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETALLSUPERDEPARTMENT\",\"chineseName\":\"返回指定部门所有上级部门\",\"description\":\"获取指定部门所有上级部门。存在多个上级部门时,返回所有上级部门形成的数组。\",\"example\":\"GETALLSUPERDEPARTMENT({表单.A部门})\",\"result\":\"返回A部门的所有上级部门形成的数组\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETALLSUPERDEPARTMENT({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUBCOMPANYNAME\",\"chineseName\":\"返回指定分部名称\",\"description\":\"获取指定分部名称。\",\"example\":\"GETSUBCOMPANYNAME({表单.A分部})\",\"result\":\"'A分部'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUBCOMPANYNAME({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUBCOMPANYCODE\",\"chineseName\":\"返回指定分部编号\",\"description\":\"获取指定分部编号。\",\"example\":\"GETSUBCOMPANYCODE({表单.A分部})\",\"result\":\"'B001'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUBCOMPANYCODE({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUPERSUBCOMPANY\",\"chineseName\":\"返回指定分部直接上级分部\",\"description\":\"获取指定分部直接上级分部。返回值为对应部门直接上级分部的ID。\",\"example\":\"GETSUPERSUBCOMPANY({表单.A分部})\",\"result\":\"'1559563038252396705'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUPERSUBCOMPANY({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETALLSUPERSUBCOMPANY\",\"chineseName\":\"返回指定分部所有上级分部\",\"description\":\"获取指定分部所有上级分部。存在多个上级分部时,返回所有上级分部形成的数组。\",\"example\":\"GETALLSUPERSUBCOMPANY({表单.A分部})\",\"result\":\"A分部的所有上级分部形成的数组\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETALLSUPERSUBCOMPANY({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMNAME\",\"chineseName\":\"获取人员名称\",\"description\":\"获取指定人员的姓名。\",\"example\":\"GETHRMNAME({U:张三})\",\"result\":\"'张三'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMNAME({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMMOBILE\",\"chineseName\":\"获取人员手机号码\",\"description\":\"获取指定人员的手机号码。\",\"example\":\"GETHRMMOBILE({U:张三})\",\"result\":\"13123232323\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMMOBILE({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETREQUESTMARK\",\"chineseName\":\"获取指定流程编号\",\"description\":\"获取指定流程编号\",\"example\":\"假设关联流程=流程数据A,编号为:2332323,GETREQUESTMARK({关联流程})\",\"result\":\"'2332323'\",\"paramDescs\":[\"*关联流程*(必选)\"],\"formatString\":\"GETREQUESTMARK({关联流程})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDOCCODE\",\"chineseName\":\"获取指定文档编号\",\"description\":\"获取指定文档编号。\",\"example\":\"假设关联文档=文档A,文档A编号为:234567,GETDOCCODE({关联文档})\",\"result\":\"'234567'\",\"paramDescs\":[\"*关联文档*(必选)\"],\"formatString\":\"GETDOCCODE({关联文档})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETPRJCODE\",\"chineseName\":\"获取指定项目编号\",\"description\":\"获取指定项目编号。\",\"example\":\"假设关联项目=项目A,项目A编号为:2838383,GETPRJCODE({关联项目})\",\"result\":\"'2838383'\",\"paramDescs\":[\"*关联项目*(必选)\"],\"formatString\":\"GETPRJCODE({关联项目})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETCRMCODE\",\"chineseName\":\"获取指定客户编号\",\"description\":\"获取指定客户编号。\",\"example\":\"假设关联客户=客户A,客户A编号为:2838383,GETCRMCODE({关联客户})\",\"result\":\"'2838383'\",\"paramDescs\":[\"*关联客户*(必选)\"],\"formatString\":\"GETCRMCODE({关联客户})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LANGUAGE\",\"chineseName\":\"当前语言\",\"description\":\"获取当前语言。\",\"example\":\"LANGUAGE()\",\"result\":\"简体中文\",\"formatString\":\"LANGUAGE()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETREQUESTSTATUS\",\"chineseName\":\"流程状态\",\"description\":\"获取流程状态。示例:假设关联流程所选中的数据正在审批中;GETREQUESTSTATUS({表单.关联流程})
结果:'审批中'\",\"example\":\"假设关联流程所选中的数据正在审批中;GETREQUESTSTATUS({表单.关联流程})\",\"result\":\"'审批中'\",\"paramDescs\":[\"*关联流程*(必选)\"],\"formatString\":\"GETREQUESTSTATUS()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETEMPIDBYMOBILE\",\"chineseName\":\"人员手机获取人员ID\",\"description\":\"人员手机获取人员ID\",\"example\":\"人员手机号码获取人员ID;GETEMPIDBYMOBILE({手机号})\",\"result\":\"'342143214234213'\",\"paramDescs\":[\"*手机号*(必选)\"],\"formatString\":\"GETEMPIDBYMOBILE()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"database\",\"name\":\"数据库函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"DISTANCE\",\"chineseName\":\"返回两个位置间的直线距离\",\"description\":\"返回两个位置间的直线距离,单位m(米)。\",\"example\":\"DISTANCE({表A.地理位置1}, {表A.地理位置2})\",\"result\":\"23000\",\"paramDescs\":[\"*地理位置1*(必选)\",\"*地理位置2*(必选)\"],\"formatString\":\"DISTANCE({地理位置1}, {地理位置2})\",\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false},{\"dataType\":\"option\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETUSER\",\"chineseName\":\"返回用户的个人资料\",\"description\":\"返回用户的指定资料项:name、phone、mobile、email。\",\"example\":\"GETUSER({表A.人员选择}, 'mobile')\",\"result\":\"'18692108017'\",\"paramDescs\":[\"*人员选择*(必选)\",\"*文本*(必选,资料项)\"],\"formatString\":\"GETUSER({人员选择}, 文本)\",\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"FIELDS\",\"chineseName\":\"根据条件和排序获取指定表格中的全部数据(最多50条)或指定条数的数据的指定字段值的集合。\",\"description\":\"根据条件和排序获取指定表格中的全部数据(最多50条)或指定条数的数据的指定字段值的集合。\",\"example\":\"FIELDS({表A.负责人}, {表A.销售状态} = {C:已签约}, {表A.创建时间-倒序}, 'desc', 50})\",\"result\":\"返回销售状态为已签约的最新发布的50条数据中负责人的集合\",\"paramDescs\":[\"*字段*(必选)\",\"*条件*(可选)\",\"*排序字段*(可选)\",\"*排序类型*(可选,asc为升序,desc为降序。默认值asc)\",\"*返回条数*(可选)\"],\"formatString\":\"FIELDS({字段}, [条件], [排序字段], [排序类型], [返回条数])\",\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0}],\"dataType\":\"special\",\"name\":\"特殊函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"monthNumber\",\"chineseName\":\"月份差 +1\",\"description\":\" 计算两个日期相差的月份数 +1\",\"formatString\":\"monthNumber(date1,date2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"getEndDate\",\"chineseName\":\"根据合同期限计算合同结束日期\",\"description\":\"需传入两个参数\\n参数1、合同开始日期\\n参数2、整年(如:1、2、3)\",\"formatString\":\"getEndDate(startDate,expirationDate)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0}],\"dataType\":\"custom\",\"name\":\"自定义JS脚本函数\",\"action\":\"DataSource\",\"type\":\"functions\"}]}"; } From 0f38b6cbaa9c3fca9f1e3044501c1b20104ed7d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 4 May 2023 19:43:35 +0800 Subject: [PATCH 067/245] =?UTF-8?q?=E5=8E=BB=E9=99=A4mock=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryFormulaServiceImpl.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java index 068f67930..ba50bf39b 100644 --- a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java @@ -368,12 +368,6 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe log.error("express execute fail ", e); throw new SalaryRunTimeException("公式测试运行出错,请检查公式配置!", e); } - if (run != null && StringUtils.isNotBlank(String.valueOf(run)) && returnTypeEnum == ReturnTypeEnum.NUMBER) { - //返回结果不是数字 - if (!NumberUtils.isCreatable(String.valueOf(run))) { - throw new SalaryRunTimeException("返回结果不是数值"); - } - } return run; } From aa8f46e84f87dadf0edb538cec5d36acc2a402cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 5 May 2023 14:08:37 +0800 Subject: [PATCH 068/245] =?UTF-8?q?=E5=88=A0=E9=99=A4sql=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqlupgrade/DM/2022/sql2022120100901.sql | 27 -- .../sqlupgrade/DM/2022/sql2022120101001.sql | 23 -- .../sqlupgrade/DM/2022/sql2022120901602.sql | 5 - .../sqlupgrade/DM/2022/sql2022121503101.sql | 19 -- .../sqlupgrade/DM/2022/sql2022121613501.sql | 27 -- .../sqlupgrade/DM/2022/sql2022122005801.sql | 24 -- .../sqlupgrade/DM/2023/sql2023011206201.sql | 22 -- .../sqlupgrade/DM/2023/sql2023013104001.sql | 22 -- .../sqlupgrade/DM/2023/sql2023021000102.sql | 2 - .../sqlupgrade/DM/2023/sql2023021604102.sql | 2 - .../sqlupgrade/DM/2023/sql2023021705001.sql | 82 ------ .../sqlupgrade/DM/2023/sql2023032901802.sql | 2 - .../sqlupgrade/DM/2023/sql2023032906602.sql | 2 - .../sqlupgrade/DM/2023/sql2023032915202.sql | 2 - .../sqlupgrade/DM/2023/sql2023032916202.sql | 2 - .../sqlupgrade/DM/2023/sql2023040404902.sql | 2 - .../Mysql/2022/sql2022120100901.sql | 27 -- .../Mysql/2022/sql2022120101001.sql | 23 -- .../Mysql/2022/sql2022120901602.sql | 5 - .../Mysql/2022/sql2022121503101.sql | 19 -- .../Mysql/2022/sql2022121613501.sql | 27 -- .../Mysql/2022/sql2022122005801.sql | 24 -- .../Mysql/2023/sql2023011206201.sql | 22 -- .../Mysql/2023/sql2023013104001.sql | 22 -- .../Mysql/2023/sql2023021000102.sql | 2 - .../Mysql/2023/sql2023021604102.sql | 2 - .../Mysql/2023/sql2023021705001.sql | 82 ------ .../Mysql/2023/sql2023032901802.sql | 2 - .../Mysql/2023/sql2023032906602.sql | 2 - .../Mysql/2023/sql2023032915202.sql | 2 - .../Mysql/2023/sql2023032916202.sql | 2 - .../Mysql/2023/sql2023040404902.sql | 2 - resource/sqlupgrade/Mysql/报表.sql | 244 ------------------ resource/sqlupgrade/Mysql/浏览按钮.sql | 38 --- .../Oracle/2022/sql2022120100901.sql | 27 -- .../Oracle/2022/sql2022120101001.sql | 23 -- .../Oracle/2022/sql2022120901602.sql | 5 - .../Oracle/2022/sql2022121503101.sql | 19 -- .../Oracle/2022/sql2022121613501.sql | 27 -- .../Oracle/2022/sql2022122005801.sql | 24 -- .../Oracle/2023/sql2023011206201.sql | 22 -- .../Oracle/2023/sql2023013104001.sql | 22 -- .../Oracle/2023/sql2023021000102.sql | 2 - .../Oracle/2023/sql2023021604102.sql | 2 - .../Oracle/2023/sql2023021705001.sql | 82 ------ .../Oracle/2023/sql2023032901802.sql | 2 - .../Oracle/2023/sql2023032906602.sql | 2 - .../Oracle/2023/sql2023032915202.sql | 2 - .../Oracle/2023/sql2023032916202.sql | 2 - .../Oracle/2023/sql2023040404902.sql | 2 - resource/sqlupgrade/Oracle/报表.sql | 244 ------------------ .../sqlupgrade/PG/2022/sql2022120100901.sql | 27 -- .../sqlupgrade/PG/2022/sql2022120101001.sql | 23 -- .../sqlupgrade/PG/2022/sql2022120901602.sql | 5 - .../sqlupgrade/PG/2022/sql2022121503101.sql | 19 -- .../sqlupgrade/PG/2022/sql2022121613501.sql | 27 -- .../sqlupgrade/PG/2022/sql2022122005801.sql | 24 -- .../sqlupgrade/PG/2023/sql2023011206201.sql | 22 -- .../sqlupgrade/PG/2023/sql2023013104001.sql | 22 -- .../sqlupgrade/PG/2023/sql2023021000102.sql | 2 - .../sqlupgrade/PG/2023/sql2023021604102.sql | 2 - .../sqlupgrade/PG/2023/sql2023021705001.sql | 82 ------ .../sqlupgrade/PG/2023/sql2023032901802.sql | 2 - .../sqlupgrade/PG/2023/sql2023032906602.sql | 2 - .../sqlupgrade/PG/2023/sql2023032915202.sql | 2 - .../sqlupgrade/PG/2023/sql2023032916202.sql | 2 - .../sqlupgrade/PG/2023/sql2023040404902.sql | 2 - .../SQLServer/2022/sql2022120100901.sql | 27 -- .../SQLServer/2022/sql2022120101001.sql | 23 -- .../SQLServer/2022/sql2022120901602.sql | 5 - .../SQLServer/2022/sql2022121503101.sql | 19 -- .../SQLServer/2022/sql2022121613501.sql | 27 -- .../SQLServer/2022/sql2022122005801.sql | 24 -- .../SQLServer/2023/sql2023011206201.sql | 22 -- .../SQLServer/2023/sql2023013104001.sql | 22 -- .../SQLServer/2023/sql2023021000102.sql | 2 - .../SQLServer/2023/sql2023021604102.sql | 2 - .../SQLServer/2023/sql2023021705001.sql | 82 ------ .../SQLServer/2023/sql2023032901802.sql | 2 - .../SQLServer/2023/sql2023032906602.sql | 2 - .../SQLServer/2023/sql2023032915202.sql | 2 - .../SQLServer/2023/sql2023032916202.sql | 2 - .../SQLServer/2023/sql2023040404902.sql | 2 - resource/sqlupgrade/SQLServer/报表.sql | 244 ------------------ .../sqlupgrade/ST/2022/sql2022120100901.sql | 27 -- .../sqlupgrade/ST/2022/sql2022120101001.sql | 23 -- .../sqlupgrade/ST/2022/sql2022120901602.sql | 5 - .../sqlupgrade/ST/2022/sql2022121503101.sql | 19 -- .../sqlupgrade/ST/2022/sql2022121613501.sql | 27 -- .../sqlupgrade/ST/2022/sql2022122005801.sql | 24 -- .../sqlupgrade/ST/2023/sql2023011206201.sql | 22 -- .../sqlupgrade/ST/2023/sql2023013104001.sql | 22 -- .../sqlupgrade/ST/2023/sql2023021000102.sql | 2 - .../sqlupgrade/ST/2023/sql2023021604102.sql | 2 - .../sqlupgrade/ST/2023/sql2023021705001.sql | 82 ------ .../sqlupgrade/ST/2023/sql2023032901802.sql | 2 - .../sqlupgrade/ST/2023/sql2023032906602.sql | 2 - .../sqlupgrade/ST/2023/sql2023032915202.sql | 2 - .../sqlupgrade/ST/2023/sql2023032916202.sql | 2 - .../sqlupgrade/ST/2023/sql2023040404902.sql | 2 - .../common/constant/DbCrudConstant.java | 6 +- .../common/constant/SalaryConstant.java | 4 +- .../common/constant/SalaryReportModule.java | 6 - .../SalaryStatisticsDimensionConstant.java | 4 +- .../entity/bo/SalaryStatisticsEmployeeBO.java | 4 +- .../entity/bo/SalaryStatisticsReportBO.java | 4 +- .../dto/SalaryStatisticsDimensionFormDTO.java | 4 +- .../dto/SalaryStatisticsEchartsDTO.java | 4 +- ...laryStatisticsEmployeeDetailResultDTO.java | 4 +- .../dto/SalaryStatisticsEmployeeListDTO.java | 23 +- .../dto/SalaryStatisticsItemFormDTO.java | 11 +- .../dto/SalaryStatisticsItemRuleDTO.java | 4 +- .../dto/SalaryStatisticsReportDataDTO.java | 11 +- .../dto/SalaryStatisticsReportFormDTO.java | 11 +- .../entity/dto/SubEmployeeTableDTO.java | 7 +- .../report/entity/dto/SubTableChartsDTO.java | 7 +- .../report/entity/dto/TaxAgentViewDTO.java | 7 +- .../report/entity/param/BaseQueryParam.java | 5 - .../report/entity/param/ExportColumn.java | 7 - .../entity/param/ExportCommonParam.java | 6 - .../param/SalaryAcctEmployeeQueryParam.java | 11 +- .../param/SalaryEmployeeQueryParam.java | 6 +- .../SalaryStatisticsDimensionQueryParam.java | 11 +- .../SalaryStatisticsDimensionSaveParam.java | 11 +- .../SalaryStatisticsEmployeeQueryParam.java | 11 +- .../param/SalaryStatisticsItemSaveParam.java | 11 +- .../SalaryStatisticsReportDataQueryParam.java | 11 +- .../SalaryStatisticsReportQueryParam.java | 11 +- .../SalaryStatisticsReportSaveParam.java | 11 +- .../entity/param/SubTableItemParam.java | 6 - .../report/entity/param/SubTableParam.java | 6 - .../entity/param/TaxAgentQueryParam.java | 11 +- .../po/SalaryStatisticsDimensionPO.java | 11 +- .../po/SalaryStatisticsEChartsSettingPO.java | 11 +- .../entity/po/SalaryStatisticsItemPO.java | 6 - .../entity/po/SalaryStatisticsReportPO.java | 11 +- .../report/entity/po/SubTableItemPO.java | 6 - .../salary/report/enums/DataTypeEnum.java | 6 - .../report/enums/ExtEmployeeTypeEnum.java | 6 - .../report/enums/IncomeCategoryEnum.java | 14 +- .../salary/report/enums/OperateTypeEnum.java | 4 +- .../salary/report/enums/PaymentScopeEnum.java | 6 - .../report/enums/PaymentStatusEnum.java | 6 - .../report/enums/SalaryDataTypeEnum.java | 13 +- .../SalaryStatisticsDimensionTypeEnum.java | 11 +- .../report/enums/SalarySystemTypeEnum.java | 13 +- .../enums/TaxAgentPermissionConstant.java | 4 +- .../report/enums/TaxAgentRoleTypeEnum.java | 11 +- .../SalaryStatisticsDimensionService.java | 12 +- .../service/SalaryStatisticsItemService.java | 11 +- .../SalaryStatisticsReportService.java | 11 +- .../SalaryStatisticsDimensionServiceImpl.java | 11 +- .../impl/SalaryStatisticsItemServiceImpl.java | 11 +- .../SalaryStatisticsReportServiceImpl.java | 11 +- .../impl/SubTableExportServiceImpl.java | 7 +- .../salary/report/util/ReportDataUtil.java | 6 - .../salary/report/util/ReportTimeUtil.java | 6 - .../SalaryStatisticsDimensionController.java | 11 +- .../web/SalaryStatisticsItemController.java | 11 +- .../SalaryStatisticsDimensionWrapper.java | 13 +- .../wrapper/SalaryStatisticsItemWrapper.java | 13 +- .../SalaryStatisticsReportWrapper.java | 13 +- 162 files changed, 242 insertions(+), 2660 deletions(-) delete mode 100644 resource/sqlupgrade/DM/2022/sql2022120100901.sql delete mode 100644 resource/sqlupgrade/DM/2022/sql2022120101001.sql delete mode 100644 resource/sqlupgrade/DM/2022/sql2022120901602.sql delete mode 100644 resource/sqlupgrade/DM/2022/sql2022121503101.sql delete mode 100644 resource/sqlupgrade/DM/2022/sql2022121613501.sql delete mode 100644 resource/sqlupgrade/DM/2022/sql2022122005801.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023011206201.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023013104001.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023021000102.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023021604102.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023021705001.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023032901802.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023032906602.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023032915202.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023032916202.sql delete mode 100644 resource/sqlupgrade/DM/2023/sql2023040404902.sql delete mode 100644 resource/sqlupgrade/Mysql/2022/sql2022120100901.sql delete mode 100644 resource/sqlupgrade/Mysql/2022/sql2022120101001.sql delete mode 100644 resource/sqlupgrade/Mysql/2022/sql2022120901602.sql delete mode 100644 resource/sqlupgrade/Mysql/2022/sql2022121503101.sql delete mode 100644 resource/sqlupgrade/Mysql/2022/sql2022121613501.sql delete mode 100644 resource/sqlupgrade/Mysql/2022/sql2022122005801.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023011206201.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023013104001.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023021000102.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023021604102.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023021705001.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023032901802.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023032906602.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023032915202.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023032916202.sql delete mode 100644 resource/sqlupgrade/Mysql/2023/sql2023040404902.sql delete mode 100644 resource/sqlupgrade/Mysql/报表.sql delete mode 100644 resource/sqlupgrade/Mysql/浏览按钮.sql delete mode 100644 resource/sqlupgrade/Oracle/2022/sql2022120100901.sql delete mode 100644 resource/sqlupgrade/Oracle/2022/sql2022120101001.sql delete mode 100644 resource/sqlupgrade/Oracle/2022/sql2022120901602.sql delete mode 100644 resource/sqlupgrade/Oracle/2022/sql2022121503101.sql delete mode 100644 resource/sqlupgrade/Oracle/2022/sql2022121613501.sql delete mode 100644 resource/sqlupgrade/Oracle/2022/sql2022122005801.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023011206201.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023013104001.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023021000102.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023021604102.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023021705001.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023032901802.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023032906602.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023032915202.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023032916202.sql delete mode 100644 resource/sqlupgrade/Oracle/2023/sql2023040404902.sql delete mode 100644 resource/sqlupgrade/Oracle/报表.sql delete mode 100644 resource/sqlupgrade/PG/2022/sql2022120100901.sql delete mode 100644 resource/sqlupgrade/PG/2022/sql2022120101001.sql delete mode 100644 resource/sqlupgrade/PG/2022/sql2022120901602.sql delete mode 100644 resource/sqlupgrade/PG/2022/sql2022121503101.sql delete mode 100644 resource/sqlupgrade/PG/2022/sql2022121613501.sql delete mode 100644 resource/sqlupgrade/PG/2022/sql2022122005801.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023011206201.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023013104001.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023021000102.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023021604102.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023021705001.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023032901802.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023032906602.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023032915202.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023032916202.sql delete mode 100644 resource/sqlupgrade/PG/2023/sql2023040404902.sql delete mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022120100901.sql delete mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022120101001.sql delete mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022120901602.sql delete mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022121503101.sql delete mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022121613501.sql delete mode 100644 resource/sqlupgrade/SQLServer/2022/sql2022122005801.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023011206201.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023013104001.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023021000102.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023021604102.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023021705001.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023032901802.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023032906602.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023032915202.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023032916202.sql delete mode 100644 resource/sqlupgrade/SQLServer/2023/sql2023040404902.sql delete mode 100644 resource/sqlupgrade/SQLServer/报表.sql delete mode 100644 resource/sqlupgrade/ST/2022/sql2022120100901.sql delete mode 100644 resource/sqlupgrade/ST/2022/sql2022120101001.sql delete mode 100644 resource/sqlupgrade/ST/2022/sql2022120901602.sql delete mode 100644 resource/sqlupgrade/ST/2022/sql2022121503101.sql delete mode 100644 resource/sqlupgrade/ST/2022/sql2022121613501.sql delete mode 100644 resource/sqlupgrade/ST/2022/sql2022122005801.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023011206201.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023013104001.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023021000102.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023021604102.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023021705001.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023032901802.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023032906602.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023032915202.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023032916202.sql delete mode 100644 resource/sqlupgrade/ST/2023/sql2023040404902.sql diff --git a/resource/sqlupgrade/DM/2022/sql2022120100901.sql b/resource/sqlupgrade/DM/2022/sql2022120100901.sql deleted file mode 100644 index 9b45402f5..000000000 --- a/resource/sqlupgrade/DM/2022/sql2022120100901.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_sub_table -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - sub_table_name varchar(100) not null, - dimension varchar(20) not null, - start_month varchar(10), - end_month varchar(10), - pay_org_string varchar(500), - pay_agency_string varchar(500), - sub_company_string varchar(500), - depart_string varchar(500), - grade_string varchar(500), - position_string varchar(500), - status_string varchar(500), - employee_type varchar(500), - employee_string varchar(500), - payment_type_string varchar(100) -); -/ - -create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022120101001.sql b/resource/sqlupgrade/DM/2022/sql2022120101001.sql deleted file mode 100644 index 8ad5b3129..000000000 --- a/resource/sqlupgrade/DM/2022/sql2022120101001.sql +++ /dev/null @@ -1,23 +0,0 @@ -create table hrsa_sub_table_item -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - table_id number not null, - item_name varchar(50) not null, - item_value varchar(500) not null, - index_value int not null, - total_rule varchar(500), - count_rule varchar(500), - unit_type int default 2 -); -/ - -create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key); -/ - -create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022120901602.sql b/resource/sqlupgrade/DM/2022/sql2022120901602.sql deleted file mode 100644 index 81a0b8693..000000000 --- a/resource/sqlupgrade/DM/2022/sql2022120901602.sql +++ /dev/null @@ -1,5 +0,0 @@ -alter table hrsa_sub_table add table_type int; -/ - -alter table hrsa_sub_table modify table_type default 0; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022121503101.sql b/resource/sqlupgrade/DM/2022/sql2022121503101.sql deleted file mode 100644 index fb9159c03..000000000 --- a/resource/sqlupgrade/DM/2022/sql2022121503101.sql +++ /dev/null @@ -1,19 +0,0 @@ -create table hrsa_salary_stats_dim -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - dim_name varchar(100), - dim_type varchar(20), - remark varchar(500), - setting varchar(2000), - is_default int, - dim_code varchar(50) -); -/ - -create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022121613501.sql b/resource/sqlupgrade/DM/2022/sql2022121613501.sql deleted file mode 100644 index 2cb7ab3fb..000000000 --- a/resource/sqlupgrade/DM/2022/sql2022121613501.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_salary_stats_report -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - report_name varchar(100), - dimension varchar(1000), - tax_agent_setting varchar(1000), - income_category_setting varchar(20), - sub_company_setting varchar(1000), - depart_setting varchar(1000), - grade_setting varchar(1000), - position_setting varchar(1000), - status_setting varchar(1000), - employee_setting varchar(1000), - hiredate_setting varchar(1000), - leavedate_setting varchar(1000), - salary_start_month date, - salary_end_month date -); -/ - -create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2022/sql2022122005801.sql b/resource/sqlupgrade/DM/2022/sql2022122005801.sql deleted file mode 100644 index 289ad7775..000000000 --- a/resource/sqlupgrade/DM/2022/sql2022122005801.sql +++ /dev/null @@ -1,24 +0,0 @@ -create table hrsa_salary_statistics_item -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - item_name varchar(50), - item_value varchar(1000), - count_rule varchar(500), - sum_rule varchar(500), - avg_rule varchar(500), - max_rule varchar(500), - min_rule varchar(500), - median_rule varchar(500), - index_value int, - unit_type int, - stat_report_id number -); -/ - -create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023011206201.sql b/resource/sqlupgrade/DM/2023/sql2023011206201.sql deleted file mode 100644 index 1bcc5602a..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023011206201.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_charts_setting -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - table_id number not null, - charts_type int not null, - item_values varchar(500), - item_col_value varchar(50) not null, - dimension_range int not null, - item_sort_value varchar(500), - item_col_sort_value varchar(50), - sort_type int, - sort_num int -); -/ - -create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023013104001.sql b/resource/sqlupgrade/DM/2023/sql2023013104001.sql deleted file mode 100644 index bd3d42415..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023013104001.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_salary_echarts_setting -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - report_id number not null, - charts_type int not null, - item_values varchar(500), - item_col_value varchar(50) not null, - dimension_range int not null, - item_sort_value varchar(500), - item_col_sort_value varchar(50), - sort_type int, - sort_num int -); -/ - -create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023021000102.sql b/resource/sqlupgrade/DM/2023/sql2023021000102.sql deleted file mode 100644 index a1b09bbb5..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023021000102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim modify dim_type varchar(30); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023021604102.sql b/resource/sqlupgrade/DM/2023/sql2023021604102.sql deleted file mode 100644 index a5bb145fe..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023021604102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report modify income_category_setting varchar(1000); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023021705001.sql b/resource/sqlupgrade/DM/2023/sql2023021705001.sql deleted file mode 100644 index 708255326..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023021705001.sql +++ /dev/null @@ -1,82 +0,0 @@ -create table hrsa_statreportlogs_detail -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - uuid varchar(36) not null, - mainid varchar(36) not null, - dataid varchar(50) not null, - belongdataid varchar(50) not null, - tablename varchar(200) not null, - tablenamelabelid varchar(50) default '-1' not null, - tablenamedesc varchar(50) not null, - fieldname varchar(200) not null, - fieldnamelabelid varchar(50) default '-1' not null, - newvalue clob not null, - oldvalue clob not null, - newrealvalue clob not null, - oldrealvalue clob not null, - fielddesc varchar(200) not null, - showorder int not null, - isdetail int default 0 not null -); -/ - -create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key); -/ - -create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time); -/ - -create table hrsa_statreportlogs -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - uuid varchar(36) not null, - log_date date not null, - device varchar(500) not null, - log_operator number not null, - operatorname varchar(100), - targetid number default '-1' not null, - targetname clob not null, - modulename varchar(100) not null, - functionname varchar(100) not null, - interfacename varchar(100) not null, - requesturl varchar(200) not null, - requesturi varchar(200) not null, - operatetype varchar(50) not null, - operatetypename varchar(100) not null, - operatedesc varchar(3000) not null, - params clob not null, - belongmainid varchar(36) not null, - clientip varchar(50) not null, - groupid varchar(50) not null, - groupnamelabel varchar(1000) not null, - redoservice varchar(200) not null, - redocontext clob not null, - cancelservice varchar(200) not null, - cancelcontext clob not null, - totalruntime number default '0' not null, - mainruntime number default '0' not null, - log_result varchar(100) not null, - fromterminal varchar(100) not null, - resultdesc clob not null, - old_content varchar(3000) not null, - link_type varchar(20) not null, - link_id number default '0' not null, - old_link_id number default '0' not null -); -/ - -create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key); -/ - -create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023032901802.sql b/resource/sqlupgrade/DM/2023/sql2023032901802.sql deleted file mode 100644 index 28569b30a..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023032901802.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add remark varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023032906602.sql b/resource/sqlupgrade/DM/2023/sql2023032906602.sql deleted file mode 100644 index 2904d96eb..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023032906602.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add second_dimension varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023032915202.sql b/resource/sqlupgrade/DM/2023/sql2023032915202.sql deleted file mode 100644 index 6a8164591..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023032915202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_index varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023032916202.sql b/resource/sqlupgrade/DM/2023/sql2023032916202.sql deleted file mode 100644 index a78cd0884..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023032916202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_type varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/2023/sql2023040404902.sql b/resource/sqlupgrade/DM/2023/sql2023040404902.sql deleted file mode 100644 index c444c3992..000000000 --- a/resource/sqlupgrade/DM/2023/sql2023040404902.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim add label_id int; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022120100901.sql b/resource/sqlupgrade/Mysql/2022/sql2022120100901.sql deleted file mode 100644 index ee1284958..000000000 --- a/resource/sqlupgrade/Mysql/2022/sql2022120100901.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_sub_table -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - sub_table_name varchar(100) not null comment '表名' , - dimension varchar(20) not null comment '统计维度' , - start_month varchar(10) comment '开始月' , - end_month varchar(10) comment '终止月' , - pay_org_string varchar(500) comment '个税扣缴义务人高级搜索' , - pay_agency_string varchar(500) comment '缴纳组织高级搜索' , - sub_company_string varchar(500) comment '分部高级搜索' , - depart_string varchar(500) comment '部门高级搜索' , - grade_string varchar(500) comment '职级高级搜索' , - position_string varchar(500) comment '岗位高级搜索' , - status_string varchar(500) comment '人员状态高级搜索' , - employee_type varchar(500) comment '人员类型高级搜索' , - employee_string varchar(500) comment '人员高级搜索' , - payment_type_string varchar(100) comment '缴纳类型' -) -; - -create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022120101001.sql b/resource/sqlupgrade/Mysql/2022/sql2022120101001.sql deleted file mode 100644 index 8f205871c..000000000 --- a/resource/sqlupgrade/Mysql/2022/sql2022120101001.sql +++ /dev/null @@ -1,23 +0,0 @@ -create table hrsa_sub_table_item -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - table_id bigint not null comment '数据表id' , - item_name varchar(50) not null comment '统计项名称' , - item_value varchar(500) not null comment '统计项集合' , - index_value int not null comment '顺序' , - total_rule varchar(500) comment '合计规则' , - count_rule varchar(500) comment '计数规则' , - unit_type int default 2 comment '统计单位' -) -; - -create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key) -; - -create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022120901602.sql b/resource/sqlupgrade/Mysql/2022/sql2022120901602.sql deleted file mode 100644 index f7c90dd80..000000000 --- a/resource/sqlupgrade/Mysql/2022/sql2022120901602.sql +++ /dev/null @@ -1,5 +0,0 @@ -alter table hrsa_sub_table add table_type int -; - -alter table hrsa_sub_table modify column table_type int default 0 -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022121503101.sql b/resource/sqlupgrade/Mysql/2022/sql2022121503101.sql deleted file mode 100644 index 068b25eaa..000000000 --- a/resource/sqlupgrade/Mysql/2022/sql2022121503101.sql +++ /dev/null @@ -1,19 +0,0 @@ -create table hrsa_salary_stats_dim -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - dim_name varchar(100) comment '统计维度名称' , - dim_type varchar(20) comment '统计维度类型' , - remark varchar(500) comment '描述' , - setting varchar(2000) comment '设置内容', - is_default int comment '是否默认' , - dim_code varchar(50) comment '统计维度编码' -) -; - -create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022121613501.sql b/resource/sqlupgrade/Mysql/2022/sql2022121613501.sql deleted file mode 100644 index c923fcfe6..000000000 --- a/resource/sqlupgrade/Mysql/2022/sql2022121613501.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_salary_stats_report -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - report_name varchar(100) comment '报表名称' , - dimension varchar(1000) comment '统计维度(多个的话以逗号分隔)' , - tax_agent_setting varchar(1000) comment '个税扣缴义务人配置' , - income_category_setting varchar(20) comment '收入所得项目配置' , - sub_company_setting varchar(1000) comment '分部配置' , - depart_setting varchar(1000) comment '部门配置' , - grade_setting varchar(1000) comment '职级配置' , - position_setting varchar(1000) comment '岗位配置' , - status_setting varchar(1000) comment '状态配置' , - employee_setting varchar(1000) comment '人员配置' , - hiredate_setting varchar(1000) comment '入职日期配置' , - leavedate_setting varchar(1000) comment '离职日期配置' , - salary_start_month datetime comment '薪资所属月份-起始' , - salary_end_month datetime comment '薪资所属月份-截止' -) -; - -create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2022/sql2022122005801.sql b/resource/sqlupgrade/Mysql/2022/sql2022122005801.sql deleted file mode 100644 index de1259f69..000000000 --- a/resource/sqlupgrade/Mysql/2022/sql2022122005801.sql +++ /dev/null @@ -1,24 +0,0 @@ -create table hrsa_salary_statistics_item -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - item_name varchar(50) comment '统计项名称' , - item_value varchar(1000) comment '统计项集合' , - count_rule varchar(500) comment '计数规则' , - sum_rule varchar(500) comment '求和规则' , - avg_rule varchar(500) comment '平均值规则' , - max_rule varchar(500) comment '最大值规则' , - min_rule varchar(500) comment '最小值规则' , - median_rule varchar(500) comment '中位数规则' , - index_value int comment '顺序' , - unit_type int comment '统计单位', - stat_report_id bigint comment '统计报表id' -) -; - -create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023011206201.sql b/resource/sqlupgrade/Mysql/2023/sql2023011206201.sql deleted file mode 100644 index 594c7d566..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023011206201.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_charts_setting -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - table_id bigint not null comment '报表id' , - charts_type int not null comment '报表类型' , - item_values varchar(500) comment '统计项目' , - item_col_value varchar(50) not null comment '统计列' , - dimension_range int not null comment '维度统计范围' , - item_sort_value varchar(500) comment '排序统计项目' , - item_col_sort_value varchar(50) comment '排序列' , - sort_type int comment '排序类型' , - sort_num int comment '排序取数值' -) -; - -create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023013104001.sql b/resource/sqlupgrade/Mysql/2023/sql2023013104001.sql deleted file mode 100644 index 4cfea914a..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023013104001.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_salary_echarts_setting -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - report_id bigint not null comment '报表id' , - charts_type int not null comment '报表类型' , - item_values varchar(500) comment '统计项目' , - item_col_value varchar(50) not null comment '统计列' , - dimension_range int not null comment '维度统计范围' , - item_sort_value varchar(500) comment '排序统计项目' , - item_col_sort_value varchar(50) comment '排序列' , - sort_type int comment '排序类型' , - sort_num int comment '排序取数值' -) -; - -create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023021000102.sql b/resource/sqlupgrade/Mysql/2023/sql2023021000102.sql deleted file mode 100644 index d55b2e705..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023021000102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim modify column dim_type varchar(30) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023021604102.sql b/resource/sqlupgrade/Mysql/2023/sql2023021604102.sql deleted file mode 100644 index 3428a6b34..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023021604102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report modify column income_category_setting varchar(1000) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023021705001.sql b/resource/sqlupgrade/Mysql/2023/sql2023021705001.sql deleted file mode 100644 index 7f79e1836..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023021705001.sql +++ /dev/null @@ -1,82 +0,0 @@ -create table hrsa_statreportlogs_detail -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - uuid varchar(36) not null comment '日志UUID' , - mainid varchar(36) not null comment '主表id' , - dataid varchar(50) not null comment '数据id' , - belongdataid varchar(50) not null comment '主表数据id' , - tablename varchar(200) not null comment '表名' , - tablenamelabelid varchar(50) default '-1' not null comment '表名labelid' , - tablenamedesc varchar(50) not null comment '对应数据库的表' , - fieldname varchar(200) not null comment '字段名' , - fieldnamelabelid varchar(50) default '-1' not null comment '字段名labelid' , - newvalue text not null comment '更新后的值' , - oldvalue text not null comment '更新前的值' , - newrealvalue text not null comment '更新后的显示值' , - oldrealvalue text not null comment '更新前的显示值' , - fielddesc varchar(200) not null comment '字段名' , - showorder int(11) not null comment '字段名' , - isdetail int(11) default 0 not null comment '是否明细字段' -) -; - -create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key) -; - -create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time) -; - -create table hrsa_statreportlogs -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - uuid varchar(36) not null comment '日志UUID' , - log_date datetime not null comment '记录时间' , - device varchar(500) not null comment '终端信息' , - log_operator bigint not null comment '操作者' , - operatorname varchar(100) comment '操作人姓名' , - targetid bigint default '-1' not null comment '操作目标id' , - targetname text not null comment '操作目标名称' , - modulename varchar(100) not null comment '模块' , - functionname varchar(100) not null comment '服务(方法)' , - interfacename varchar(100) not null comment '访问接口名' , - requesturl varchar(200) not null comment '请求全路径' , - requesturi varchar(200) not null comment '请求地址' , - operatetype varchar(50) not null comment '操作类型' , - operatetypename varchar(100) not null comment '操作类型名称' , - operatedesc varchar(3000) not null comment '操作详细说明' , - params text not null comment '涉及的相关参数' , - belongmainid varchar(36) not null comment '所属主表uuid' , - clientip varchar(50) not null comment '操作IP' , - groupid varchar(50) not null comment '分组' , - groupnamelabel varchar(1000) not null comment '分组标题' , - redoservice varchar(200) not null comment '重做业务接口' , - redocontext text not null comment '重做参数' , - cancelservice varchar(200) not null comment '撤销业务接口' , - cancelcontext text not null comment '撤销参数' , - totalruntime bigint default '0' not null comment '总运行时长' , - mainruntime bigint default '0' not null comment '主方法运行时长' , - log_result varchar(100) not null comment '日志结果' , - fromterminal varchar(100) not null comment '来自pc web' , - resultdesc text not null comment '运行结果描述' , - old_content varchar(3000) not null comment '原先内容' , - link_type varchar(20) not null comment '链接类型' , - link_id bigint default '0' not null comment '链接id' , - old_link_id bigint default '0' not null comment '原先链接id' -) -; - -create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key) -; - -create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023032901802.sql b/resource/sqlupgrade/Mysql/2023/sql2023032901802.sql deleted file mode 100644 index cb8547275..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023032901802.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add remark varchar(100) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023032906602.sql b/resource/sqlupgrade/Mysql/2023/sql2023032906602.sql deleted file mode 100644 index fa36a694a..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023032906602.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add second_dimension varchar(100) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023032915202.sql b/resource/sqlupgrade/Mysql/2023/sql2023032915202.sql deleted file mode 100644 index 2839f913e..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023032915202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_index varchar(100) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023032916202.sql b/resource/sqlupgrade/Mysql/2023/sql2023032916202.sql deleted file mode 100644 index fc2e40f84..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023032916202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_type varchar(100) -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/2023/sql2023040404902.sql b/resource/sqlupgrade/Mysql/2023/sql2023040404902.sql deleted file mode 100644 index 80a9ba9b9..000000000 --- a/resource/sqlupgrade/Mysql/2023/sql2023040404902.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim add label_id int -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/报表.sql b/resource/sqlupgrade/Mysql/报表.sql deleted file mode 100644 index 4fa33dc8b..000000000 --- a/resource/sqlupgrade/Mysql/报表.sql +++ /dev/null @@ -1,244 +0,0 @@ -create table hrsa_sub_table -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - sub_table_name varchar(100) not null comment '表名' , - dimension varchar(20) not null comment '统计维度' , - start_month varchar(10) comment '开始月' , - end_month varchar(10) comment '终止月' , - pay_org_string varchar(500) comment '个税扣缴义务人高级搜索' , - pay_agency_string varchar(500) comment '缴纳组织高级搜索' , - sub_company_string varchar(500) comment '分部高级搜索' , - depart_string varchar(500) comment '部门高级搜索' , - grade_string varchar(500) comment '职级高级搜索' , - position_string varchar(500) comment '岗位高级搜索' , - status_string varchar(500) comment '人员状态高级搜索' , - employee_type varchar(500) comment '人员类型高级搜索' , - employee_string varchar(500) comment '人员高级搜索' , - payment_type_string varchar(100) comment '缴纳类型' -) -; - -create table hrsa_sub_table_item -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - table_id bigint not null comment '数据表id' , - item_name varchar(50) not null comment '统计项名称' , - item_value varchar(500) not null comment '统计项集合' , - index_value int not null comment '顺序' , - total_rule varchar(500) comment '合计规则' , - count_rule varchar(500) comment '计数规则' , - unit_type int default 2 comment '统计单位' -) -; - -alter table hrsa_sub_table add table_type int -; - -alter table hrsa_sub_table modify column table_type int default 0 -; - -create table hrsa_salary_stats_dim -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - dim_name varchar(100) comment '统计维度名称' , - dim_type varchar(20) comment '统计维度类型' , - remark varchar(500) comment '描述' , - setting varchar(2000) comment '设置内容', - is_default int comment '是否默认' , - dim_code varchar(50) comment '统计维度编码' -) -; - -create table hrsa_salary_stats_report -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - report_name varchar(100) comment '报表名称' , - dimension varchar(1000) comment '统计维度(多个的话以逗号分隔)' , - tax_agent_setting varchar(1000) comment '个税扣缴义务人配置' , - income_category_setting varchar(20) comment '收入所得项目配置' , - sub_company_setting varchar(1000) comment '分部配置' , - depart_setting varchar(1000) comment '部门配置' , - grade_setting varchar(1000) comment '职级配置' , - position_setting varchar(1000) comment '岗位配置' , - status_setting varchar(1000) comment '状态配置' , - employee_setting varchar(1000) comment '人员配置' , - hiredate_setting varchar(1000) comment '入职日期配置' , - leavedate_setting varchar(1000) comment '离职日期配置' , - salary_start_month datetime comment '薪资所属月份-起始' , - salary_end_month datetime comment '薪资所属月份-截止' -) -; - -create table hrsa_salary_statistics_item -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - item_name varchar(50) comment '统计项名称' , - item_value varchar(1000) comment '统计项集合' , - count_rule varchar(500) comment '计数规则' , - sum_rule varchar(500) comment '求和规则' , - avg_rule varchar(500) comment '平均值规则' , - max_rule varchar(500) comment '最大值规则' , - min_rule varchar(500) comment '最小值规则' , - median_rule varchar(500) comment '中位数规则' , - index_value int comment '顺序' , - unit_type int comment '统计单位', - stat_report_id bigint comment '统计报表id' -) -; - -create table hrsa_charts_setting -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - table_id bigint not null comment '报表id' , - charts_type int not null comment '报表类型' , - item_values varchar(500) comment '统计项目' , - item_col_value varchar(50) not null comment '统计列' , - dimension_range int not null comment '维度统计范围' , - item_sort_value varchar(500) comment '排序统计项目' , - item_col_sort_value varchar(50) comment '排序列' , - sort_type int comment '排序类型' , - sort_num int comment '排序取数值' -) -; - -create table hrsa_salary_echarts_setting -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - report_id bigint not null comment '报表id' , - charts_type int not null comment '报表类型' , - item_values varchar(500) comment '统计项目' , - item_col_value varchar(50) not null comment '统计列' , - dimension_range int not null comment '维度统计范围' , - item_sort_value varchar(500) comment '排序统计项目' , - item_col_sort_value varchar(50) comment '排序列' , - sort_type int comment '排序类型' , - sort_num int comment '排序取数值' -) -; - -alter table hrsa_salary_stats_dim modify column dim_type varchar(30) -; - -alter table hrsa_salary_stats_report modify column income_category_setting varchar(1000) -; - -create table hrsa_statreportlogs_detail -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - uuid varchar(36) not null comment '日志UUID' , - mainid varchar(36) not null comment '主表id' , - dataid varchar(50) not null comment '数据id' , - belongdataid varchar(50) not null comment '主表数据id' , - tablename varchar(200) not null comment '表名' , - tablenamelabelid varchar(50) default '-1' not null comment '表名labelid' , - tablenamedesc varchar(50) not null comment '对应数据库的表' , - fieldname varchar(200) not null comment '字段名' , - fieldnamelabelid varchar(50) default '-1' not null comment '字段名labelid' , - newvalue text not null comment '更新后的值' , - oldvalue text not null comment '更新前的值' , - newrealvalue text not null comment '更新后的显示值' , - oldrealvalue text not null comment '更新前的显示值' , - fielddesc varchar(200) not null comment '字段名' , - showorder int(11) not null comment '字段名' , - isdetail int(11) default 0 not null comment '是否明细字段' -) -; - -create table hrsa_statreportlogs -( - id bigint primary key comment 'ID' , - create_time datetime comment '创建时间' , - update_time datetime comment '修改时间' , - creator bigint comment '创建人id' , - delete_type int default 0 comment '是否删除' , - tenant_key varchar(10) comment '租户KEY' , - uuid varchar(36) not null comment '日志UUID' , - log_date datetime not null comment '记录时间' , - device varchar(500) not null comment '终端信息' , - log_operator bigint not null comment '操作者' , - operatorname varchar(100) comment '操作人姓名' , - targetid bigint default '-1' not null comment '操作目标id' , - targetname text not null comment '操作目标名称' , - modulename varchar(100) not null comment '模块' , - functionname varchar(100) not null comment '服务(方法)' , - interfacename varchar(100) not null comment '访问接口名' , - requesturl varchar(200) not null comment '请求全路径' , - requesturi varchar(200) not null comment '请求地址' , - operatetype varchar(50) not null comment '操作类型' , - operatetypename varchar(100) not null comment '操作类型名称' , - operatedesc varchar(3000) not null comment '操作详细说明' , - params text not null comment '涉及的相关参数' , - belongmainid varchar(36) not null comment '所属主表uuid' , - clientip varchar(50) not null comment '操作IP' , - groupid varchar(50) not null comment '分组' , - groupnamelabel varchar(1000) not null comment '分组标题' , - redoservice varchar(200) not null comment '重做业务接口' , - redocontext text not null comment '重做参数' , - cancelservice varchar(200) not null comment '撤销业务接口' , - cancelcontext text not null comment '撤销参数' , - totalruntime bigint default '0' not null comment '总运行时长' , - mainruntime bigint default '0' not null comment '主方法运行时长' , - log_result varchar(100) not null comment '日志结果' , - fromterminal varchar(100) not null comment '来自pc web' , - resultdesc text not null comment '运行结果描述' , - old_content varchar(3000) not null comment '原先内容' , - link_type varchar(20) not null comment '链接类型' , - link_id bigint default '0' not null comment '链接id' , - old_link_id bigint default '0' not null comment '原先链接id' -) -; - -alter table hrsa_salary_stats_report add remark varchar(100) -; - -alter table hrsa_salary_stats_report add second_dimension varchar(100) -; - -alter table hrsa_salary_stats_report add sort_index varchar(100) -; - -alter table hrsa_salary_stats_report add sort_type varchar(100) -; - -alter table hrsa_salary_stats_dim add label_id int -; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/浏览按钮.sql b/resource/sqlupgrade/Mysql/浏览按钮.sql deleted file mode 100644 index de0b61e6f..000000000 --- a/resource/sqlupgrade/Mysql/浏览按钮.sql +++ /dev/null @@ -1,38 +0,0 @@ -select @current_date:= date_format( now(),'%Y-%m-%d'); -select @current_time:= date_format( now(),'%T'); -INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, '薪资项目', NULL, '', NULL, NULL, NULL, NULL, '', '', @current_date, @current_time, NULL, NULL, '', '', '0',uuid(), '', '', '', '', '1', 0, 1); -select @datashowset_id:= max(id) from datashowset; -INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, @current_date, @current_time, NULL, NULL); -INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (@datashowset_id, '名称', 'name', '', 1, 1, uuid(), NULL); -INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (@datashowset_id, '名称', 'name', '2', '', 1, uuid(), ''); - - - - -declare @datashowset_id int -declare @current_date varchar(100) -declare @current_time varchar(100) - -set @current_date = (select CONVERT(varchar(100), GETDATE(), 23)) -set @current_time = (select CONVERT(varchar(100), GETDATE(), 24)) - -INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, '薪资项目', NULL, '', NULL, NULL, NULL, NULL, '', '', @current_date, @current_time, NULL, NULL, '', '', '0',newid(), '', '', '', '', '1', 0, 1) -set @datashowset_id = (select max(id) from datashowset) -INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, @current_date, @current_time, NULL, NULL) -INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (@datashowset_id, '名称', 'name', '', 1, 1, newid(), NULL) -INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (@datashowset_id, '名称', 'name', '2', '', 1, newid(), '') -GO - - - -declare -datashowset_id NUMBER; -hrmjobgroups_id NUMBER; -begin -INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, '薪资项目', NULL, '', NULL, NULL, NULL, NULL, '', '', TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL, '', '', '0',SYS_GUID(), '', '', '', '', '1', 0, 1); -SELECT max(id) INTO datashowset_id FROM DATASHOWSET; -INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL); -INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (datashowset_id, '名称', 'name', '', 1, 1, SYS_GUID(), NULL); -INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (datashowset_id, '名称', 'name', '2', '', 1, SYS_GUID(), ''); -end; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022120100901.sql b/resource/sqlupgrade/Oracle/2022/sql2022120100901.sql deleted file mode 100644 index f6775e3fb..000000000 --- a/resource/sqlupgrade/Oracle/2022/sql2022120100901.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_sub_table -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - sub_table_name varchar2(100) not null, - dimension varchar2(20) not null, - start_month varchar2(10), - end_month varchar2(10), - pay_org_string varchar2(500), - pay_agency_string varchar2(500), - sub_company_string varchar2(500), - depart_string varchar2(500), - grade_string varchar2(500), - position_string varchar2(500), - status_string varchar2(500), - employee_type varchar2(500), - employee_string varchar2(500), - payment_type_string varchar2(100) -) -/ - -create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022120101001.sql b/resource/sqlupgrade/Oracle/2022/sql2022120101001.sql deleted file mode 100644 index 85d21951d..000000000 --- a/resource/sqlupgrade/Oracle/2022/sql2022120101001.sql +++ /dev/null @@ -1,23 +0,0 @@ -create table hrsa_sub_table_item -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - table_id number not null, - item_name varchar2(50) not null, - item_value varchar2(500) not null, - index_value int not null, - total_rule varchar2(500), - count_rule varchar2(500), - unit_type int default 2 -) -/ - -create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key) -/ - -create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022120901602.sql b/resource/sqlupgrade/Oracle/2022/sql2022120901602.sql deleted file mode 100644 index 92c4fbfec..000000000 --- a/resource/sqlupgrade/Oracle/2022/sql2022120901602.sql +++ /dev/null @@ -1,5 +0,0 @@ -alter table hrsa_sub_table add table_type int -/ - -alter table hrsa_sub_table modify table_type default 0 -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022121503101.sql b/resource/sqlupgrade/Oracle/2022/sql2022121503101.sql deleted file mode 100644 index 52b6a3318..000000000 --- a/resource/sqlupgrade/Oracle/2022/sql2022121503101.sql +++ /dev/null @@ -1,19 +0,0 @@ -create table hrsa_salary_stats_dim -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - dim_name varchar2(100), - dim_type varchar2(20), - remark varchar2(500), - setting varchar2(2000), - is_default int, - dim_code varchar2(50) -) -/ - -create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022121613501.sql b/resource/sqlupgrade/Oracle/2022/sql2022121613501.sql deleted file mode 100644 index e8fa04962..000000000 --- a/resource/sqlupgrade/Oracle/2022/sql2022121613501.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_salary_stats_report -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - report_name varchar2(100), - dimension varchar2(1000), - tax_agent_setting varchar2(1000), - income_category_setting varchar2(20), - sub_company_setting varchar2(1000), - depart_setting varchar2(1000), - grade_setting varchar2(1000), - position_setting varchar2(1000), - status_setting varchar2(1000), - employee_setting varchar2(1000), - hiredate_setting varchar2(1000), - leavedate_setting varchar2(1000), - salary_start_month date, - salary_end_month date -) -/ - -create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2022/sql2022122005801.sql b/resource/sqlupgrade/Oracle/2022/sql2022122005801.sql deleted file mode 100644 index e3a2076f4..000000000 --- a/resource/sqlupgrade/Oracle/2022/sql2022122005801.sql +++ /dev/null @@ -1,24 +0,0 @@ -create table hrsa_salary_statistics_item -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - item_name varchar2(50), - item_value varchar2(1000), - count_rule varchar2(500), - sum_rule varchar2(500), - avg_rule varchar2(500), - max_rule varchar2(500), - min_rule varchar2(500), - median_rule varchar2(500), - index_value int, - unit_type int, - stat_report_id number -) -/ - -create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023011206201.sql b/resource/sqlupgrade/Oracle/2023/sql2023011206201.sql deleted file mode 100644 index fbb7bcfba..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023011206201.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_charts_setting -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - table_id number not null, - charts_type int not null, - item_values varchar2(500), - item_col_value varchar2(50) not null, - dimension_range int not null, - item_sort_value varchar2(500), - item_col_sort_value varchar2(50), - sort_type int, - sort_num int -) -/ - -create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023013104001.sql b/resource/sqlupgrade/Oracle/2023/sql2023013104001.sql deleted file mode 100644 index b3a854e00..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023013104001.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_salary_echarts_setting -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - report_id number not null, - charts_type int not null, - item_values varchar2(500), - item_col_value varchar2(50) not null, - dimension_range int not null, - item_sort_value varchar2(500), - item_col_sort_value varchar2(50), - sort_type int, - sort_num int -) -/ - -create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023021000102.sql b/resource/sqlupgrade/Oracle/2023/sql2023021000102.sql deleted file mode 100644 index 92d4c554d..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023021000102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim modify dim_type varchar2(30) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023021604102.sql b/resource/sqlupgrade/Oracle/2023/sql2023021604102.sql deleted file mode 100644 index 1933ee237..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023021604102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report modify income_category_setting varchar2(1000) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023021705001.sql b/resource/sqlupgrade/Oracle/2023/sql2023021705001.sql deleted file mode 100644 index b215d10b7..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023021705001.sql +++ /dev/null @@ -1,82 +0,0 @@ -create table hrsa_statreportlogs_detail -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - uuid varchar2(36) not null, - mainid varchar2(36) not null, - dataid varchar2(50) not null, - belongdataid varchar2(50) not null, - tablename varchar2(200) not null, - tablenamelabelid varchar2(50) default '-1' not null, - tablenamedesc varchar2(50) not null, - fieldname varchar2(200) not null, - fieldnamelabelid varchar2(50) default '-1' not null, - newvalue clob not null, - oldvalue clob not null, - newrealvalue clob not null, - oldrealvalue clob not null, - fielddesc varchar2(200) not null, - showorder int not null, - isdetail int default 0 not null -) -/ - -create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key) -/ - -create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time) -/ - -create table hrsa_statreportlogs -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - uuid varchar2(36) not null, - log_date date not null, - device varchar2(500) not null, - log_operator number not null, - operatorname varchar2(100), - targetid number default '-1' not null, - targetname clob not null, - modulename varchar2(100) not null, - functionname varchar2(100) not null, - interfacename varchar2(100) not null, - requesturl varchar2(200) not null, - requesturi varchar2(200) not null, - operatetype varchar2(50) not null, - operatetypename varchar2(100) not null, - operatedesc varchar2(3000) not null, - params clob not null, - belongmainid varchar2(36) not null, - clientip varchar2(50) not null, - groupid varchar2(50) not null, - groupnamelabel varchar2(1000) not null, - redoservice varchar2(200) not null, - redocontext clob not null, - cancelservice varchar2(200) not null, - cancelcontext clob not null, - totalruntime number default '0' not null, - mainruntime number default '0' not null, - log_result varchar2(100) not null, - fromterminal varchar2(100) not null, - resultdesc clob not null, - old_content varchar2(3000) not null, - link_type varchar2(20) not null, - link_id number default '0' not null, - old_link_id number default '0' not null -) -/ - -create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key) -/ - -create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023032901802.sql b/resource/sqlupgrade/Oracle/2023/sql2023032901802.sql deleted file mode 100644 index 76cf30e53..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023032901802.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add remark varchar2(100) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023032906602.sql b/resource/sqlupgrade/Oracle/2023/sql2023032906602.sql deleted file mode 100644 index d9d154eee..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023032906602.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add second_dimension varchar2(100) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023032915202.sql b/resource/sqlupgrade/Oracle/2023/sql2023032915202.sql deleted file mode 100644 index eb24e58d0..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023032915202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_index varchar2(100) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023032916202.sql b/resource/sqlupgrade/Oracle/2023/sql2023032916202.sql deleted file mode 100644 index d63f6bb40..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023032916202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_type varchar2(100) -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/2023/sql2023040404902.sql b/resource/sqlupgrade/Oracle/2023/sql2023040404902.sql deleted file mode 100644 index 34a089ab4..000000000 --- a/resource/sqlupgrade/Oracle/2023/sql2023040404902.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim add label_id int -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/报表.sql b/resource/sqlupgrade/Oracle/报表.sql deleted file mode 100644 index 620dd24cb..000000000 --- a/resource/sqlupgrade/Oracle/报表.sql +++ /dev/null @@ -1,244 +0,0 @@ -create table hrsa_sub_table -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - sub_table_name varchar2(100) not null, - dimension varchar2(20) not null, - start_month varchar2(10), - end_month varchar2(10), - pay_org_string varchar2(500), - pay_agency_string varchar2(500), - sub_company_string varchar2(500), - depart_string varchar2(500), - grade_string varchar2(500), - position_string varchar2(500), - status_string varchar2(500), - employee_type varchar2(500), - employee_string varchar2(500), - payment_type_string varchar2(100) -) -/ - -create table hrsa_sub_table_item -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - table_id number not null, - item_name varchar2(50) not null, - item_value varchar2(500) not null, - index_value int not null, - total_rule varchar2(500), - count_rule varchar2(500), - unit_type int default 2 -) -/ - -alter table hrsa_sub_table add table_type int -/ - -alter table hrsa_sub_table modify table_type default 0 -/ - -create table hrsa_salary_stats_dim -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - dim_name varchar2(100), - dim_type varchar2(20), - remark varchar2(500), - setting varchar2(2000), - is_default int, - dim_code varchar2(50) -) -/ - -create table hrsa_salary_stats_report -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - report_name varchar2(100), - dimension varchar2(1000), - tax_agent_setting varchar2(1000), - income_category_setting varchar2(20), - sub_company_setting varchar2(1000), - depart_setting varchar2(1000), - grade_setting varchar2(1000), - position_setting varchar2(1000), - status_setting varchar2(1000), - employee_setting varchar2(1000), - hiredate_setting varchar2(1000), - leavedate_setting varchar2(1000), - salary_start_month date, - salary_end_month date -) -/ - -create table hrsa_salary_statistics_item -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - item_name varchar2(50), - item_value varchar2(1000), - count_rule varchar2(500), - sum_rule varchar2(500), - avg_rule varchar2(500), - max_rule varchar2(500), - min_rule varchar2(500), - median_rule varchar2(500), - index_value int, - unit_type int, - stat_report_id number -) -/ - -create table hrsa_charts_setting -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - table_id number not null, - charts_type int not null, - item_values varchar2(500), - item_col_value varchar2(50) not null, - dimension_range int not null, - item_sort_value varchar2(500), - item_col_sort_value varchar2(50), - sort_type int, - sort_num int -) -/ - -create table hrsa_salary_echarts_setting -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - report_id number not null, - charts_type int not null, - item_values varchar2(500), - item_col_value varchar2(50) not null, - dimension_range int not null, - item_sort_value varchar2(500), - item_col_sort_value varchar2(50), - sort_type int, - sort_num int -) -/ - -alter table hrsa_salary_stats_dim modify dim_type varchar2(30) -/ - -alter table hrsa_salary_stats_report modify income_category_setting varchar2(1000) -/ - -create table hrsa_statreportlogs_detail -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - uuid varchar2(36) not null, - mainid varchar2(36) not null, - dataid varchar2(50) not null, - belongdataid varchar2(50) not null, - tablename varchar2(200) not null, - tablenamelabelid varchar2(50) default '-1' not null, - tablenamedesc varchar2(50) not null, - fieldname varchar2(200) not null, - fieldnamelabelid varchar2(50) default '-1' not null, - newvalue clob not null, - oldvalue clob not null, - newrealvalue clob not null, - oldrealvalue clob not null, - fielddesc varchar2(200) not null, - showorder int not null, - isdetail int default 0 not null -) -/ - -create table hrsa_statreportlogs -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar2(10), - uuid varchar2(36) not null, - log_date date not null, - device varchar2(500) not null, - log_operator number not null, - operatorname varchar2(100), - targetid number default '-1' not null, - targetname clob not null, - modulename varchar2(100) not null, - functionname varchar2(100) not null, - interfacename varchar2(100) not null, - requesturl varchar2(200) not null, - requesturi varchar2(200) not null, - operatetype varchar2(50) not null, - operatetypename varchar2(100) not null, - operatedesc varchar2(3000) not null, - params clob not null, - belongmainid varchar2(36) not null, - clientip varchar2(50) not null, - groupid varchar2(50) not null, - groupnamelabel varchar2(1000) not null, - redoservice varchar2(200) not null, - redocontext clob not null, - cancelservice varchar2(200) not null, - cancelcontext clob not null, - totalruntime number default '0' not null, - mainruntime number default '0' not null, - log_result varchar2(100) not null, - fromterminal varchar2(100) not null, - resultdesc clob not null, - old_content varchar2(3000) not null, - link_type varchar2(20) not null, - link_id number default '0' not null, - old_link_id number default '0' not null -) -/ - -alter table hrsa_salary_stats_report add remark varchar2(100) -/ - -alter table hrsa_salary_stats_report add second_dimension varchar2(100) -/ - -alter table hrsa_salary_stats_report add sort_index varchar2(100) -/ - -alter table hrsa_salary_stats_report add sort_type varchar2(100) -/ - -alter table hrsa_salary_stats_dim add label_id int -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022120100901.sql b/resource/sqlupgrade/PG/2022/sql2022120100901.sql deleted file mode 100644 index 82f5268ae..000000000 --- a/resource/sqlupgrade/PG/2022/sql2022120100901.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_sub_table -( - id bigint primary key , - create_time timestamp, - update_time timestamp, - creator bigint, - delete_type int default 0, - tenant_key varchar(10), - sub_table_name varchar(100) not null, - dimension varchar(20) not null, - start_month varchar(10), - end_month varchar(10), - pay_org_string varchar(500), - pay_agency_string varchar(500), - sub_company_string varchar(500), - depart_string varchar(500), - grade_string varchar(500), - position_string varchar(500), - status_string varchar(500), - employee_type varchar(500), - employee_string varchar(500), - payment_type_string varchar(100) -); -/ - -create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022120101001.sql b/resource/sqlupgrade/PG/2022/sql2022120101001.sql deleted file mode 100644 index 95163c1ca..000000000 --- a/resource/sqlupgrade/PG/2022/sql2022120101001.sql +++ /dev/null @@ -1,23 +0,0 @@ -create table hrsa_sub_table_item -( - id bigint primary key , - create_time timestamp, - update_time timestamp, - creator bigint, - delete_type int default 0, - tenant_key varchar(10), - table_id bigint not null, - item_name varchar(50) not null, - item_value varchar(500) not null, - index_value int not null, - total_rule varchar(500), - count_rule varchar(500), - unit_type int default 2 -); -/ - -create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key); -/ - -create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022120901602.sql b/resource/sqlupgrade/PG/2022/sql2022120901602.sql deleted file mode 100644 index 7d05fff62..000000000 --- a/resource/sqlupgrade/PG/2022/sql2022120901602.sql +++ /dev/null @@ -1,5 +0,0 @@ -alter table hrsa_sub_table add table_type int; -/ - -alter table hrsa_sub_table alter column table_type set default 0; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022121503101.sql b/resource/sqlupgrade/PG/2022/sql2022121503101.sql deleted file mode 100644 index b5d69512b..000000000 --- a/resource/sqlupgrade/PG/2022/sql2022121503101.sql +++ /dev/null @@ -1,19 +0,0 @@ -create table hrsa_salary_stats_dim -( - id bigint primary key , - create_time timestamp, - update_time timestamp, - creator bigint, - delete_type int default 0, - tenant_key varchar(10), - dim_name varchar(100), - dim_type varchar(20), - remark varchar(500), - setting varchar(2000), - is_default int, - dim_code varchar(50) -); -/ - -create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022121613501.sql b/resource/sqlupgrade/PG/2022/sql2022121613501.sql deleted file mode 100644 index 6e5ca8dd4..000000000 --- a/resource/sqlupgrade/PG/2022/sql2022121613501.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_salary_stats_report -( - id bigint primary key , - create_time timestamp, - update_time timestamp, - creator bigint, - delete_type int default 0, - tenant_key varchar(10), - report_name varchar(100), - dimension varchar(1000), - tax_agent_setting varchar(1000), - income_category_setting varchar(20), - sub_company_setting varchar(1000), - depart_setting varchar(1000), - grade_setting varchar(1000), - position_setting varchar(1000), - status_setting varchar(1000), - employee_setting varchar(1000), - hiredate_setting varchar(1000), - leavedate_setting varchar(1000), - salary_start_month timestamp, - salary_end_month timestamp -); -/ - -create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2022/sql2022122005801.sql b/resource/sqlupgrade/PG/2022/sql2022122005801.sql deleted file mode 100644 index 690c20522..000000000 --- a/resource/sqlupgrade/PG/2022/sql2022122005801.sql +++ /dev/null @@ -1,24 +0,0 @@ -create table hrsa_salary_statistics_item -( - id bigint primary key , - create_time timestamp, - update_time timestamp, - creator bigint, - delete_type int default 0, - tenant_key varchar(10), - item_name varchar(50), - item_value varchar(1000), - count_rule varchar(500), - sum_rule varchar(500), - avg_rule varchar(500), - max_rule varchar(500), - min_rule varchar(500), - median_rule varchar(500), - index_value int, - unit_type int, - stat_report_id bigint -); -/ - -create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023011206201.sql b/resource/sqlupgrade/PG/2023/sql2023011206201.sql deleted file mode 100644 index 5bffbb0c0..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023011206201.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_charts_setting -( - id bigint primary key , - create_time timestamp, - update_time timestamp, - creator bigint, - delete_type int default 0, - tenant_key varchar(10), - table_id bigint not null, - charts_type int not null, - item_values varchar(500), - item_col_value varchar(50) not null, - dimension_range int not null, - item_sort_value varchar(500), - item_col_sort_value varchar(50), - sort_type int, - sort_num int -); -/ - -create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023013104001.sql b/resource/sqlupgrade/PG/2023/sql2023013104001.sql deleted file mode 100644 index 873f2319a..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023013104001.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_salary_echarts_setting -( - id bigint primary key , - create_time timestamp, - update_time timestamp, - creator bigint, - delete_type int default 0, - tenant_key varchar(10), - report_id bigint not null, - charts_type int not null, - item_values varchar(500), - item_col_value varchar(50) not null, - dimension_range int not null, - item_sort_value varchar(500), - item_col_sort_value varchar(50), - sort_type int, - sort_num int -); -/ - -create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023021000102.sql b/resource/sqlupgrade/PG/2023/sql2023021000102.sql deleted file mode 100644 index 3dc980de1..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023021000102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim alter column dim_type type varchar(30); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023021604102.sql b/resource/sqlupgrade/PG/2023/sql2023021604102.sql deleted file mode 100644 index 7acd451eb..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023021604102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report alter column income_category_setting type varchar(1000); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023021705001.sql b/resource/sqlupgrade/PG/2023/sql2023021705001.sql deleted file mode 100644 index 9052d725a..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023021705001.sql +++ /dev/null @@ -1,82 +0,0 @@ -create table hrsa_statreportlogs_detail -( - id bigint primary key , - create_time timestamp, - update_time timestamp, - creator bigint, - delete_type int default 0, - tenant_key varchar(10), - uuid varchar(36) not null, - mainid varchar(36) not null, - dataid varchar(50) not null, - belongdataid varchar(50) not null, - tablename varchar(200) not null, - tablenamelabelid varchar(50) default '-1' not null, - tablenamedesc varchar(50) not null, - fieldname varchar(200) not null, - fieldnamelabelid varchar(50) default '-1' not null, - newvalue text not null, - oldvalue text not null, - newrealvalue text not null, - oldrealvalue text not null, - fielddesc varchar(200) not null, - showorder int not null, - isdetail int default 0 not null -); -/ - -create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key); -/ - -create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time); -/ - -create table hrsa_statreportlogs -( - id bigint primary key , - create_time timestamp, - update_time timestamp, - creator bigint, - delete_type int default 0, - tenant_key varchar(10), - uuid varchar(36) not null, - log_date timestamp not null, - device varchar(500) not null, - log_operator bigint not null, - operatorname varchar(100), - targetid bigint default '-1' not null, - targetname text not null, - modulename varchar(100) not null, - functionname varchar(100) not null, - interfacename varchar(100) not null, - requesturl varchar(200) not null, - requesturi varchar(200) not null, - operatetype varchar(50) not null, - operatetypename varchar(100) not null, - operatedesc varchar(3000) not null, - params text not null, - belongmainid varchar(36) not null, - clientip varchar(50) not null, - groupid varchar(50) not null, - groupnamelabel varchar(1000) not null, - redoservice varchar(200) not null, - redocontext text not null, - cancelservice varchar(200) not null, - cancelcontext text not null, - totalruntime bigint default '0' not null, - mainruntime bigint default '0' not null, - log_result varchar(100) not null, - fromterminal varchar(100) not null, - resultdesc text not null, - old_content varchar(3000) not null, - link_type varchar(20) not null, - link_id bigint default '0' not null, - old_link_id bigint default '0' not null -); -/ - -create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key); -/ - -create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023032901802.sql b/resource/sqlupgrade/PG/2023/sql2023032901802.sql deleted file mode 100644 index 28569b30a..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023032901802.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add remark varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023032906602.sql b/resource/sqlupgrade/PG/2023/sql2023032906602.sql deleted file mode 100644 index 2904d96eb..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023032906602.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add second_dimension varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023032915202.sql b/resource/sqlupgrade/PG/2023/sql2023032915202.sql deleted file mode 100644 index 6a8164591..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023032915202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_index varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023032916202.sql b/resource/sqlupgrade/PG/2023/sql2023032916202.sql deleted file mode 100644 index a78cd0884..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023032916202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_type varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/2023/sql2023040404902.sql b/resource/sqlupgrade/PG/2023/sql2023040404902.sql deleted file mode 100644 index c444c3992..000000000 --- a/resource/sqlupgrade/PG/2023/sql2023040404902.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim add label_id int; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022120100901.sql b/resource/sqlupgrade/SQLServer/2022/sql2022120100901.sql deleted file mode 100644 index 62848fbf9..000000000 --- a/resource/sqlupgrade/SQLServer/2022/sql2022120100901.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_sub_table -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - sub_table_name nvarchar(100) not null, - dimension nvarchar(20) not null, - start_month nvarchar(10), - end_month nvarchar(10), - pay_org_string nvarchar(500), - pay_agency_string nvarchar(500), - sub_company_string nvarchar(500), - depart_string nvarchar(500), - grade_string nvarchar(500), - position_string nvarchar(500), - status_string nvarchar(500), - employee_type nvarchar(500), - employee_string nvarchar(500), - payment_type_string nvarchar(100) -) -GO - -create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022120101001.sql b/resource/sqlupgrade/SQLServer/2022/sql2022120101001.sql deleted file mode 100644 index 7f1c82181..000000000 --- a/resource/sqlupgrade/SQLServer/2022/sql2022120101001.sql +++ /dev/null @@ -1,23 +0,0 @@ -create table hrsa_sub_table_item -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - table_id bigint not null, - item_name nvarchar(50) not null, - item_value nvarchar(500) not null, - index_value int not null, - total_rule nvarchar(500), - count_rule nvarchar(500), - unit_type int default 2 -) -GO - -create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key) -GO - -create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022120901602.sql b/resource/sqlupgrade/SQLServer/2022/sql2022120901602.sql deleted file mode 100644 index 9850ab2d9..000000000 --- a/resource/sqlupgrade/SQLServer/2022/sql2022120901602.sql +++ /dev/null @@ -1,5 +0,0 @@ -alter table hrsa_sub_table add table_type int -GO - -alter table hrsa_sub_table add constraint df_table_type_7b1e7561 default 0 for table_type -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022121503101.sql b/resource/sqlupgrade/SQLServer/2022/sql2022121503101.sql deleted file mode 100644 index c90b2601d..000000000 --- a/resource/sqlupgrade/SQLServer/2022/sql2022121503101.sql +++ /dev/null @@ -1,19 +0,0 @@ -create table hrsa_salary_stats_dim -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - dim_name nvarchar(100), - dim_type nvarchar(20), - remark nvarchar(500), - setting nvarchar(2000), - is_default int, - dim_code nvarchar(50) -) -GO - -create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022121613501.sql b/resource/sqlupgrade/SQLServer/2022/sql2022121613501.sql deleted file mode 100644 index 478e002e5..000000000 --- a/resource/sqlupgrade/SQLServer/2022/sql2022121613501.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_salary_stats_report -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - report_name nvarchar(100), - dimension nvarchar(1000), - tax_agent_setting nvarchar(1000), - income_category_setting nvarchar(20), - sub_company_setting nvarchar(1000), - depart_setting nvarchar(1000), - grade_setting nvarchar(1000), - position_setting nvarchar(1000), - status_setting nvarchar(1000), - employee_setting nvarchar(1000), - hiredate_setting varchar(1000), - leavedate_setting varchar(1000), - salary_start_month datetime, - salary_end_month datetime -) -GO - -create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2022/sql2022122005801.sql b/resource/sqlupgrade/SQLServer/2022/sql2022122005801.sql deleted file mode 100644 index 48224de5e..000000000 --- a/resource/sqlupgrade/SQLServer/2022/sql2022122005801.sql +++ /dev/null @@ -1,24 +0,0 @@ -create table hrsa_salary_statistics_item -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - item_name nvarchar(50), - item_value nvarchar(1000), - count_rule nvarchar(500), - sum_rule nvarchar(500), - avg_rule nvarchar(500), - max_rule nvarchar(500), - min_rule nvarchar(500), - median_rule nvarchar(500), - index_value int, - unit_type int, - stat_report_id bigint -) -GO - -create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023011206201.sql b/resource/sqlupgrade/SQLServer/2023/sql2023011206201.sql deleted file mode 100644 index 6ff111bcd..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023011206201.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_charts_setting -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - table_id bigint not null, - charts_type int not null, - item_values nvarchar(500), - item_col_value nvarchar(50) not null, - dimension_range int not null, - item_sort_value nvarchar(500), - item_col_sort_value nvarchar(50), - sort_type int, - sort_num int -) -GO - -create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023013104001.sql b/resource/sqlupgrade/SQLServer/2023/sql2023013104001.sql deleted file mode 100644 index a74523163..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023013104001.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_salary_echarts_setting -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - report_id bigint not null, - charts_type int not null, - item_values nvarchar(500), - item_col_value nvarchar(50) not null, - dimension_range int not null, - item_sort_value nvarchar(500), - item_col_sort_value nvarchar(50), - sort_type int, - sort_num int -) -GO - -create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023021000102.sql b/resource/sqlupgrade/SQLServer/2023/sql2023021000102.sql deleted file mode 100644 index 4e68f59aa..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023021000102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim alter column dim_type nvarchar(30) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023021604102.sql b/resource/sqlupgrade/SQLServer/2023/sql2023021604102.sql deleted file mode 100644 index 14c2effdd..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023021604102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report alter column income_category_setting nvarchar(1000) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023021705001.sql b/resource/sqlupgrade/SQLServer/2023/sql2023021705001.sql deleted file mode 100644 index c5525afae..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023021705001.sql +++ /dev/null @@ -1,82 +0,0 @@ -create table hrsa_statreportlogs_detail -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - uuid nvarchar(36) not null, - mainid nvarchar(36) not null, - dataid nvarchar(50) not null, - belongdataid nvarchar(50) not null, - tablename nvarchar(200) not null, - tablenamelabelid nvarchar(50) default '-1' not null, - tablenamedesc nvarchar(50) not null, - fieldname nvarchar(200) not null, - fieldnamelabelid nvarchar(50) default '-1' not null, - newvalue nvarchar(max) not null, - oldvalue nvarchar(max) not null, - newrealvalue nvarchar(max) not null, - oldrealvalue nvarchar(max) not null, - fielddesc nvarchar(200) not null, - showorder int not null, - isdetail int default 0 not null -) -GO - -create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key) -GO - -create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time) -GO - -create table hrsa_statreportlogs -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - uuid nvarchar(36) not null, - log_date datetime not null, - device nvarchar(500) not null, - log_operator bigint not null, - operatorname nvarchar(100), - targetid bigint default '-1' not null, - targetname nvarchar(max) not null, - modulename nvarchar(100) not null, - functionname nvarchar(100) not null, - interfacename nvarchar(100) not null, - requesturl nvarchar(200) not null, - requesturi nvarchar(200) not null, - operatetype nvarchar(50) not null, - operatetypename nvarchar(100) not null, - operatedesc nvarchar(3000) not null, - params nvarchar(max) not null, - belongmainid nvarchar(36) not null, - clientip nvarchar(50) not null, - groupid nvarchar(50) not null, - groupnamelabel nvarchar(1000) not null, - redoservice nvarchar(200) not null, - redocontext nvarchar(max) not null, - cancelservice nvarchar(200) not null, - cancelcontext nvarchar(max) not null, - totalruntime bigint default '0' not null, - mainruntime bigint default '0' not null, - log_result nvarchar(100) not null, - fromterminal nvarchar(100) not null, - resultdesc nvarchar(max) not null, - old_content nvarchar(3000) not null, - link_type nvarchar(20) not null, - link_id bigint default '0' not null, - old_link_id bigint default '0' not null -) -GO - -create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key) -GO - -create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023032901802.sql b/resource/sqlupgrade/SQLServer/2023/sql2023032901802.sql deleted file mode 100644 index fb1f9c1d6..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023032901802.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add remark nvarchar(100) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023032906602.sql b/resource/sqlupgrade/SQLServer/2023/sql2023032906602.sql deleted file mode 100644 index 1c9ec574c..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023032906602.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add second_dimension nvarchar(100) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023032915202.sql b/resource/sqlupgrade/SQLServer/2023/sql2023032915202.sql deleted file mode 100644 index e8703b352..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023032915202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_index nvarchar(100) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023032916202.sql b/resource/sqlupgrade/SQLServer/2023/sql2023032916202.sql deleted file mode 100644 index 6416a4b37..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023032916202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_type nvarchar(100) -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/2023/sql2023040404902.sql b/resource/sqlupgrade/SQLServer/2023/sql2023040404902.sql deleted file mode 100644 index 2ce9a28f2..000000000 --- a/resource/sqlupgrade/SQLServer/2023/sql2023040404902.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim add label_id int -GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/报表.sql b/resource/sqlupgrade/SQLServer/报表.sql deleted file mode 100644 index 953eadd43..000000000 --- a/resource/sqlupgrade/SQLServer/报表.sql +++ /dev/null @@ -1,244 +0,0 @@ -create table hrsa_sub_table -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - sub_table_name nvarchar(100) not null, - dimension nvarchar(20) not null, - start_month nvarchar(10), - end_month nvarchar(10), - pay_org_string nvarchar(500), - pay_agency_string nvarchar(500), - sub_company_string nvarchar(500), - depart_string nvarchar(500), - grade_string nvarchar(500), - position_string nvarchar(500), - status_string nvarchar(500), - employee_type nvarchar(500), - employee_string nvarchar(500), - payment_type_string nvarchar(100) -) -GO - -create table hrsa_sub_table_item -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - table_id bigint not null, - item_name nvarchar(50) not null, - item_value nvarchar(500) not null, - index_value int not null, - total_rule nvarchar(500), - count_rule nvarchar(500), - unit_type int default 2 -) -GO - -alter table hrsa_sub_table add table_type int -GO - -alter table hrsa_sub_table add constraint df_table_type_7b1e7561 default 0 for table_type -GO - -create table hrsa_salary_stats_dim -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - dim_name nvarchar(100), - dim_type nvarchar(20), - remark nvarchar(500), - setting nvarchar(2000), - is_default int, - dim_code nvarchar(50) -) -GO - -create table hrsa_salary_stats_report -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - report_name nvarchar(100), - dimension nvarchar(1000), - tax_agent_setting nvarchar(1000), - income_category_setting nvarchar(20), - sub_company_setting nvarchar(1000), - depart_setting nvarchar(1000), - grade_setting nvarchar(1000), - position_setting nvarchar(1000), - status_setting nvarchar(1000), - employee_setting nvarchar(1000), - hiredate_setting varchar(1000), - leavedate_setting varchar(1000), - salary_start_month datetime, - salary_end_month datetime -) -GO - -create table hrsa_salary_statistics_item -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - item_name nvarchar(50), - item_value nvarchar(1000), - count_rule nvarchar(500), - sum_rule nvarchar(500), - avg_rule nvarchar(500), - max_rule nvarchar(500), - min_rule nvarchar(500), - median_rule nvarchar(500), - index_value int, - unit_type int, - stat_report_id bigint -) -GO - -create table hrsa_charts_setting -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - table_id bigint not null, - charts_type int not null, - item_values nvarchar(500), - item_col_value nvarchar(50) not null, - dimension_range int not null, - item_sort_value nvarchar(500), - item_col_sort_value nvarchar(50), - sort_type int, - sort_num int -) -GO - -create table hrsa_salary_echarts_setting -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - report_id bigint not null, - charts_type int not null, - item_values nvarchar(500), - item_col_value nvarchar(50) not null, - dimension_range int not null, - item_sort_value nvarchar(500), - item_col_sort_value nvarchar(50), - sort_type int, - sort_num int -) -GO - -alter table hrsa_salary_stats_dim alter column dim_type nvarchar(30) -GO - -alter table hrsa_salary_stats_report alter column income_category_setting nvarchar(1000) -GO - -create table hrsa_statreportlogs_detail -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - uuid nvarchar(36) not null, - mainid nvarchar(36) not null, - dataid nvarchar(50) not null, - belongdataid nvarchar(50) not null, - tablename nvarchar(200) not null, - tablenamelabelid nvarchar(50) default '-1' not null, - tablenamedesc nvarchar(50) not null, - fieldname nvarchar(200) not null, - fieldnamelabelid nvarchar(50) default '-1' not null, - newvalue nvarchar(max) not null, - oldvalue nvarchar(max) not null, - newrealvalue nvarchar(max) not null, - oldrealvalue nvarchar(max) not null, - fielddesc nvarchar(200) not null, - showorder int not null, - isdetail int default 0 not null -) -GO - -create table hrsa_statreportlogs -( - id bigint primary key , - create_time datetime, - update_time datetime, - creator bigint, - delete_type int default 0, - tenant_key nvarchar(10), - uuid nvarchar(36) not null, - log_date datetime not null, - device nvarchar(500) not null, - log_operator bigint not null, - operatorname nvarchar(100), - targetid bigint default '-1' not null, - targetname nvarchar(max) not null, - modulename nvarchar(100) not null, - functionname nvarchar(100) not null, - interfacename nvarchar(100) not null, - requesturl nvarchar(200) not null, - requesturi nvarchar(200) not null, - operatetype nvarchar(50) not null, - operatetypename nvarchar(100) not null, - operatedesc nvarchar(3000) not null, - params nvarchar(max) not null, - belongmainid nvarchar(36) not null, - clientip nvarchar(50) not null, - groupid nvarchar(50) not null, - groupnamelabel nvarchar(1000) not null, - redoservice nvarchar(200) not null, - redocontext nvarchar(max) not null, - cancelservice nvarchar(200) not null, - cancelcontext nvarchar(max) not null, - totalruntime bigint default '0' not null, - mainruntime bigint default '0' not null, - log_result nvarchar(100) not null, - fromterminal nvarchar(100) not null, - resultdesc nvarchar(max) not null, - old_content nvarchar(3000) not null, - link_type nvarchar(20) not null, - link_id bigint default '0' not null, - old_link_id bigint default '0' not null -) -GO - -alter table hrsa_salary_stats_report add remark nvarchar(100) -GO - -alter table hrsa_salary_stats_report add second_dimension nvarchar(100) -GO - -alter table hrsa_salary_stats_report add sort_index nvarchar(100) -GO - -alter table hrsa_salary_stats_report add sort_type nvarchar(100) -GO - -alter table hrsa_salary_stats_dim add label_id int -GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022120100901.sql b/resource/sqlupgrade/ST/2022/sql2022120100901.sql deleted file mode 100644 index 9b45402f5..000000000 --- a/resource/sqlupgrade/ST/2022/sql2022120100901.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_sub_table -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - sub_table_name varchar(100) not null, - dimension varchar(20) not null, - start_month varchar(10), - end_month varchar(10), - pay_org_string varchar(500), - pay_agency_string varchar(500), - sub_company_string varchar(500), - depart_string varchar(500), - grade_string varchar(500), - position_string varchar(500), - status_string varchar(500), - employee_type varchar(500), - employee_string varchar(500), - payment_type_string varchar(100) -); -/ - -create index idx_table_tk_8413fde2 on hrsa_sub_table(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022120101001.sql b/resource/sqlupgrade/ST/2022/sql2022120101001.sql deleted file mode 100644 index 8ad5b3129..000000000 --- a/resource/sqlupgrade/ST/2022/sql2022120101001.sql +++ /dev/null @@ -1,23 +0,0 @@ -create table hrsa_sub_table_item -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - table_id number not null, - item_name varchar(50) not null, - item_value varchar(500) not null, - index_value int not null, - total_rule varchar(500), - count_rule varchar(500), - unit_type int default 2 -); -/ - -create index idx_report_tenant_key on hrsa_sub_table_item(tenant_key); -/ - -create index idx_tk_table_dt_517df716 on hrsa_sub_table_item(tenant_key,delete_type,table_id,creator); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022120901602.sql b/resource/sqlupgrade/ST/2022/sql2022120901602.sql deleted file mode 100644 index 81a0b8693..000000000 --- a/resource/sqlupgrade/ST/2022/sql2022120901602.sql +++ /dev/null @@ -1,5 +0,0 @@ -alter table hrsa_sub_table add table_type int; -/ - -alter table hrsa_sub_table modify table_type default 0; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022121503101.sql b/resource/sqlupgrade/ST/2022/sql2022121503101.sql deleted file mode 100644 index fb9159c03..000000000 --- a/resource/sqlupgrade/ST/2022/sql2022121503101.sql +++ /dev/null @@ -1,19 +0,0 @@ -create table hrsa_salary_stats_dim -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - dim_name varchar(100), - dim_type varchar(20), - remark varchar(500), - setting varchar(2000), - is_default int, - dim_code varchar(50) -); -/ - -create index idx_tenant_key_sal_stats_dim on hrsa_salary_stats_dim(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022121613501.sql b/resource/sqlupgrade/ST/2022/sql2022121613501.sql deleted file mode 100644 index 2cb7ab3fb..000000000 --- a/resource/sqlupgrade/ST/2022/sql2022121613501.sql +++ /dev/null @@ -1,27 +0,0 @@ -create table hrsa_salary_stats_report -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - report_name varchar(100), - dimension varchar(1000), - tax_agent_setting varchar(1000), - income_category_setting varchar(20), - sub_company_setting varchar(1000), - depart_setting varchar(1000), - grade_setting varchar(1000), - position_setting varchar(1000), - status_setting varchar(1000), - employee_setting varchar(1000), - hiredate_setting varchar(1000), - leavedate_setting varchar(1000), - salary_start_month date, - salary_end_month date -); -/ - -create index idx_tenant_key_sal_stats_rep on hrsa_salary_stats_report(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2022/sql2022122005801.sql b/resource/sqlupgrade/ST/2022/sql2022122005801.sql deleted file mode 100644 index 289ad7775..000000000 --- a/resource/sqlupgrade/ST/2022/sql2022122005801.sql +++ /dev/null @@ -1,24 +0,0 @@ -create table hrsa_salary_statistics_item -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - item_name varchar(50), - item_value varchar(1000), - count_rule varchar(500), - sum_rule varchar(500), - avg_rule varchar(500), - max_rule varchar(500), - min_rule varchar(500), - median_rule varchar(500), - index_value int, - unit_type int, - stat_report_id number -); -/ - -create index idx_tenant_key_sal_stat_item on hrsa_salary_statistics_item(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023011206201.sql b/resource/sqlupgrade/ST/2023/sql2023011206201.sql deleted file mode 100644 index 1bcc5602a..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023011206201.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_charts_setting -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - table_id number not null, - charts_type int not null, - item_values varchar(500), - item_col_value varchar(50) not null, - dimension_range int not null, - item_sort_value varchar(500), - item_col_sort_value varchar(50), - sort_type int, - sort_num int -); -/ - -create index index_echarts_tk_ae4c0e13 on hrsa_charts_setting(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023013104001.sql b/resource/sqlupgrade/ST/2023/sql2023013104001.sql deleted file mode 100644 index bd3d42415..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023013104001.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table hrsa_salary_echarts_setting -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - report_id number not null, - charts_type int not null, - item_values varchar(500), - item_col_value varchar(50) not null, - dimension_range int not null, - item_sort_value varchar(500), - item_col_sort_value varchar(50), - sort_type int, - sort_num int -); -/ - -create index idx_salary_echart_set_tk on hrsa_salary_echarts_setting(tenant_key); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023021000102.sql b/resource/sqlupgrade/ST/2023/sql2023021000102.sql deleted file mode 100644 index a1b09bbb5..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023021000102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim modify dim_type varchar(30); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023021604102.sql b/resource/sqlupgrade/ST/2023/sql2023021604102.sql deleted file mode 100644 index a5bb145fe..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023021604102.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report modify income_category_setting varchar(1000); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023021705001.sql b/resource/sqlupgrade/ST/2023/sql2023021705001.sql deleted file mode 100644 index 708255326..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023021705001.sql +++ /dev/null @@ -1,82 +0,0 @@ -create table hrsa_statreportlogs_detail -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - uuid varchar(36) not null, - mainid varchar(36) not null, - dataid varchar(50) not null, - belongdataid varchar(50) not null, - tablename varchar(200) not null, - tablenamelabelid varchar(50) default '-1' not null, - tablenamedesc varchar(50) not null, - fieldname varchar(200) not null, - fieldnamelabelid varchar(50) default '-1' not null, - newvalue clob not null, - oldvalue clob not null, - newrealvalue clob not null, - oldrealvalue clob not null, - fielddesc varchar(200) not null, - showorder int not null, - isdetail int default 0 not null -); -/ - -create index idx_tenant_4fd0f4bc on hrsa_statreportlogs_detail(tenant_key); -/ - -create index idx_del_up_e798e3ef on hrsa_statreportlogs_detail(delete_type,update_time); -/ - -create table hrsa_statreportlogs -( - id number primary key , - create_time date, - update_time date, - creator number, - delete_type int default 0, - tenant_key varchar(10), - uuid varchar(36) not null, - log_date date not null, - device varchar(500) not null, - log_operator number not null, - operatorname varchar(100), - targetid number default '-1' not null, - targetname clob not null, - modulename varchar(100) not null, - functionname varchar(100) not null, - interfacename varchar(100) not null, - requesturl varchar(200) not null, - requesturi varchar(200) not null, - operatetype varchar(50) not null, - operatetypename varchar(100) not null, - operatedesc varchar(3000) not null, - params clob not null, - belongmainid varchar(36) not null, - clientip varchar(50) not null, - groupid varchar(50) not null, - groupnamelabel varchar(1000) not null, - redoservice varchar(200) not null, - redocontext clob not null, - cancelservice varchar(200) not null, - cancelcontext clob not null, - totalruntime number default '0' not null, - mainruntime number default '0' not null, - log_result varchar(100) not null, - fromterminal varchar(100) not null, - resultdesc clob not null, - old_content varchar(3000) not null, - link_type varchar(20) not null, - link_id number default '0' not null, - old_link_id number default '0' not null -); -/ - -create index idx_tenan_0ad78df3 on hrsa_statreportlogs(tenant_key); -/ - -create index idx_del_u_7c93862b on hrsa_statreportlogs(delete_type,update_time); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023032901802.sql b/resource/sqlupgrade/ST/2023/sql2023032901802.sql deleted file mode 100644 index 28569b30a..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023032901802.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add remark varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023032906602.sql b/resource/sqlupgrade/ST/2023/sql2023032906602.sql deleted file mode 100644 index 2904d96eb..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023032906602.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add second_dimension varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023032915202.sql b/resource/sqlupgrade/ST/2023/sql2023032915202.sql deleted file mode 100644 index 6a8164591..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023032915202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_index varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023032916202.sql b/resource/sqlupgrade/ST/2023/sql2023032916202.sql deleted file mode 100644 index a78cd0884..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023032916202.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_report add sort_type varchar(100); -/ \ No newline at end of file diff --git a/resource/sqlupgrade/ST/2023/sql2023040404902.sql b/resource/sqlupgrade/ST/2023/sql2023040404902.sql deleted file mode 100644 index c444c3992..000000000 --- a/resource/sqlupgrade/ST/2023/sql2023040404902.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table hrsa_salary_stats_dim add label_id int; -/ \ No newline at end of file diff --git a/src/com/engine/salary/report/common/constant/DbCrudConstant.java b/src/com/engine/salary/report/common/constant/DbCrudConstant.java index 885309c4a..2ec6a8eb8 100644 --- a/src/com/engine/salary/report/common/constant/DbCrudConstant.java +++ b/src/com/engine/salary/report/common/constant/DbCrudConstant.java @@ -1,10 +1,6 @@ package com.engine.salary.report.common.constant; -/** - * @Description: 数据库操作常量 - * @Author: wangxiangzhong - * @Date: 2022/7/27 20:41 - */ + public class DbCrudConstant { /** diff --git a/src/com/engine/salary/report/common/constant/SalaryConstant.java b/src/com/engine/salary/report/common/constant/SalaryConstant.java index 69ad5ff88..b6af93d9d 100644 --- a/src/com/engine/salary/report/common/constant/SalaryConstant.java +++ b/src/com/engine/salary/report/common/constant/SalaryConstant.java @@ -1,9 +1,7 @@ package com.engine.salary.report.common.constant; /** - * @Description: 薪资常量 - * @Author: wangxiangzhong - * @Date: 2022/5/27 13:32 + * 薪资常量 */ public class SalaryConstant { diff --git a/src/com/engine/salary/report/common/constant/SalaryReportModule.java b/src/com/engine/salary/report/common/constant/SalaryReportModule.java index 8afc32b4e..655f5e2d0 100644 --- a/src/com/engine/salary/report/common/constant/SalaryReportModule.java +++ b/src/com/engine/salary/report/common/constant/SalaryReportModule.java @@ -1,11 +1,5 @@ package com.engine.salary.report.common.constant; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/10/24 - * @Version: v1.0 - */ public class SalaryReportModule { public final static String BROWSER_MODULE = "salaryreport"; diff --git a/src/com/engine/salary/report/common/constant/SalaryStatisticsDimensionConstant.java b/src/com/engine/salary/report/common/constant/SalaryStatisticsDimensionConstant.java index 9be8dfd15..46d93b57e 100644 --- a/src/com/engine/salary/report/common/constant/SalaryStatisticsDimensionConstant.java +++ b/src/com/engine/salary/report/common/constant/SalaryStatisticsDimensionConstant.java @@ -1,9 +1,7 @@ package com.engine.salary.report.common.constant; /** - * @Description: 薪资报表统计维度常量 - * @Author: wangxiangzhong - * @Date: 2022/12/30 13:17 + * 薪资报表统计维度常量 */ public class SalaryStatisticsDimensionConstant { diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java index 808c59768..0067e1cff 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java @@ -12,9 +12,7 @@ import java.util.Set; import java.util.stream.Collectors; /** - * @Description: 薪酬统计员工明细 - * @Author: wangxiangzhong - * @Date: 2022/12/30 14:23 + * 薪酬统计员工明细 */ public class SalaryStatisticsEmployeeBO { diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index 3f39787ed..008569ce1 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -35,9 +35,7 @@ import java.util.function.Function; import java.util.stream.Collectors; /** - * @Description: 薪酬统计报表 - * @Author: wangxiangzhong - * @Date: 2022/12/30 14:04 + * 薪酬统计报表 */ public class SalaryStatisticsReportBO { diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java index e9ebbddf3..5e78018f6 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionFormDTO.java @@ -8,9 +8,7 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Description: 薪酬统计维度表单 - * @Author: wangxiangzhong - * @Date: 2022/12/15 14:25 + * 薪酬统计维度表单 */ @Data @Builder diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java index e09871606..cc3dfff7a 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEchartsDTO.java @@ -10,9 +10,7 @@ import lombok.NoArgsConstructor; import java.util.List; /** - * @Description: 分析图数据展示范围设置 - * @Author: wangxiangzhong - * @Date: 2023/1/31 14:48 + * 分析图数据展示范围设置 */ @Data @Builder diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java index 3848c31fe..f89c61d76 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java @@ -11,9 +11,7 @@ import lombok.NoArgsConstructor; import java.util.List; /** - * @Description: 薪酬统计员工明细核算结果 - * @Author: wangxiangzhong - * @Date: 2022/12/16 17:17 + * 薪酬统计员工明细核算结果 */ @Data @Builder diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java index 6b87f3d6d..6c7e5ca80 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java @@ -8,42 +8,39 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Description: 薪酬统计员工列表 - * @Author: wangxiangzhong - * @Date: 2022/12/16 17:17 + * 薪酬统计员工列表 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor -//"薪酬统计员工列表") public class SalaryStatisticsEmployeeListDTO { - //主键id") + //主键id @JsonSerialize(using = ToStringSerializer.class) private Long id; - //姓名") + //姓名 private String name; - //分部") + //分部 private String subCompany; - //部门") + //部门 private String department; - //岗位") + //岗位 private String position; - // 员工状态") + // 员工状态 private String status; - //工号") + //工号 private String jobNum; - //证件号码") + //证件号码 private String idNo; - //人员类型") + //人员类型 private Integer employeeType; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java index 41ff65310..19e601bbd 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemFormDTO.java @@ -10,24 +10,21 @@ import lombok.NoArgsConstructor; import java.util.Map; /** - * @Description: 薪酬统计自定义统计项表单 - * @Author: wangxiangzhong - * @Date: 2022/12/15 14:25 + * 薪酬统计自定义统计项表单 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor -//"薪酬统计自定义统计项表单") public class SalaryStatisticsItemFormDTO { - //主键id") + //主键id @JsonSerialize(using = ToStringSerializer.class) private Long id; - //基础表单") + //基础表单 private Object baseForm; - //统计规则") + //统计规则 private Map ruleData; } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java index 86923ed9d..c64881c59 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsItemRuleDTO.java @@ -8,9 +8,7 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; /** - * @Description: 薪酬统计报表自定义统计项目规则 - * @Author: wangxiangzhong - * @Date: 2022/12/29 16:35 + * 薪酬统计报表自定义统计项目规则 */ @Data @Builder diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java index 646311a6c..a2f6a1b6c 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java @@ -12,10 +12,13 @@ import lombok.NoArgsConstructor; import java.util.List; /** - * @Description: 薪酬统计报表数据 - * @Author: wangxiangzhong - * @Date: 2022/12/15 14:25 - */ + * 薪酬统计报表自定义统计项目规则 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java index f698810ab..95c88d855 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportFormDTO.java @@ -8,10 +8,13 @@ import lombok.NoArgsConstructor; import java.util.List; /** - * @Description: 薪酬统计报表表单 - * @Author: wangxiangzhong - * @Date: 2022/12/15 14:25 - */ + * 薪酬统计报表表单 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/dto/SubEmployeeTableDTO.java b/src/com/engine/salary/report/entity/dto/SubEmployeeTableDTO.java index 2780664b5..981e30ac2 100644 --- a/src/com/engine/salary/report/entity/dto/SubEmployeeTableDTO.java +++ b/src/com/engine/salary/report/entity/dto/SubEmployeeTableDTO.java @@ -7,12 +7,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/8 - * @Version: v1.0 - */ + @Data @Accessors(chain = true) //人员信息过滤中间类") diff --git a/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java b/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java index ecb433c36..78b681b01 100644 --- a/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java +++ b/src/com/engine/salary/report/entity/dto/SubTableChartsDTO.java @@ -7,12 +7,7 @@ import lombok.NoArgsConstructor; import java.util.List; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2023/1/12 - * @Version: v1.0 - */ + @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java b/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java index 5b9d9a7e3..bd3907290 100644 --- a/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java +++ b/src/com/engine/salary/report/entity/dto/TaxAgentViewDTO.java @@ -8,12 +8,7 @@ import lombok.NoArgsConstructor; import java.util.List; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/18 - * @Version: v1.0 - */ + @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/BaseQueryParam.java b/src/com/engine/salary/report/entity/param/BaseQueryParam.java index f8bd0ccd3..99b9b4981 100644 --- a/src/com/engine/salary/report/entity/param/BaseQueryParam.java +++ b/src/com/engine/salary/report/entity/param/BaseQueryParam.java @@ -4,11 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -/** - * @Description: 分页参数 - * @Author: zhangheng - * @Date: 2022/12/06 17:48 - */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/ExportColumn.java b/src/com/engine/salary/report/entity/param/ExportColumn.java index edecda3e0..ef5fa5e57 100644 --- a/src/com/engine/salary/report/entity/param/ExportColumn.java +++ b/src/com/engine/salary/report/entity/param/ExportColumn.java @@ -1,18 +1,11 @@ package com.engine.salary.report.entity.param; -import io.swagger.annotations.ApiModel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/9 - * @Version: v1.0 - */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/ExportCommonParam.java b/src/com/engine/salary/report/entity/param/ExportCommonParam.java index 8d8f403c3..1c441a4cf 100644 --- a/src/com/engine/salary/report/entity/param/ExportCommonParam.java +++ b/src/com/engine/salary/report/entity/param/ExportCommonParam.java @@ -7,12 +7,6 @@ import lombok.NoArgsConstructor; import java.util.List; import java.util.Map; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/9 - * @Version: v1.0 - */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java index 690b31c29..e3f721b2c 100644 --- a/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java @@ -9,10 +9,13 @@ import java.time.YearMonth; import java.util.List; /** - * @Description: 薪酬统计员工明细查询参数 - * @Author: wangxiangzhong - * @Date: 2022/12/16 16:44 - */ + * 薪酬统计员工明细查询参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java index 7458a2da3..195c23d27 100644 --- a/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryEmployeeQueryParam.java @@ -8,11 +8,7 @@ import org.apache.commons.lang3.StringUtils; import java.util.Collection; /** - * @description: 人员查询条件 - * @author: xiajun - * @modified By: xiajun - * @date: 2022/5/10 15:12 - * @version:v1.0 + * 人员查询条件 */ @Data @Accessors(chain = true) diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java index b5b9efb80..fd55e7b49 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionQueryParam.java @@ -7,10 +7,13 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Description: 薪酬统计维度查询参数 - * @Author: wangxiangzhong - * @Date: 2022/12/15 11:45 - */ + * 薪酬统计维度查询参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java index 450063350..3de5f955b 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsDimensionSaveParam.java @@ -14,10 +14,13 @@ import java.util.List; import java.util.Objects; /** - * @Description: 薪酬统计维度保存参数 - * @Author: wangxiangzhong - * @Date: 2022/12/16 9:09 - */ + * 薪酬统计维度保存参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java index a9dc5fc2a..ff1afbdb2 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java @@ -10,10 +10,13 @@ import java.time.YearMonth; import java.util.List; /** - * @Description: 薪酬统计员工明细查询参数 - * @Author: wangxiangzhong - * @Date: 2022/12/16 16:44 - */ + * 薪酬统计员工明细查询参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java index ef6df5126..77803d374 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsItemSaveParam.java @@ -9,10 +9,13 @@ import lombok.NoArgsConstructor; import java.util.List; /** - * @Description: 薪酬统计报表自定义统计项目保存参数 - * @Author: wangxiangzhong - * @Date: 2022/12/21 9:42 - */ + * 薪酬统计报表自定义统计项目保存参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index a8c0171b6..121d4183d 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -10,10 +10,13 @@ import java.util.Date; import java.util.List; /** - * @Description: 薪酬统计报表数据查询参数 - * @Author: wangxiangzhong - * @Date: 2022/12/16 9:09 - */ + * 薪酬统计报表数据查询参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java index 2ad284cb5..1fa43d8f9 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java @@ -6,10 +6,13 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Description: 薪资统计报表查询参数 - * @Author: wangxiangzhong - * @Date: 2023/1/11 9:54 - */ + * 薪资统计报表查询参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java index 0a84fe6c3..78f582a46 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportSaveParam.java @@ -12,10 +12,13 @@ import org.apache.commons.lang3.StringUtils; import java.util.List; /** - * @Description: 薪酬统计报表保存参数 - * @Author: wangxiangzhong - * @Date: 2022/12/16 9:09 - */ + * 薪酬统计报表保存参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SubTableItemParam.java b/src/com/engine/salary/report/entity/param/SubTableItemParam.java index 6cfec3f3c..8bb433931 100644 --- a/src/com/engine/salary/report/entity/param/SubTableItemParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableItemParam.java @@ -4,12 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/10/31 - * @Version: v1.0 - */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/SubTableParam.java b/src/com/engine/salary/report/entity/param/SubTableParam.java index 8b2d8e80d..996d3aeea 100644 --- a/src/com/engine/salary/report/entity/param/SubTableParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableParam.java @@ -4,12 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/10/31 - * @Version: v1.0 - */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java index d78bab65d..253e5f81a 100644 --- a/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java +++ b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java @@ -8,10 +8,13 @@ import lombok.NoArgsConstructor; import java.util.Collection; /** - * @Description: 个税扣缴义务人查询参数 - * @Author: wangxiangzhong - * @Date: 2021/10/29 15:03 - */ + * 个税扣缴义务人查询参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsDimensionPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsDimensionPO.java index dd3d4dd03..16d7b5136 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsDimensionPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsDimensionPO.java @@ -11,10 +11,13 @@ import java.util.Collection; import java.util.Date; /** - * @Description: 薪酬统计维度表 - * @Author: wangxiangzhong - * @Date: 2022/12/15 11:23 - */ + * 薪酬统计维度表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java index 0ffb3d7e8..9a39e2771 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsEChartsSettingPO.java @@ -9,10 +9,13 @@ import java.util.Collection; import java.util.Date; /** - * @Description: 薪酬统计图表 - * @Author: wangxiangzhong - * @Date: 2023/1/31 15:25 - */ + * 薪酬统计图表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java index f42f74fb2..5343ae9b7 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java @@ -10,12 +10,6 @@ import java.io.Serializable; import java.util.Collection; import java.util.Date; -/** - * @Description: - * @Author: wangxiangzhong - * @CreateDate: 2022/12/20 - * @Version: v1.0 - */ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java index 8d371dc68..a465e7add 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsReportPO.java @@ -10,10 +10,13 @@ import java.util.Collection; import java.util.Date; /** - * @Description: 薪酬统计报表 - * @Author: wangxiangzhong - * @Date: 2022/12/15 11:23 - */ + * 薪酬统计报表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/entity/po/SubTableItemPO.java b/src/com/engine/salary/report/entity/po/SubTableItemPO.java index 26a5c309f..481816049 100644 --- a/src/com/engine/salary/report/entity/po/SubTableItemPO.java +++ b/src/com/engine/salary/report/entity/po/SubTableItemPO.java @@ -7,12 +7,6 @@ import lombok.NoArgsConstructor; import java.time.LocalDateTime; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/10/31 - * @Version: v1.0 - */ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/report/enums/DataTypeEnum.java b/src/com/engine/salary/report/enums/DataTypeEnum.java index 47dd42272..f3b90c113 100644 --- a/src/com/engine/salary/report/enums/DataTypeEnum.java +++ b/src/com/engine/salary/report/enums/DataTypeEnum.java @@ -1,11 +1,5 @@ package com.engine.salary.report.enums; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2021/11/19 14:18 - * @Version: v1.0 - */ public enum DataTypeEnum { CUSTOM(0, "自定义"), diff --git a/src/com/engine/salary/report/enums/ExtEmployeeTypeEnum.java b/src/com/engine/salary/report/enums/ExtEmployeeTypeEnum.java index 355b9fde4..f19091be2 100644 --- a/src/com/engine/salary/report/enums/ExtEmployeeTypeEnum.java +++ b/src/com/engine/salary/report/enums/ExtEmployeeTypeEnum.java @@ -1,11 +1,5 @@ package com.engine.salary.report.enums; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/4/14 17:28 - * @Version: v1.0 - */ public enum ExtEmployeeTypeEnum { NO(1, "不是挂靠人员"), YES(2, "是挂靠人员"); diff --git a/src/com/engine/salary/report/enums/IncomeCategoryEnum.java b/src/com/engine/salary/report/enums/IncomeCategoryEnum.java index 981f4aa78..8e47229eb 100644 --- a/src/com/engine/salary/report/enums/IncomeCategoryEnum.java +++ b/src/com/engine/salary/report/enums/IncomeCategoryEnum.java @@ -9,13 +9,15 @@ import java.util.Collections; import java.util.List; import java.util.Objects; + /** - * @description: 应税项目 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 12/18/21 3:20 PM - * @version:v1.0 - */ + * 应税项目 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public enum IncomeCategoryEnum implements BaseEnum { WAGES_AND_SALARIES(1, "正常工资薪金", 160487), diff --git a/src/com/engine/salary/report/enums/OperateTypeEnum.java b/src/com/engine/salary/report/enums/OperateTypeEnum.java index 6026dd861..d8e14b304 100644 --- a/src/com/engine/salary/report/enums/OperateTypeEnum.java +++ b/src/com/engine/salary/report/enums/OperateTypeEnum.java @@ -1,9 +1,7 @@ package com.engine.salary.report.enums; /** - * @Description: 操作类型 - * @Author: wangxiangzhong - * @Date: 2021/11/1 13:17 + * 操作类型 */ public enum OperateTypeEnum { diff --git a/src/com/engine/salary/report/enums/PaymentScopeEnum.java b/src/com/engine/salary/report/enums/PaymentScopeEnum.java index ee129ba95..1b86fc337 100644 --- a/src/com/engine/salary/report/enums/PaymentScopeEnum.java +++ b/src/com/engine/salary/report/enums/PaymentScopeEnum.java @@ -1,11 +1,5 @@ package com.engine.salary.report.enums; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2021/11/15 14:54 - * @Version: v1.0 - */ public enum PaymentScopeEnum { SCOPE_COMPANY(1, "公司", 87158), SCOPE_PERSON(2, "个人", 87159); diff --git a/src/com/engine/salary/report/enums/PaymentStatusEnum.java b/src/com/engine/salary/report/enums/PaymentStatusEnum.java index b701bb642..75975a150 100644 --- a/src/com/engine/salary/report/enums/PaymentStatusEnum.java +++ b/src/com/engine/salary/report/enums/PaymentStatusEnum.java @@ -1,12 +1,6 @@ package com.engine.salary.report.enums; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2021/12/6 9:32 - * @Version: v1.0 - */ public enum PaymentStatusEnum { COMMON(0, "正常缴纳", 92265), diff --git a/src/com/engine/salary/report/enums/SalaryDataTypeEnum.java b/src/com/engine/salary/report/enums/SalaryDataTypeEnum.java index c7e41af81..db655d970 100644 --- a/src/com/engine/salary/report/enums/SalaryDataTypeEnum.java +++ b/src/com/engine/salary/report/enums/SalaryDataTypeEnum.java @@ -5,12 +5,13 @@ import com.engine.salary.enums.BaseEnum; import java.util.Objects; /** - * @description: 薪资项目的字段类型 - * @author: xiajun - * @modified By: xiajun - * @date: 2022/3/10 17:16 - * @version:v1.0 - */ + * 薪资项目的字段类型 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public enum SalaryDataTypeEnum implements BaseEnum { STRING("string", "字符", 105093), NUMBER("number", "数值", 87625), diff --git a/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java b/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java index 5eaf9d942..93a6a0aba 100644 --- a/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java +++ b/src/com/engine/salary/report/enums/SalaryStatisticsDimensionTypeEnum.java @@ -7,10 +7,13 @@ import java.util.Arrays; import java.util.Optional; /** - * @Description: 薪酬统计维度类型 - * @Author: wangxiangzhong - * @Date: 2022/12/15 11:28 - */ + * 薪酬统计维度类型 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public enum SalaryStatisticsDimensionTypeEnum implements BaseEnum { QUALITATIVE("QUALITATIVE", "定性", 161086), RATION_GROUP_SPACING("RATION_GROUP_SPACING", "定量-组距式分组", 161087), diff --git a/src/com/engine/salary/report/enums/SalarySystemTypeEnum.java b/src/com/engine/salary/report/enums/SalarySystemTypeEnum.java index a9e25eb7a..7ebb9c1a0 100644 --- a/src/com/engine/salary/report/enums/SalarySystemTypeEnum.java +++ b/src/com/engine/salary/report/enums/SalarySystemTypeEnum.java @@ -6,12 +6,13 @@ import com.engine.salary.enums.BaseEnum; import java.util.Objects; /** - * @description: 税率表表单类型 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 10/19/21 4:05 PM - * @version:v1.0 - */ + * 税率表表单类型 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public enum SalarySystemTypeEnum implements BaseEnum { CUSTOM(0, "自定义表单", 83993), diff --git a/src/com/engine/salary/report/enums/TaxAgentPermissionConstant.java b/src/com/engine/salary/report/enums/TaxAgentPermissionConstant.java index 7699272b3..e997b63dc 100644 --- a/src/com/engine/salary/report/enums/TaxAgentPermissionConstant.java +++ b/src/com/engine/salary/report/enums/TaxAgentPermissionConstant.java @@ -1,9 +1,7 @@ package com.engine.salary.report.enums; /** - * @Description: 个税扣缴义务人分权 - * @Author: wangxiangzhong - * @Date: 2022/5/2 10:09 + * 个税扣缴义务人分权 */ public class TaxAgentPermissionConstant { diff --git a/src/com/engine/salary/report/enums/TaxAgentRoleTypeEnum.java b/src/com/engine/salary/report/enums/TaxAgentRoleTypeEnum.java index 8c08f5f99..db585ebc6 100644 --- a/src/com/engine/salary/report/enums/TaxAgentRoleTypeEnum.java +++ b/src/com/engine/salary/report/enums/TaxAgentRoleTypeEnum.java @@ -1,10 +1,13 @@ package com.engine.salary.report.enums; /** - * @Description: 个税扣缴义务人角色类型 - * @Author: wangxiangzhong - * @Date: 2022-04-22 14:37 - */ + * 个税扣缴义务人角色类型 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public enum TaxAgentRoleTypeEnum { CHIEF(0, "总管理员"), diff --git a/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java b/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java index 1e8a83e64..eb1619b08 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java @@ -9,11 +9,15 @@ import java.util.Collection; import java.util.List; import java.util.Map; + /** - * @Description: 薪酬统计维度 - * @Author: wangxiangzhong - * @Date: 2022/12/15 14:09 - */ + * 薪酬统计维度 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public interface SalaryStatisticsDimensionService { /** diff --git a/src/com/engine/salary/report/service/SalaryStatisticsItemService.java b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java index c50786ee6..a576a75c7 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsItemService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java @@ -7,10 +7,13 @@ import java.util.Collection; import java.util.List; /** - * @Description: 薪酬报表自定义统计项目 - * @Author: wangxiangzhong - * @Date: 2022/12/19 10:09 - */ + * 薪酬报表自定义统计项目 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public interface SalaryStatisticsItemService { /** diff --git a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java index 5e73b95e6..5b1e7a146 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java @@ -13,10 +13,13 @@ import java.util.List; import java.util.Map; /** - * @Description: 薪酬统计报表 - * @Author: wangxiangzhong - * @Date: 2022/12/15 14:09 - */ + * 薪酬报表自定义统计项目 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public interface SalaryStatisticsReportService { /** diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java index 63dd95d1d..10008f0b1 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java @@ -29,10 +29,13 @@ import java.util.*; import java.util.stream.Collectors; /** - * @Description: 薪酬统计维度 - * @Author: wangxiangzhong - * @Date: 2022/12/15 14:09 - */ + * 薪酬统计维度 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryStatisticsDimensionServiceImpl extends Service implements SalaryStatisticsDimensionService { private SalaryStatisticsDimensionMapper getSalaryStatisticsDimensionMapper() { diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java index fb4077258..711d62428 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java @@ -21,10 +21,13 @@ import java.util.*; import java.util.stream.Collectors; /** - * @Description: 薪酬报表自定义统计项目 - * @Author: wangxiangzhong - * @Date: 2022/12/19 10:10 - */ + * 薪酬报表自定义统计项目 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryStatisticsItemServiceImpl extends Service implements SalaryStatisticsItemService { diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 813b57ef7..302885e35 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -51,10 +51,13 @@ import java.util.*; import java.util.stream.Collectors; /** - * @Description: 薪酬统计报表 - * @Author: wangxiangzhong - * @Date: 2022/12/15 14:09 - */ + * 薪酬统计报表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryStatisticsReportServiceImpl extends Service implements SalaryStatisticsReportService { private static final Logger log = LoggerFactory.getLogger(SalaryStatisticsReportServiceImpl.class); diff --git a/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java b/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java index 446881b88..d3505a5ba 100644 --- a/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java @@ -3,12 +3,7 @@ package com.engine.salary.report.service.impl; import com.engine.core.impl.Service; import com.engine.salary.report.service.SubTableExportService; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/9 - * @Version: v1.0 - */ + public class SubTableExportServiceImpl extends Service implements SubTableExportService { // private Logger logger = LoggerFactory.getLogger(this.getClass()); diff --git a/src/com/engine/salary/report/util/ReportDataUtil.java b/src/com/engine/salary/report/util/ReportDataUtil.java index 55a9bb769..16c8f56f4 100644 --- a/src/com/engine/salary/report/util/ReportDataUtil.java +++ b/src/com/engine/salary/report/util/ReportDataUtil.java @@ -6,12 +6,6 @@ import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.regex.Pattern; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/9 - * @Version: v1.0 - */ public class ReportDataUtil { private static final DecimalFormat decimalFormat = new DecimalFormat("#,##0.00"); diff --git a/src/com/engine/salary/report/util/ReportTimeUtil.java b/src/com/engine/salary/report/util/ReportTimeUtil.java index 21351ee87..7a3229f77 100644 --- a/src/com/engine/salary/report/util/ReportTimeUtil.java +++ b/src/com/engine/salary/report/util/ReportTimeUtil.java @@ -12,12 +12,6 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; -/** - * @Description: - * @Author: zhangheng - * @CreateDate: 2022/11/8 - * @Version: v1.0 - */ @Slf4j public class ReportTimeUtil { private static final DateTimeFormatter YEAR_MONTH = DateTimeFormatter.ofPattern("yyyy-MM"); diff --git a/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java b/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java index df2d61b3e..e0f26bb8d 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsDimensionController.java @@ -22,10 +22,13 @@ import java.util.List; import java.util.Map; /** - * @Description: 薪酬统计维度 - * @Author: wangxiangzhong - * @Date: 2022/12/15 11:40 - */ + * 薪酬统计维度 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryStatisticsDimensionController { private SalaryStatisticsDimensionWrapper getSalaryStatisticsDimensionWrapper(User user) { diff --git a/src/com/engine/salary/report/web/SalaryStatisticsItemController.java b/src/com/engine/salary/report/web/SalaryStatisticsItemController.java index 81384cffe..0c8b1ee95 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsItemController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsItemController.java @@ -19,10 +19,13 @@ import java.util.List; import java.util.Map; /** - * @Description: 薪酬报表统计项目 - * @Author: wangxiangzhong - * @Date: 2022/12/15 11:40 - */ + * 薪酬报表统计项目 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryStatisticsItemController { private SalaryStatisticsItemWrapper getSalaryStatisticsItemWrapper(User user) { diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java index fe1ad13ec..38046076e 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java @@ -23,18 +23,19 @@ import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; -import org.springframework.stereotype.Component; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** - * @Description: 薪酬统计维度 - * @Author: wangxiangzhong - * @Date: 2022/12/15 13:46 - */ -@Component + * 薪酬统计维度 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryStatisticsDimensionWrapper extends Service { diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java index 10fb01cff..b424cc43e 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsItemWrapper.java @@ -17,18 +17,19 @@ import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** - * @Description: 薪酬报表统计项目 - * @Author: wangxiangzhong - * @Date: 2022/12/19 10:49 - */ -@Component + * 薪酬报表统计项目 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryStatisticsItemWrapper extends Service { private SalaryStatisticsItemService getSalaryStatisticsItemService(User user) { diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index bd1d032e5..de401e667 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -31,18 +31,19 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.springframework.stereotype.Component; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** - * @Description: 薪酬统计维度 - * @Author: wangxiangzhong - * @Date: 2022/12/15 13:46 - */ -@Component + * 薪酬统计维度 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryStatisticsReportWrapper extends Service { private static final String conditionId = "salaryStatisticsReportSearchCondition"; From 41e95ceadf6b15e4026ff29911b905c505859e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 5 May 2023 15:32:55 +0800 Subject: [PATCH 069/245] =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BAid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/datacollection/dto/AttendQuoteFieldListDTO.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/dto/AttendQuoteFieldListDTO.java b/src/com/engine/salary/entity/datacollection/dto/AttendQuoteFieldListDTO.java index 66b712eab..2dd6d04b1 100644 --- a/src/com/engine/salary/entity/datacollection/dto/AttendQuoteFieldListDTO.java +++ b/src/com/engine/salary/entity/datacollection/dto/AttendQuoteFieldListDTO.java @@ -30,8 +30,8 @@ import lombok.NoArgsConstructor; public class AttendQuoteFieldListDTO { //主键id @JsonSerialize(using = ToStringSerializer.class) - @SalaryTableColumn(column = "id", display = false) - @TableTitle(title = "id",dataIndex = "id",key = "id") +// @SalaryTableColumn(column = "id", display = false) +// @TableTitle(title = "id",dataIndex = "id",key = "id") private Long id; @SalaryTableColumn(text = "字段名称", width = "10%", column = "fieldName") From 7e940b4db40a133cd59b7c094794e7cd6983f84f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 5 May 2023 17:15:25 +0800 Subject: [PATCH 070/245] =?UTF-8?q?=E5=87=8F=E5=B0=91=E5=8D=95=E6=AC=A1?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E7=9A=84=E4=BA=BA=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/salarysob/bo/SalarySobCycleBO.java | 2 +- .../salary/service/impl/SalaryAcctResultServiceImpl.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/entity/salarysob/bo/SalarySobCycleBO.java b/src/com/engine/salary/entity/salarysob/bo/SalarySobCycleBO.java index 5269e0d90..0111dbece 100644 --- a/src/com/engine/salary/entity/salarysob/bo/SalarySobCycleBO.java +++ b/src/com/engine/salary/entity/salarysob/bo/SalarySobCycleBO.java @@ -60,7 +60,7 @@ public class SalarySobCycleBO { if (Objects.equals(cycleType, SalaryCycleTypeEnum.NEXT_MONTH.getValue())) { return salaryMonth.plus(Period.ofMonths(1)); } - return null; + return YearMonth.parse("2000-01"); } /** diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index cc8ff416f..8ea761ec2 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -182,7 +182,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) { return Collections.emptyList(); } - List> partition = Lists.partition((List) salaryAcctEmployeeIds, 2000); + List> partition = Lists.partition((List) salaryAcctEmployeeIds, 500); List salaryAcctResultPOS = new ArrayList<>(); partition.forEach(empIds -> { salaryAcctResultPOS.addAll(getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpIds(empIds).build())); @@ -197,7 +197,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salaryAcctRecordIds) || CollectionUtils.isEmpty(employeeIds)) { return Collections.emptyList(); } - List> partition = Lists.partition((List) employeeIds, 2000); + List> partition = Lists.partition((List) employeeIds, 500); List salaryAcctResultPOS = new ArrayList<>(); partition.forEach(empIds -> { salaryAcctResultPOS.addAll(getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).employeeIds(empIds).build())); From b905390623bcb63c291e4551ce85cfdfdf32597c Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Sat, 6 May 2023 09:50:48 +0800 Subject: [PATCH 071/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E5=88=9B=E5=BB=BA=E4=BA=BA=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/siaccount/InsuranceAccountDetailMapper.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index 6ec6e1bb1..4b8e67a38 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -160,10 +160,10 @@ AND t.payment_organization = #{param.paymentOrganization} - - AND - t.creator = #{param.creator} - + + + + From 8228fbf21cf210998ec18b3e7994a99dbe3e74d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 8 May 2023 09:27:20 +0800 Subject: [PATCH 072/245] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/SalaryArchiveConstant.java | 21 + .../entity/salaryBill/bo/SalaryBillBO.java | 550 +++++++++++ .../salaryBill/bo/SalaryTemplateBO.java | 20 + .../salaryBill/dto/SalaryBillSendDTO.java | 79 ++ .../salaryBill/dto/SalarySendInfoListDTO.java | 8 + .../salaryBill/po/SalarySendInfoPO.java | 12 +- .../salaryacct/SalaryAcctRecordMapper.xml | 1 + .../salarybill/SalarySendInfoMapper.xml | 3 + .../SalaryStatisticsReportServiceImpl.java | 8 +- .../impl/SubTableExportServiceImpl.java | 2 +- .../salary/service/SalaryBillService.java | 53 + .../salary/service/SalarySendService.java | 11 + .../impl/AttendQuoteFieldServiceImpl.java | 4 +- .../AttendQuoteFieldSettingServiceImpl.java | 2 +- .../impl/SalaryArchiveExcelServiceImpl.java | 4 +- .../service/impl/SalaryBillServiceImpl.java | 927 ++++++++++++++++++ .../service/impl/SalaryItemServiceImpl.java | 2 +- .../service/impl/SalarySendServiceImpl.java | 293 ++++-- .../SalarySobDefaultEmpFieldServiceImpl.java | 2 +- .../impl/SysSalaryItemServiceImpl.java | 2 +- .../wrapper/SalaryArchiveTaxAgentWrapper.java | 2 +- .../salary/wrapper/SalaryTemplateWrapper.java | 2 +- 22 files changed, 1884 insertions(+), 124 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java create mode 100644 src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java create mode 100644 src/com/engine/salary/service/SalaryBillService.java create mode 100644 src/com/engine/salary/service/impl/SalaryBillServiceImpl.java diff --git a/src/com/engine/salary/constant/SalaryArchiveConstant.java b/src/com/engine/salary/constant/SalaryArchiveConstant.java index d8efc64e7..f114d1f05 100644 --- a/src/com/engine/salary/constant/SalaryArchiveConstant.java +++ b/src/com/engine/salary/constant/SalaryArchiveConstant.java @@ -12,4 +12,25 @@ public class SalaryArchiveConstant { * 包含负数、正数、小数、0、0.00000等 */ public static final String NUMBER_REGEX = "(-?[1-9]\\d*\\.?\\d+)|(-?0\\.\\d*[0-9])|(\\d+)"; + + + /** + * 列表中薪资项目动态列后缀标识 + */ + public static final String DYNAMIC_SUFFIX = "_salaryItem"; + + /** + * 调整前 + */ + public static final String ADJUST_BEFORE = "_adjustBefore"; + + /** + * 调整后 + */ + public static final String ADJUST_AFTER = "_adjustAfter"; + + /** + * 调整后 + */ + public static final String ZERO_IGNORE_REGEX = "\\.00"; } diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java new file mode 100644 index 000000000..690c7fcde --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -0,0 +1,550 @@ +package com.engine.salary.entity.salaryBill.bo; + +import com.engine.salary.annotation.SalaryFormulaVar; +import com.engine.salary.constant.SalaryArchiveConstant; +import com.engine.salary.constant.SalaryTemplateSalaryItemSetGroupConstant; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemListDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO; +import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; +import com.engine.salary.enums.salarybill.SalaryTemplateTextContentPositionEnum; +import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import weaver.common.MessageUtil; + +import java.lang.reflect.Field; +import java.time.LocalDateTime; +import java.util.*; + + +public class SalaryBillBO { + private static final Logger log = LoggerFactory.getLogger(SalaryBillBO.class); + + @Override + public String toString() { + return "SalaryBillBO{}"; + } +// +// /** +// * 根据模板内容转为工资单模板对象 +// * 注意:不要通过反序列化,可能会因为历史原因修改字段名称而无法序列化 +// * +// * @param salaryTemplateContent +// * @return +// */ +// public static SalaryTemplatePO buildSalaryTemplateContent(String salaryTemplateContent) { +// Map map = JsonUtil.parseMap(salaryTemplateContent, Object.class); +// return SalaryTemplatePO.builder() +// .id(Long.valueOf(map.getOrDefault("id", "0").toString())) +// .name(map.getOrDefault("name", "").toString()) +// .salarySobId(Long.valueOf(map.getOrDefault("salarySobId", "0").toString())) +// .useType(Integer.valueOf(map.getOrDefault("useType", "0").toString())) +// .description(map.getOrDefault("description", "").toString()) +// .emailStatus(Integer.valueOf(map.getOrDefault("emailStatus", "0").toString())) +// .sendEmailId(Long.valueOf(map.getOrDefault("sendEmailId", "0").toString())) +//// .msgStatus(Integer.valueOf(map.getOrDefault("msgStatus","0").toString())) +//// .imStatus(Integer.valueOf(map.getOrDefault("imStatus","0").toString())) +//// .cloudBridgeStatus(Integer.valueOf(map.getOrDefault("cloudBridgeStatus","0").toString())) +// .theme(map.getOrDefault("theme", "").toString()) +// .background(map.getOrDefault("background", "").toString()) +// .textContent(map.getOrDefault("textContent", "").toString()) +// .textContentPosition(Integer.valueOf(map.getOrDefault("textContentPosition", "0").toString())) +// .salaryItemNullStatus(Integer.valueOf(map.getOrDefault("salaryItemNullStatus", "0").toString())) +// .salaryItemZeroStatus(Integer.valueOf(map.getOrDefault("salaryItemZeroStatus", "0").toString())) +// .salaryItemSetting(map.getOrDefault("salaryItemSetting", "").toString()) +// .replenishName(map.getOrDefault("replenishName", "").toString()) +//// .replTheme(map.getOrDefault("replTheme","").toString()) +//// .replBackground(map.getOrDefault("replBackground","").toString()) +//// .replTextContent(map.getOrDefault("replTextContent","").toString()) +//// .replTextContentPosition(Integer.valueOf(map.getOrDefault("replTextContentPosition","0").toString())) +//// .replSalaryItemNullStatus(Integer.valueOf(map.getOrDefault("replSalaryItemNullStatus","0").toString())) +//// .replSalaryItemZeroStatus(Integer.valueOf(map.getOrDefault("replSalaryItemZeroStatus","0").toString())) +//// .replenishSalaryItemSetting(map.getOrDefault("replenishSalaryItemSetting","").toString()) +// .build(); +// } + + /** + * 构建人员字段 + * 与SalaryAcctResultBO.buildEmployeeFieldName()的key value对调了一下 + * + * @return + */ + public static Map buildEmployeeFieldName() { + Field[] declaredFields = SalaryFormulaEmployeeDTO.class.getDeclaredFields(); + Map employeeFieldNameMap = Maps.newHashMapWithExpectedSize(declaredFields.length); + for (Field declaredField : declaredFields) { + if (!declaredField.isAnnotationPresent(SalaryFormulaVar.class)) { + continue; + } + SalaryFormulaVar annotation = declaredField.getAnnotation(SalaryFormulaVar.class); + employeeFieldNameMap.put(SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel()), declaredField.getName()); + } + return employeeFieldNameMap; + } + +// /** +// * 构建工资单中的人员信息 +// * +// * @param employeeInformation +// * @param simpleEmployee +// * @param employeeField +// */ +// public static void buildEmployeeInfo(SalaryTemplateSalaryItemSetListDTO employeeInformation, SimpleEmployee simpleEmployee, Map employeeField) { +// if (employeeInformation == null || simpleEmployee == null) { +// return; +// } +// if (org.apache.commons.collections.CollectionUtils.isNotEmpty(employeeInformation.getItems())) { +// //获取员工信息的字段名和中文描述的map关系 +// SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId()) +// .departmentName(simpleEmployee.getDepartment() == null ? "" : simpleEmployee.getDepartment().getName()) +// .email(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()) +// .gradeName(simpleEmployee.getGrade() == null ? "" : simpleEmployee.getGrade().getName()) +// .hireDate(SalaryDateUtil.getFormatLocalDate(simpleEmployee.getHiredate())) +// .sex(simpleEmployee.getSex() == null ? "" : simpleEmployee.getSex().getDescription()) +// .mobile(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()) +// .positionName(simpleEmployee.getPosition() == null ? "" : simpleEmployee.getPosition().getName()) +// .status(StringUtils.isEmpty(simpleEmployee.getPersonnelStatus()) ? "" : simpleEmployee.getPersonnelStatus()) +// .telephone(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()) +// .username(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()) +// .jobNum(simpleEmployee.getJobNum() == null ? "" : simpleEmployee.getJobNum()) +// .build(); +// List items = employeeInformation.getItems(); +// // 1.SalaryAcctResultBO.buildEmployeeFieldName()的取法 +//// Set> entries = employeeField.entrySet(); +//// for (SalaryTemplateSalaryItemListDTO e : items) { +//// Optional> entry = entries.stream().filter(f -> Objects.equals(e.getName(), f.getValue())).findFirst(); +//// if (entry.isPresent()) { +//// String key = entry.get().getKey(); +//// if (org.apache.commons.lang3.StringUtils.isNotBlank(key)) { +//// String getter = "get" + key.substring(0, 1).toUpperCase() + key.substring(1); +//// try { +//// Method method = salaryFormulaEmployeeDTO.getClass().getMethod(getter); +//// Object invoke = method.invoke(salaryFormulaEmployeeDTO); +//// e.setSalaryItemValue((String) invoke); +//// } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { +//// log.error("no such method", e); +//// } +//// } +//// } +//// } +// // 2.SalaryBillBO.buildEmployeeFieldName() +// for (SalaryTemplateSalaryItemListDTO e : items) { +// String employeeFieldName = employeeField.get(e.getName()); +// if (!StringUtils.isEmpty(employeeFieldName)) { +// String getter = "get" + employeeFieldName.substring(0, 1).toUpperCase() + employeeFieldName.substring(1); +// try { +// Method method = salaryFormulaEmployeeDTO.getClass().getMethod(getter); +// Object invoke = method.invoke(salaryFormulaEmployeeDTO); +// e.setSalaryItemValue((String) invoke); +// } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { +// log.error("no such method", e); +// } +// } +// } +// } +// } + + /** + * 获取工资单标题 + * + * @param theme + * @param salaryMonth + * @param tenantName + * @return + */ + public static String getBillTitle(String theme, Date salaryMonth, String tenantName) { + String yearI18n = SalaryI18nUtil.getI18nLabel(100325, "年"); + String monthI18n = SalaryI18nUtil.getI18nLabel(100326, "月"); + return theme + .replace("${companyName}", tenantName) + .replace("${salaryMonth}", salaryMonth.getYear() + yearI18n + salaryMonth.getMonth() + monthI18n); + } + +// /** +// * 构建发送消息 +// * +// * @param e +// * @param allEmployeeMap +// * @param salaryBillSendParam +// * @param currentEmployeeId +// * @param currentTenantKey +// * @return +// */ +// public static SendMessageEntity buildSendMessage(Map e, Map allEmployeeMap, SalaryBillSendDTO salaryBillSendParam, Long currentEmployeeId, String currentTenantKey) { +// // 构建用户基本信息 +// SalaryBillBO.buildEmployeeInfo(salaryBillSendParam.getEmployeeInformation(), allEmployeeMap.get(e.get("employeeId").toString()), salaryBillSendParam.getEmployeeField()); +// // 消息接收者 +// List receivers = Collections.singletonList(SalaryBillBO.buildUser(Long.valueOf(e.get("employeeId").toString()), Optional.ofNullable(e.get("email")).orElse("").toString(), currentTenantKey)); +// Entity entity = SalaryBillBO.buildEntity(e.get("id").toString(), currentEmployeeId, salaryBillSendParam.getEntityName()); +// EmailEntity emailInfo = new EmailEntity(); +// // 邮箱打开 +// if (salaryBillSendParam.isEnableEmail()) { +// String emailContent = SalaryBillBO.buildEmailContent(e, salaryBillSendParam); +// emailInfo = SalaryBillBO.buildEmailInfo(salaryBillSendParam.getText(), emailContent, salaryBillSendParam.getSalaryTemplate().getSendEmailId()); +// } +// return SalaryBillBO.buildSendMessageEntity(salaryBillSendParam, receivers, entity, emailInfo); +// } + + + public static void sendEmail(Map e, Map allEmployeeMap, SalaryBillSendDTO salaryBillSendParam) { + // 消息接收者 + String receivers = Optional.ofNullable(e.get("email")).orElse("").toString(); + String emailContent = SalaryBillBO.buildEmailContent(e, salaryBillSendParam); + MessageUtil.sendEmail(receivers,salaryBillSendParam.getText(),emailContent); + } + +// /** +// * 构建发送消息 +// * +// * @return +// */ +// public static SendMessageEntity buildSendMessageEntity(SalaryBillSendDTO salaryBillSendParam, List receivers, Entity entity, EmailEntity emailInfo) { +// SendMessageEntity smg = new SendMessageEntity(); +// // 模块 +// smg.setModule(MessageModule.HRSA); +// // 事件 +// smg.setEvent(MessageEvent.PAYROLL); +// +// // 发送者 +// smg.setSender(salaryBillSendParam.getSendUser() == null ? UserEntity.SYSTEM_USER : salaryBillSendParam.getSendUser()); +// // 接收者 +// smg.setReceivers(receivers); +// // 发送通道 +// smg.setChannels(salaryBillSendParam.getSendChannels()); +// +// // 消息内容 +// smg.setText(salaryBillSendParam.getTitle()); +// +// // 1.im +// smg.setEntity(entity); +// // 2.云桥 +// smg.setPcUrl(entity.getPcUrl()); +// smg.setAppUrl(entity.getH5Url()); +// smg.setTitle(salaryBillSendParam.getTitle()); +// smg.setContent(salaryBillSendParam.getTitle()); +// smg.setPicUrl(salaryBillSendParam.getPicUrl()); +// // 3.邮件 +// smg.setEmailInfo(emailInfo); +// +// return smg; +// } +// +// /** +// * 构建用户 +// * +// * @return +// */ +// public static UserEntity buildUser(Long employeeId, String email, String tenantKey) { +// UserEntity user = new UserEntity(employeeId, tenantKey); +// if (!StringUtils.isEmpty(email)) { +// user.setEmail(email); +// } +// return user; +// } +// +// /** +// * 构建发送通道 +// * +// * @param salaryTemplate +// * @return +// */ +// public static Set buildSendChannels(SalaryTemplatePO salaryTemplate) { +// Set channels = new HashSet<>(); +// if (salaryTemplate.getEmailStatus() != null && salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue())) { +// channels.add(MessageChannelEnum.EMAIL); +// } +// if (salaryTemplate.getImStatus() != null && salaryTemplate.getImStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue())) { +// channels.add(MessageChannelEnum.IM); +// } +// if (salaryTemplate.getCloudBridgeStatus() != null && salaryTemplate.getCloudBridgeStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue())) { +// channels.add(MessageChannelEnum.CLOUD_BRIDGE); +// } +// return channels; +// } +// +// /** +// * 构建实体 +// * +// * @param id +// * @param currentEmployeeId +// * @param name +// * @return +// */ +// public static Entity buildEntity(String id, Long currentEmployeeId, String name) { +// Entity e = new Entity(); +// e.setId(String.valueOf(IdGenerator.generate())); +// e.setModule(EntityType.hrmsalary.name()); +// e.setName(name); +// e.setH5Url("/mobile/salary/mySalaryBill/view/" + id); +//// e.setH5LinkeType(1); +// e.setPcUrl("/sp/salary/mySalaryBill/view/" + id); +//// e.setPcLinkeType(0); +// +// // im添加创建人创建时间、可在对应通道的模板中的内容或辅助信息标题等加上变量${creator}$和${createTime}$ +// e.setCreatorId(currentEmployeeId); +// e.setCreateTime(new Date()); +// return e; +// } +// +// /** +// * 构建邮件信息 +// * +// * @param emailSubject 邮件主题 +// * @param emailContent 邮件内容 +// * @param mailUserAccountId 邮箱账号id +// * @return +// */ +// public static EmailEntity buildEmailInfo(String emailSubject, String emailContent, Long mailUserAccountId) { +// EmailEntity entity = new EmailEntity(); +// entity.setEmailContent(emailContent); +// entity.setEmailSubject(emailSubject); +// // 发送者邮箱 +// entity.setMailUserAccountId(mailUserAccountId); +// return entity; +// } +// +// /** +// * 构建撤回消息 +// * +// * @param msgId +// * @param text +// * @param title +// * @param currentEmployeeId +// * @param currentTenantKey +// * @return +// */ +// public static CancleMessageEntity buildCancleMessageEntity(long msgId, String text, String title, Long currentEmployeeId, String currentTenantKey) { +// CancleMessageEntity cme = new CancleMessageEntity(); +// cme.setMsgId(msgId); +// // 模块 +// cme.setModule(MessageModule.HRSA); +// // 事件 +// cme.setEvent(MessageEvent.PAYROLL); +// +// cme.setText(text); +// +// Entity entity = new Entity(); +// entity.setId(String.valueOf(IdGenerator.generate())); +// entity.setModule(EntityType.hrmsalary.name()); +// entity.setName(title); +// cme.setEntity(entity); +// UserEntity user = new UserEntity(currentEmployeeId, currentTenantKey); +// cme.setOperator(user); +// return cme; +// } + + /** + * 构建邮件内容 + * 注意:样式只能在标签style属性中使用,否则样式不生效 + * + * @param e + * @param salaryBillSendParam + * @return + */ + public static String buildEmailContent(Map e, SalaryBillSendDTO salaryBillSendParam) { + StringBuilder emailContent = new StringBuilder(); + emailContent.append("
"); + // 1.标题 + emailContent.append("
"); + emailContent.append(salaryBillSendParam.getTitle()); + emailContent.append("
"); + // 2.发送时间 + emailContent.append("
"); + emailContent.append(SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now())); + emailContent.append("
"); + // 3.背景图-base64 +// if (!StringUtils.isEmpty(salaryBillSendParam.getBackgroundBase64())) { +// emailContent.append("
"); +// } + // 3.背景图-url + if (StringUtils.isNotEmpty(salaryBillSendParam.getSalaryTemplate().getBackground())) { + emailContent.append("
"); + } + + // 是否只有一个分组,如果是,则将文本内容放进薪资项目表格前后 + boolean isOnlyOneGroup = salaryBillSendParam.getSalaryItemSetList().stream().filter(st -> CollectionUtils.isNotEmpty(st.getItems())).count() == 1; + if (isOnlyOneGroup) { + buildOnlyOneGroupMailMain(emailContent, e, salaryBillSendParam); + } else { + buildMailMain(emailContent, e, salaryBillSendParam); + } + + emailContent.append("
"); + return emailContent.toString(); + } + + /** + * 构建邮件内容主体 + * + * @param emailContent + * @param e + * @param salaryBillSendParam + */ + private static void buildMailMain(StringBuilder emailContent, Map e, SalaryBillSendDTO salaryBillSendParam) { + // 薪资项是否显示 + boolean isHideNull = salaryBillSendParam.getSalaryTemplate().getSalaryItemNullStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()); + boolean isHideZero = salaryBillSendParam.getSalaryTemplate().getSalaryItemZeroStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()); + // 3.文本内容-如果在薪资项目前 + emailContent.append("
"); + emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContent()); + emailContent.append("
"); + // 4.薪资项目内容 + emailContent.append("
"); + for (SalaryTemplateSalaryItemSetListDTO salaryItemSet : salaryBillSendParam.getSalaryItemSetList()) { + if (CollectionUtils.isEmpty(salaryItemSet.getItems())) { + continue; + } + emailContent.append("
"); + if (!salaryItemSet.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.NO_TYPE_GROUP_ID)) { + emailContent.append("
"); + // 4.1.薪资项目组名 + emailContent.append(salaryItemSet.getGroupName()); + emailContent.append("
"); + } + emailContent.append("
"); + for (int i = 0; i < salaryItemSet.getItems().size(); i++) { + SalaryTemplateSalaryItemListDTO salaryItem = salaryItemSet.getItems().get(i); + // 员工基本信息 + if (salaryItemSet.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID) && salaryBillSendParam.getEmployeeInformation() != null) { + Optional optionalEmpItem = salaryBillSendParam.getEmployeeInformation().getItems().stream().filter(f -> f.getId().equals(salaryItem.getId())).findFirst(); + // 4.2.员工信息 + emailContent.append("
"); + emailContent.append("
"); + emailContent.append(""); + emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getName() : "")); + emailContent.append(""); + emailContent.append("
"); + emailContent.append("
"); + emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getSalaryItemValue() : "")); + emailContent.append("
"); + emailContent.append("
"); + } else { + for (Object keyName : e.keySet()) { + if ((salaryItem.getId() + SalaryArchiveConstant.DYNAMIC_SUFFIX).equals(keyName.toString())) { + boolean isHide = (isHideNull && e.get(keyName.toString()) != null) || (isHideZero && "0.00".equals(e.get(keyName.toString()))); + // 4.2.薪资项目 + emailContent.append("
"); + emailContent.append("
"); + emailContent.append(""); + emailContent.append(salaryItem.getName()); + emailContent.append(""); + emailContent.append("
"); + emailContent.append("
"); + emailContent.append(e.get(keyName.toString())); + emailContent.append("
"); + emailContent.append("
"); + break; + } + } + } + } + emailContent.append("
"); + emailContent.append("
"); + } + emailContent.append("
"); + // 5.文本内容-如果在薪资项目后 + emailContent.append("
"); + emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContent()); + emailContent.append("
"); + } + + /** + * 构建邮件内容主体 + *

+ * 只有无分类,则将文本内容放进薪资项目表格前后 + * + * @param emailContent + * @param e + * @param salaryBillSendParam + */ + private static void buildOnlyOneGroupMailMain(StringBuilder emailContent, Map e, SalaryBillSendDTO salaryBillSendParam) { + // 薪资项是否显示 + boolean isHideNull = salaryBillSendParam.getSalaryTemplate().getSalaryItemNullStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()); + boolean isHideZero = salaryBillSendParam.getSalaryTemplate().getSalaryItemZeroStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()); + // 4.薪资项目内容 + emailContent.append("

"); + for (SalaryTemplateSalaryItemSetListDTO salaryItemSet : salaryBillSendParam.getSalaryItemSetList()) { + if (CollectionUtils.isEmpty(salaryItemSet.getItems())) { + continue; + } + emailContent.append("
"); + emailContent.append("
"); + + // 3.文本内容-如果在薪资项目前 + emailContent.append("
"); + emailContent.append("
"); + emailContent.append(""); + emailContent.append(salaryBillSendParam.getRemarkI18n()); + emailContent.append(""); + emailContent.append("
"); + emailContent.append("
"); + emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContent()); + emailContent.append("
"); + emailContent.append("
"); + + for (int i = 0; i < salaryItemSet.getItems().size(); i++) { + SalaryTemplateSalaryItemListDTO salaryItem = salaryItemSet.getItems().get(i); + for (Object keyName : e.keySet()) { + if ((salaryItem.getId() + SalaryArchiveConstant.DYNAMIC_SUFFIX).equals(keyName.toString())) { + boolean isHide = (isHideNull && e.get(keyName.toString()) != null) || (isHideZero && "0.00".equals(e.get(keyName.toString()))); + // 4.2.薪资项目 + emailContent.append("
"); + emailContent.append("
"); + emailContent.append(""); + emailContent.append(salaryItem.getName()); + emailContent.append(""); + emailContent.append("
"); + emailContent.append("
"); + emailContent.append(e.get(keyName.toString())); + emailContent.append("
"); + emailContent.append("
"); + break; + } + } + } + // 5.文本内容-如果在薪资项目后 + emailContent.append("
"); + emailContent.append("
"); + emailContent.append(""); + emailContent.append(salaryBillSendParam.getRemarkI18n()); + emailContent.append(""); + emailContent.append("
"); + + emailContent.append("
"); + emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContent()); + emailContent.append("
"); + emailContent.append("
"); + + emailContent.append("
"); + emailContent.append("
"); + } + emailContent.append("
"); + } +} diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java index 99a997fa4..a7767953a 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java @@ -10,10 +10,13 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryI18nUtil; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import java.util.Date; import java.util.LinkedList; import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; /** * @Description: 工资单 @@ -25,6 +28,23 @@ public class SalaryTemplateBO { return "SalaryTemplateBO{}"; } + + /** + * 获取人员信息项目分类 + * + * @param salaryItemSetting + * @return + */ + public static SalaryTemplateSalaryItemSetListDTO getEmployeeInformation(List salaryItemSetting) { + Optional optionalEmployeeInformation = salaryItemSetting.stream().filter(e -> SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).findFirst(); + SalaryTemplateSalaryItemSetListDTO employeeInformation = optionalEmployeeInformation.orElse(null); + // 排除名称为空的 + if (employeeInformation != null && org.apache.commons.collections.CollectionUtils.isNotEmpty(employeeInformation.getItems())) { + employeeInformation.setItems(employeeInformation.getItems().stream().filter(e -> StringUtils.isNotEmpty(e.getName())).collect(Collectors.toList())); + } + return employeeInformation; + } + /** * 保存参数转表数据 * @param saveParam diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java new file mode 100644 index 000000000..39403fb18 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java @@ -0,0 +1,79 @@ +package com.engine.salary.entity.salaryBill.dto; + +import com.engine.salary.entity.salaryBill.po.SalarySendPO; +import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import weaver.hrm.User; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @Description: 工资单发放信息 + * @Author: wangxiangzhong + * @Date: 2021/12/14 14:02 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("工资单发放信息") +public class SalaryBillSendDTO { + + @ApiModelProperty("消息标题") + private String title; + + @ApiModelProperty("消息内容") + private String text; + + @ApiModelProperty("工资单预览实体名") + private String entityName; + + @ApiModelProperty("发送通道") + private Set sendChannels; + + @ApiModelProperty("发送者") + private User sendUser; + + @ApiModelProperty("工资单模板") + private SalaryTemplatePO salaryTemplate; + + @ApiModelProperty("工资单背景图base64编码") + private String backgroundBase64; + + @ApiModelProperty("云桥工资单消息图") + private String picUrl; + + @ApiModelProperty("租户名") + private String tenantName; + + @ApiModelProperty("工资单模板-薪资项目设置") + private List salaryItemSetList; + + @ApiModelProperty("工资单模板-员工基本信息") + private SalaryTemplateSalaryItemSetListDTO employeeInformation; + + @ApiModelProperty("工资单模板-对应人员字段") + private Map employeeField; + + @ApiModelProperty("工资单模板-发放说明标签国际化") + private String remarkI18n; + + @ApiModelProperty("邮件是否可以发送邮件") + private boolean isEnableEmail; + + @ApiModelProperty("工资单发放") + private SalarySendPO salarySend; + + @ApiModelProperty("收入所得项目类型") + private List incomeCategorys; + + @ApiModelProperty("薪资项目收入所得类型") + private Map salaryItemIncomeCategoryMap; +} diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalarySendInfoListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalarySendInfoListDTO.java index eb82e629f..6f976855a 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalarySendInfoListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalarySendInfoListDTO.java @@ -30,6 +30,7 @@ public class SalarySendInfoListDTO { @TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgent", key = "taxAgent") private String taxAgent; + private Long taxAgentId; @TableTitle(title = "部门", dataIndex = "department", key = "department") @@ -47,5 +48,12 @@ public class SalarySendInfoListDTO { @TableTitle(title = "发送状态", dataIndex = "sendStatus", key = "sendStatus") private String sendStatus; + private String email; + private Long salaryAcctRecordId; + /** + * 核算类型。0:正常,1:补发 + */ + private Integer salaryAcctType; + } diff --git a/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java b/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java index 6dd5241b1..5efa58c05 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java @@ -8,25 +8,23 @@ import lombok.NoArgsConstructor; import java.util.Date; /** - * @Description: 工资单发放信息 - * @Author: wangxiangzhong - * @Date: 2021-12-11 11:29 + * 工资单发放信息 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor -////hrsa_salary_send_info") -//工资单发放信息表") +//hrsa_salary_send_info public class SalarySendInfoPO { - public Object get; /** * 主键id */ private Long id; -// 工资单发放id + /** + * 工资单发放id + */ private Long salarySendId; /** diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml index 404920353..4266b9277 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml @@ -14,6 +14,7 @@ + diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml index 6fbbfd5b8..759b5e541 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml @@ -148,6 +148,9 @@ t1.id, + t1.salary_acct_record_id as salaryAcctRecordId, + t1.salary_acct_type as salaryAcctType, + t1.tax_agent_id as taxAgentId, e.lastname as username, t2.name AS tax_agent, d.departmentname AS department, diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 302885e35..630e6e97b 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -93,13 +93,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } // private ExtEmployeeService extEmployeeService; -// @Autowired +// // private HrmCommonEmployeeService hrmCommonEmployeeService; -// @RpcReference +// // private HrmJobCallRemoteService hrmJobCallRemoteService; -// @RpcReference +// // private RemoteUserInfoService remoteUserInfoService; -// @Autowired +// // private HrmCommonHrmStatusService hrmCommonHrmStatusService; // (name = "salaryStatReportLoggerTemplate") // private LoggerTemplate salaryStatReportLoggerTemplate; diff --git a/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java b/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java index d3505a5ba..18d601975 100644 --- a/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SubTableExportServiceImpl.java @@ -8,7 +8,7 @@ public class SubTableExportServiceImpl extends Service implements SubTableExport // private Logger logger = LoggerFactory.getLogger(this.getClass()); // -// @Autowired +// // private SalaryBatchService salaryBatchService; // // @Override diff --git a/src/com/engine/salary/service/SalaryBillService.java b/src/com/engine/salary/service/SalaryBillService.java new file mode 100644 index 000000000..29e4cb4d8 --- /dev/null +++ b/src/com/engine/salary/service/SalaryBillService.java @@ -0,0 +1,53 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; + +import java.util.List; + +/** + * @Description: 工资单 + * @Author: wangxiangzhong + * @Date: 2021-12-11 11:28 + */ +public interface SalaryBillService { + + /** + * 工资单发放 + * + * @param queryParam + * @param isRange + * @param rangeIds + */ + void grant(SalarySendGrantParam queryParam, boolean isRange, List rangeIds); + + /** + * 工资单撤回 + * + * @param queryParam + * @param isRange + * @param rangeIds + * @param currentEmployeeId + * @param currentTenantKey + */ +// void withdraw(SalarySendWithdrawParam queryParam, boolean isRange, List rangeIds); + + /** + * 我的工资单 + * + * @param salaryInfoId + * @param currentEmployeeId + * @param currentTenantKey + * @return + */ +// Map mySalaryBill(Long salaryInfoId); + + /** + * 我的工资单列表详情 + * + * @param page + * @param queryParam + * @param tenantKey + * @return + */ +// Page mySalaryBillListPage(Page page, SalaryBillQueryParam queryParam, String tenantKey); +} diff --git a/src/com/engine/salary/service/SalarySendService.java b/src/com/engine/salary/service/SalarySendService.java index 1a590970f..9ffc53f59 100644 --- a/src/com/engine/salary/service/SalarySendService.java +++ b/src/com/engine/salary/service/SalarySendService.java @@ -4,7 +4,9 @@ import com.engine.salary.entity.salaryBill.dto.*; import com.engine.salary.entity.salaryBill.param.*; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -120,6 +122,15 @@ public interface SalarySendService { */ List> buildDetailList(List salaryItems, List records, Long salaryAccountingId); + /** + * 构建详情列表 + * + * @param records + * @param salaryAcctResultValues + * @return + */ + List> buildDetailList(List records,List salaryAcctEmployees, List salaryAcctResultValues); + /** * 导出-工资单发放详情列表 * diff --git a/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java index b576564ca..c48b1c7e5 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java @@ -52,9 +52,9 @@ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteF } -// @RpcReference +// // private RemoteAttendInitVacationService remoteAttendInitVacationService; -// @Autowired +// // private LoggerTemplate attendQuoteFieldLoggerTemplate; diff --git a/src/com/engine/salary/service/impl/AttendQuoteFieldSettingServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteFieldSettingServiceImpl.java index 7ed945ff0..dd8eef639 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteFieldSettingServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteFieldSettingServiceImpl.java @@ -49,7 +49,7 @@ public class AttendQuoteFieldSettingServiceImpl extends Service implements Atten // private AttendQuoteFieldSettingMapper mapper; // // private AttendQuoteFieldMapper attendQuoteFieldMapper; -// @Autowired +// // private LoggerTemplate attendQuoteFieldSettingLoggerTemplate; private AttendQuoteFieldService getAttendQuoteFieldService(User user) { return (AttendQuoteFieldService) ServiceUtil.getService(AttendQuoteFieldServiceImpl.class, user); diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 5c3b72f25..ac5445b5c 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -96,9 +96,9 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // private SalaryArchiveSobService salaryArchiveSobService; // // private SalaryEmployeeService salaryEmployeeService; -// @Autowired +// // private HrmCommonHrmStatusService hrmCommonHrmStatusService; -// @Autowired +// // private BaseEnvInfoService baseEnvInfoService; // @Override diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java new file mode 100644 index 000000000..b4e1f8fd4 --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -0,0 +1,927 @@ +package com.engine.salary.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.api.formmode.mybatis.util.SqlProxyHandle; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; +import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO; +import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO; +import com.engine.salary.entity.salaryBill.dto.SalarySendInfoListDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO; +import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; +import com.engine.salary.entity.salaryBill.param.SalarySendInfoQueryParam; +import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; +import com.engine.salary.entity.salaryBill.po.SalarySendPO; +import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.enums.salarybill.SalarySendStatusEnum; +import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.salarybill.SalarySendInfoMapper; +import com.engine.salary.mapper.salarybill.SalarySendMapper; +import com.engine.salary.service.*; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.google.common.collect.Lists; +import com.weaver.util.threadPool.ThreadPoolUtil; +import com.weaver.util.threadPool.constant.ModulePoolEnum; +import com.weaver.util.threadPool.entity.LocalRunnable; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import weaver.common.MessageUtil; +import weaver.hrm.User; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * @Description: 工资单发放 + * @Author: wangxiangzhong + * @Date: 2021-12-11 11:28 + */ +@Slf4j +public class SalaryBillServiceImpl extends Service implements SalaryBillService { + + + private SalarySendMapper getSalarySendMapper() { + return SqlProxyHandle.getProxy(SalarySendMapper.class); + } + + private SalarySendInfoMapper getSalarySendInfoMapper() { + return SqlProxyHandle.getProxy(SalarySendInfoMapper.class); + } + + + private SalaryTemplateService getSalaryTemplateService(User user) { + return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user); + } + + private SalarySendService getSalarySendService(User user) { + return ServiceUtil.getService(SalarySendServiceImpl.class, user); + } + + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private SalarySendRangeService getSalarySendRangeService(User user) { + return ServiceUtil.getService(SalarySendRangeServiceImpl.class, user); + } + + private SalaryAcctRecordService getSalaryAcctRecordService(User user) { + return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + + private SalaryEmployeeService salaryEmployeeService; + + private SalarySobItemService salarySobItemService; + + +// private SalaryBillProgressService salaryBillProgressService; + + /** + * 工资单发放 start + **********************************************************************/ + @Override + public void grant(SalarySendGrantParam param, boolean isRange, List rangeIds) { + // 1.检查和获取工资单发放 + SalarySendPO salarySend = checkAndGetSalarySend(param.getSalarySendId()); +// // 已经冻结不能操作 +// if (salarySend.getSendStatus().equals(NumberUtils.INTEGER_ONE)) { +// return; +// } + // 获取默认模板 + SalarySobPO salarySob = getSalarySobService(user).getById(salarySend.getSalarySobId()); + List salaryTemplates = salarySob == null ? Lists.newArrayList() : getSalaryTemplateService(user).getDefaultTemplates(Arrays.asList(salarySend.getSalarySobId(), salarySob.getId())); + if (CollectionUtils.isEmpty(salaryTemplates)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100518, "没有默认模板,无法发送")); + } + SalaryTemplatePO salaryTemplate = salaryTemplates.get(0); + // 发送通道 +// Set sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate); +// if (CollectionUtils.isEmpty(sendChannels)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(149767, "工资单模板至少开启一个发送通道")); +// } +// boolean isReplenish = NumberUtils.INTEGER_ONE.equals(salarySend.getSalaryAcctType()); +// if (isReplenish && StringUtils.isEmpty(salaryTemplate.getReplTheme())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(204428, "请完善补发工资单模板设置")); +// } + // 2.检查是否正在发送中 +// SalaryBillProgressDTO salaryBillProgress = salaryBillProgressService.getProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + param.getSalarySendId()); +// if (Objects.nonNull(salaryBillProgress) && salaryBillProgress.isStatus() +// && Optional.ofNullable(salaryBillProgress.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(136104, "有其他人员正在发送中,请等待其他人员发送结束后再操作")); +// } + // 初始化进度 +// SalaryBillProgressDTO initProgress = salaryBillProgressService.buildInitProgress(SalaryI18nUtil.getI18nLabel(136097, "发送中"), 136097, NumberUtils.INTEGER_ONE, NumberUtils.INTEGER_ZERO, BigDecimal.ZERO); +// salaryBillProgressService.initProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), initProgress); +// String tenantName = TenantContext.getCurrentTenant().getTenantName(); + +// List ids = isRange ? getSalarySendRangeService(user).getSendInfoIdsBySalarySendIdAndOperateType(param.getSalarySendId(), rangeIds, SalarySendOperateTypeEnum.GRANT) : param.getIds(); + List ids = (List) param.getIds(); + // 异步执行 + LocalRunnable localRunnable = new LocalRunnable() { + @Override + public void execute() { + handleGrant(salarySend, ids, salarySob, salaryTemplate, "tenantName"); + } + }; + ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryBillGrant", localRunnable); + } + + /** + * 处理发送 + * 注意: + * 1.IM和云桥通道是发送完成后,只需要在预览时获取核算数据,所以发送时可以忽略获取核算数据; + * 2.邮件通道需要在发送时获取,拼凑成html代码,有图片会转化为base64编码变慢,且图片越大越慢 + * + * @param salarySend + * @param ids + * @param salarySob + * @param salaryTemplate + * @param tenantName + */ + private void handleGrant(SalarySendPO salarySend, List ids, SalarySobPO salarySob, SalaryTemplatePO salaryTemplate, String tenantName) { + try { + long l = System.currentTimeMillis(); + // 开启分权或且是非薪酬模块总管理员且发送全部,谁能进来就是能看全部 + // ids = getIdsForDevolution(salarySend, ids); +// List incomeCategorys = salarySob == null || salarySob.getIncomeCategory() == null ? Lists.newArrayList() : JsonUtil.parseList(salarySob.getIncomeCategory(), String.class); + // 邮箱打开 + boolean isEnableEmail = MessageUtil.checkSendEmail() && salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()); + + // 1.构建发送参数 + SalaryBillSendDTO salaryBillSendParam = buildSendParams(salarySend, null, salarySob, tenantName, salaryTemplate, true); + + // 2.获取可发送的列表,此步最耗时,需要解密核算数据 + long l2 = System.currentTimeMillis(); + List> enableSendList = getEnableSendList(salarySend, ids, null, true); + long l3 = System.currentTimeMillis(); + // 3.发送消息:先修改数据再发消息,避免出错后无法撤回 + List successIds = sendMessage(enableSendList, salaryBillSendParam); + long l4 = System.currentTimeMillis(); + LocalDateTime sendTime = LocalDateTime.now(); + + // 4.发放 +// grantSendInfo(successIds, salarySend, sendTime, salaryTemplate); + + // 5.更新数量 +// updateSendNum(salarySend, salarySob, sendTime, SalaryI18nUtil.getI18nLabel(93215, "工资单发放")); + long l5 = System.currentTimeMillis(); + + int total = enableSendList.size(); + int successCount = successIds.size(); + String messsage = SalaryI18nUtil.getI18nLabel(139208, "发送完成") + ": " + + SalaryI18nUtil.getI18nLabel(134807, "成功条数") + "[" + (successCount) + "], " + + SalaryI18nUtil.getI18nLabel(134808, "失败条数") + "[" + (total - successCount) + "]"; + // 发送进度完成 +// salaryBillProgressService.finish(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), messsage, true); +// log.info("工资单发送组装耗时:{}毫秒;工资单发送消息中心耗时:{}毫秒;工资单数据更改总耗时:{}毫秒;工资单发送总耗时:{}毫秒;工资单云桥图片地址:{}", l3 - l2, l4 - l3, l5 - l4, System.currentTimeMillis() - l, +// salaryBillSendParam == null ? "" : salaryBillSendParam.getPicUrl()); + } catch (Exception e) { + log.info("发送出错:{}", e.getMessage(), e); + // 发送进度失败 + +// salaryBillProgressService.fail(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), SalaryI18nUtil.getI18nLabel(136118, "工资单发送出错") + ": " + e.getMessage()); + } finally { + } + } + + /** + * 构建发送参数 + * + * @param salarySend + * @param incomeCategorys + * @param salarySob + * @param tenantName + * @param salaryTemplate + * @param isEnableEmail + * @return + */ + private SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, List incomeCategorys, SalarySobPO salarySob, String tenantName, SalaryTemplatePO salaryTemplate, boolean isEnableEmail) { + String currentTenantKey = salarySend.getTenantKey(); + // 云桥发送控制 +// salaryTemplate.setCloudBridgeStatus(getSalaryTemplateService(user).isEnableEbridge(currentTenantKey) ? salaryTemplate.getCloudBridgeStatus() : SalaryTemplateWhetherEnum.FALSE.getValue()); + // 发送通道 +// Set sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate); + // 空的发个毛线 +// if (CollectionUtils.isEmpty(sendChannels)) { +// return null; +// } +// List salarySobItems = salarySobItemService.listBySalarySobId(salarySob == null ? 0L : salarySob.getId()); +// Map salaryItemIncomeCategoryMap = SalaryEntityUtil.convert2Map(salarySobItems, +// salarySobItemPO -> salarySobItemPO.getSalaryItemId().toString(), SalarySobItemPO::getIncomeCategory); + + Date salaryMonth = salarySend.getSalaryMonth(); + + boolean isReplenish = NumberUtils.INTEGER_ONE.equals(salarySend.getSalaryAcctType()); +// SalaryTemplateBO.copyShowSet(isReplenish, salaryTemplate); + + // 消息标题 + String title = SalaryBillBO.getBillTitle(salaryTemplate.getTheme(), salaryMonth, tenantName); + + // 云桥企业微信消息图 + String domain = ""; + // todo 访问本项目中的图片需要登陆才能访问,且变成空白,所以还是得改成公网,或者后续鉴权忽略 + // StringUtils.isEmpty(server) || StringUtils.isEmpty(staticPathPattern) ? "https://wx.weaver.com.cn/main/salary/cover.png" : (server+staticPathPattern).replace("**", "salary_bill.png"); + String picUrl = domain + String.format("/papi/file/preview?type=imgs&fileId=%s&random=123456", salaryTemplate.getBackground()); // "https://wx.weaver.com.cn/main/salary/cover.png"; + String backgroundBase64 = ""; +// if (StringUtils.isNotBlank(salaryTemplate.getBackground()) && isEnableEmail) { + // 2.base64码的方式,这种方式可以不管图片地址是否是内外网,缺点是内容太长 +// FileData fileByte = fileDownloadClient.getFileByte(Long.valueOf(salaryTemplate.getBackground())); +// backgroundBase64 = Base64Encoder.encode(fileByte.getData()); + // 千万不要这样做,否则存入salaryTemplate字段会变的很大: salaryTemplate.setBackground(backgroundBase64); +// } + + // 工资单预览实体名 + String entityName = SalaryI18nUtil.getI18nLabel(94626, "工资单"); + + User sendUser = null; + + // 获取人员信息项目分类 + List salaryItemSetList = JSONArray.parseArray(isReplenish ? salaryTemplate.getReplenishSalaryItemSetting() : salaryTemplate.getSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); + // 国际化处理 +// salaryItemSetList = SalaryTemplateBO.handleI18n(salaryItemSetList); + SalaryTemplateSalaryItemSetListDTO employeeInformation = SalaryTemplateBO.getEmployeeInformation(salaryItemSetList); + + Map employeeField = SalaryBillBO.buildEmployeeFieldName(); + + String remarkI18n = SalaryI18nUtil.getI18nLabel(140036, "发放说明"); + if (StringUtils.isNotEmpty(salaryTemplate.getTextContent())) { + String yearI18n = SalaryI18nUtil.getI18nLabel(100325, "年"); + String monthI18n = SalaryI18nUtil.getI18nLabel(100326, "月"); + salaryTemplate + .setTextContent(salaryTemplate.getTextContent().replace("${salaryMonth}", salaryMonth.getYear() + yearI18n + salaryMonth.getMonth() + monthI18n)); + } + + return SalaryBillSendDTO.builder() + // 消息标题 + .title(title) + // 消息内容:目前跟title一样 + .text(title) + // 工资单预览实体名 + .entityName(entityName) + // 发送通道 +// .sendChannels(sendChannels) + // 发送者 + .sendUser(sendUser) + // 工资单模板 + .salaryTemplate(salaryTemplate) + // 工资单背景图base64编码 + .backgroundBase64(backgroundBase64) + // 云桥工资单消息图 + .picUrl(picUrl) + // 租户名 + .tenantName(tenantName) + // 工资单模板-薪资项目设置 + .salaryItemSetList(salaryItemSetList) + // 工资单模板-员工基本信息 + .employeeInformation(employeeInformation) + // 工资单模板-对应人员字段 + .employeeField(employeeField) + // 工资单模板-发放说明标签国际化 + .remarkI18n(remarkI18n) + // 邮件是否可以发送邮件 + .isEnableEmail(isEnableEmail) + // 工资单发放 + .salarySend(salarySend) + // 收入所得项目类型 +// .incomeCategorys(incomeCategorys) + //薪资项目收入所得类型 +// .salaryItemIncomeCategoryMap(salaryItemIncomeCategoryMap) + .build(); + } + + /** + * 获取可发送数据 + * + * @param salarySend + * @param ids + * @param incomeCategorys + * @param isEnableEmail + * @return + */ + private List> getEnableSendList(SalarySendPO salarySend, List ids, List incomeCategorys, boolean isEnableEmail) { + SalarySendInfoQueryParam queryParam = new SalarySendInfoQueryParam(); + queryParam.setSalarySendId(salarySend.getId()); + // 空就是所有 + queryParam.setIds(ids); + queryParam.setSendStatuss(Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue())); + // 2.获取基本数据 + List list = Lists.newArrayList(); + if (CollectionUtils.isEmpty(ids)) { + list = getSalarySendInfoMapper().list(queryParam); + } else { + List> partition = Lists.partition(ids, 500); + for (List idsPart : partition) { + queryParam.setIds(idsPart); + list.addAll(getSalarySendInfoMapper().list(queryParam)); + } + } + +// // 是否是合并计税 +// boolean isMerge = this.getSalarySendService(user).isMergeBySalarySend(salarySend); + List salaryAcctEmployeeList = this.getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salarySend.getSalaryAccountingId()); + List acctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + list = list.stream().filter(f -> acctEmployeeIds.contains(f.getEmployeeId())).collect(Collectors.toList()); + + List employeeIds = list.stream().map(SalarySendInfoListDTO::getEmployeeId).collect(Collectors.toList()); + + // 初始化进度 +// SalaryBillProgressDTO initProgress = salaryBillProgressService +// .buildInitProgress("发送中", 136097, employeeIds.size() * 2 + 1, NumberUtils.INTEGER_ZERO, BigDecimal.ZERO); +// salaryBillProgressService.initProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), initProgress); + // 3.组装详情数据 + // 获取薪资项目数据 + List salaryAcctEmployees = Lists.newArrayList(); + List salaryAcctResultValues = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(ids)) { + int partSize = 100;// 分片大小,越小进度条跑得越短平快,但是总体速度更慢 + List> partition = Lists.partition(employeeIds, partSize); + for (List part : partition) { + // 更新进度 +// salaryBillProgressService.getAndAddCalculatedQty(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), part.size()); + /** 注意只有邮件才需要加密的核算数据 */ + if (isEnableEmail) { + List acctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdsAndEmployeeIds(Collections.singletonList(salarySend.getSalaryAccountingId()), part); + salaryAcctEmployees.addAll(acctEmployees); + salaryAcctResultValues.addAll(getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(SalaryEntityUtil.properties(acctEmployees, SalaryAcctEmployeePO::getId, Collectors.toList()))); + } + } + } else { + /** 注意只有邮件才需要加密的核算数据 */ + if (isEnableEmail) { + salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salarySend.getSalaryAccountingId()); + salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singletonList(salarySend.getSalaryAccountingId())); + } + } + // 外部人员 +// List extEmployeeList = extEmployeeService.listAllWithDeleted(currentTenantKey); + return getSalarySendService(user) + .buildDetailList(list, salaryAcctEmployees, salaryAcctResultValues); + } + + /** + * 发送消息 + * + * @param enableSendList + * @param salaryBillSendParam + */ + private List sendMessage(List> enableSendList, SalaryBillSendDTO salaryBillSendParam) { + + if (CollectionUtils.isEmpty(enableSendList)) { + return Collections.emptyList(); + } + if (salaryBillSendParam == null) { + return enableSendList.stream().map(e -> Long.valueOf(e.get("id").toString())).collect(Collectors.toList()); + } + + // 获取人员完整信息 + Map allEmployeeMap = this.getEmployeeWholeInfo(enableSendList); + + List sendInfoUpdateList = Lists.newArrayList(); + AtomicInteger index = new AtomicInteger(0); + AtomicInteger part = new AtomicInteger(0); + int total = enableSendList.size(); + enableSendList.forEach(e -> { + // 构建发送消息 +// SendMessageEntity message = SalaryBillBO.buildSendMessage(e, allEmployeeMap, salaryBillSendParam); + SalaryBillBO.sendEmail(e, allEmployeeMap, salaryBillSendParam); + /** 发送工资单 **********************************************************/ +// WeaResult sendResult = asyncSystemMessageRest.sendMsg(message); +// if (sendResult.isStatus()) { +// sendInfoUpdateList.add(SalarySendInfoPO.builder() +// .id(Long.valueOf(e.get("id").toString())) +// .sendMsgId(sendResult.getData()) +// .build()); +// } +// // 更新发送进度 +// index.addAndGet(1); +// part.addAndGet(1); +// if (index.get() % 100 == 0 || index.get() >= total) { +// salaryBillProgressService.getAndAddCalculatedQty(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salaryBillSendParam.getSalarySend().getId(), part.get()); +// part.set(0); +// } + }); + // 批量修改发送消息id +// if (CollectionUtils.isNotEmpty(sendInfoUpdateList)) { +// // sqlserver数据库处理,每个分片数量约=2100/插入字段数 +// int partSize = DatabaseUtil.getDatabaseId().equalsIgnoreCase("sqlserver") ? 500 : DbCrudConstant.DEF_PART_SIZE; +// List> partition = Lists.partition(sendInfoUpdateList, partSize); +// partition.forEach(updatePart -> getSalarySendInfoMapper().batchUpdateMsgId(updatePart)); +// } + return sendInfoUpdateList.stream().map(SalarySendInfoPO::getId).collect(Collectors.toList()); + } + + /** + * 获取人员完整信息 + * + * @param enableSendList + * @return + */ + private Map getEmployeeWholeInfo(List> enableSendList) { + // 获取所有人员信息 + List simpleEmployees = getSalaryEmployeeService(user).listAll(); + return SalaryEntityUtil.convert2Map(simpleEmployees, e -> e.getEmployeeId() + ""); + } +// /** 工资单发放 end **********************************************************************/ + + /** + * 检查和获取工资单发放信息 + * + * @param salarySendId + * @return + */ + private SalarySendPO checkAndGetSalarySend(Long salarySendId) { + if (salarySendId == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100327, "工资单发放Id必传")); + } + + SalarySendPO salarySend = this.getSalarySendService(user).getById(salarySendId); + if (salarySend == null) { + throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在") + "[id:%s]", salarySendId)); + } + return salarySend; + } + +// /** +// * 分权处理 +// * +// * @param salarySend +// * @param ids +// * @param currentEmployeeId +// * @param currentTenantKey +// * @return +// */ +// private List getIdsForDevolution(SalarySendPO salarySend, List ids) { +// // 开启分权或且是非薪酬模块总管理员且发送全部 +// if (getTaxAgentService(user).isOpenDevolution(currentTenantKey) && !getTaxAgentService(user).isChief(currentEmployeeId) && CollectionUtils.isEmpty(ids)) { +// List salaryAcctEmployees = getSalaryAcctEmployeeService(user) +// .listByRecordIds(Collections.singletonList(salarySend.getSalaryAccountingId())); +// +// List taxAgentIdsAsAdmin = getTaxAgentService(user).listAllTaxAgentsAsAdmin(currentEmployeeId).stream().map(TaxAgentPO::getId) +// .collect(Collectors.toList()); +// List taxAgentEmployees = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId).stream() +// .filter(t -> !taxAgentIdsAsAdmin.contains(t.getTaxAgentId())).collect(Collectors.toList()); +// Map> taxAgentEmployeesMap = SalaryEntityUtil.convert2Map(taxAgentEmployees, TaxAgentManageRangeEmployeeDTO::getTaxAgentId, +// v -> v.getEmployeeList().stream().map(TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee::getEmployeeId).collect(Collectors.toList())); +// +// List extEmployeeList = extEmployeeService.listCanUse(currentEmployeeId); +// // 工资单发放信息过滤 +// List salarySendInfos = new LambdaQueryChainWrapper<>(getSalarySendInfoMapper()) +// /** 注意:需要啥就加载啥,避免加载大字段salaryTemplate */ +// .select(SalarySendInfoPO::getId, SalarySendInfoPO::getEmployeeId, SalarySendInfoPO::getCreator) +// .eq(SalarySendInfoPO::getDeleteType, 0) +// .eq(SalarySendInfoPO::getTenantKey) +// .eq(SalarySendInfoPO::getSalarySendId, salarySend.getId()) +// .list(); +// +// List acctEmployeeIds = salaryAcctEmployees.stream().filter(f -> +// // 作为管理员 +// taxAgentIdsAsAdmin.contains(f.getTaxAgentId()) +// // 作为分管理员 +// || TaxAgentBO.checkTaxAgentAndEmployee(taxAgentEmployeesMap, f.getTaxAgentId(), f.getEmployeeId()) +// // 外部人员 +// || extEmployeeList.stream().anyMatch(t -> t.getTaxAgentId().equals(f.getTaxAgentId()) && t.getId().equals(f.getEmployeeId())) +// ).map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); +// +// ids = salarySendInfos.stream().filter(f -> acctEmployeeIds.contains(f.getEmployeeId()) || currentEmployeeId.equals(f.getCreator())).map(SalarySendInfoPO::getId) +// .distinct().collect(Collectors.toList()); +// } +// return ids; +// } +// +// /** +// * 发放工资单更新信息 +// * +// * @param ids +// * @param salarySend +// * @param sendTime +// * @param salaryTemplate +// * @param currentTenantKey +// */ +// private void grantSendInfo(List ids, SalarySendPO salarySend, LocalDateTime sendTime, SalaryTemplatePO salaryTemplate) { +// List> partition = Lists.partition(ids, DbCrudConstant.DEF_PART_SIZE); +// partition.forEach(part -> new LambdaUpdateChainWrapper<>(getSalarySendInfoMapper()) +// .eq(SalarySendInfoPO::getDeleteType, 0) +// .eq(SalarySendInfoPO::getTenantKey) +// .eq(SalarySendInfoPO::getSalarySendId, salarySend.getId()) +// .in(SalarySendInfoPO::getSendStatus, Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue())) +// .in(SalarySendInfoPO::getId, part) +// .set(SalarySendInfoPO::getSendStatus, SalarySendStatusEnum.ALREADYSEND.getValue()) +// .set(SalarySendInfoPO::getSendTime, sendTime) +// .set(SalarySendInfoPO::getSalaryTemplate, JsonUtil.toJsonString(salaryTemplate)) +// .update()); +// } +// +// /** +// * 撤回工资单更新信息 +// * +// * @param ids +// * @param salarySend +// * @param currentTenantKey +// */ +// private void withdrawSendInfo(List ids, SalarySendPO salarySend) { +// List> partition = Lists.partition(ids, DbCrudConstant.DEF_PART_SIZE); +// partition.forEach(part -> new LambdaUpdateChainWrapper<>(getSalarySendInfoMapper()) +// .eq(SalarySendInfoPO::getDeleteType, 0) +// .eq(SalarySendInfoPO::getTenantKey) +// .eq(SalarySendInfoPO::getSalarySendId, salarySend.getId()) +// .eq(SalarySendInfoPO::getSendStatus, SalarySendStatusEnum.ALREADYSEND.getValue()) +// .in(SalarySendInfoPO::getId, part) +// .set(SalarySendInfoPO::getSendStatus, SalarySendStatusEnum.WITHDRAW.getValue()) +// .update()); +// } +// +// /** +// * 更新发送数量 +// * +// * @param salarySend +// * @param salarySob +// * @param lastSendTime +// * @param operateTypeName +// * @param currentTenantKey +// */ +// private void updateSendNum(SalarySendPO salarySend, SalarySobPO salarySob, LocalDateTime lastSendTime, String operateTypeName) { +// List list = new LambdaQueryChainWrapper<>(getSalarySendInfoMapper()) +// /** 注意:需要啥就加载啥,避免加载大字段salaryTemplate */ +// .select(SalarySendInfoPO::getId, SalarySendInfoPO::getSendStatus) +// .eq(SalarySendInfoPO::getDeleteType, 0) +// .eq(SalarySendInfoPO::getTenantKey) +// .eq(SalarySendInfoPO::getSalarySendId, salarySend.getId()).list(); +// int sendNum = (int) list.stream().filter(e -> e.getSendStatus().equals(SalarySendStatusEnum.ALREADYSEND.getValue())).count(); +// int sendTotal = list.size(); +// SalarySendPO salarySendNew = new SalarySendPO(); +// BeanUtils.copyProperties(salarySend, salarySendNew); +// salarySendNew.setSendNum(sendNum); +// salarySendNew.setSendTotal(sendTotal); +// if (lastSendTime != null) { +// salarySendNew.setLastSendTime(lastSendTime); +// } +// getSalarySendMapper().updateById(salarySendNew); +// // 记录日志 +// SalaryLoggerUtil.recordUpdateSingleLog(salarySendLoggerTemplate, +// salarySend.getId(), +// salarySend.getSalaryMonth() + "-" + (salarySob == null ? "" : salarySob.getName()), +// operateTypeName, +// operateTypeName, +// salarySend, +// salarySendNew); +// } +// +// /** +// * 工资单撤回 start +// **********************************************************************/ +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void withdraw(SalarySendWithdrawParam param, boolean isRange, List rangeIds) { +// // 1.检查和获取工资单发放 +// SalarySendPO salarySend = checkAngGetSalarySend(param.getSalarySendId()); +//// // 已经冻结不能操作 +//// if (salarySend.getSendStatus().equals(NumberUtils.INTEGER_ONE)) { +//// return; +//// } +// +// // 检查是否正在撤回中 +// SalaryBillProgressDTO salaryBillProgress = salaryBillProgressService +// .getProgress(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId()); +// if (Objects.nonNull(salaryBillProgress) && salaryBillProgress.isStatus() +// && Optional.ofNullable(salaryBillProgress.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(136105, "有其他人员正在撤回中,请等待其他人员撤回结束后再操作")); +// } +// +// // 初始化进度 +// SalaryBillProgressDTO initProgress = salaryBillProgressService +// .buildInitProgress("撤回中", 136106, NumberUtils.INTEGER_ONE, NumberUtils.INTEGER_ZERO, BigDecimal.ZERO); +// salaryBillProgressService.initProgress(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), initProgress); +// +// List ids = isRange ? getSalarySendRangeService(user).getSendInfoIdsBySalarySendIdAndOperateType(salarySend.getId(), rangeIds, SalarySendOperateTypeEnum.WITHDRAW) : param.getIds(); +// // 异步执行撤回 +// LocalRunnable localRunnable = new LocalRunnable() { +// @Override +// public void execute() { +// handleWithdraw(salarySend, ids); +// } +// }; +// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryBillWithdraw", localRunnable); +// } +// +// /** +// * 处理撤回 +// * +// * @param salarySend +// * @param ids +// * @param currentEmployeeId +// * @param currentTenantKey +// */ +// private void handleWithdraw(SalarySendPO salarySend, List ids) { +// try { +// DSTenantKeyThreadVar.tenantKey.set(currentTenantKey); +// +// // 开启分权或且是非薪酬模块总管理员且发送全部,谁能进来就是能看全部 +// // ids = getIdsForDevolution(salarySend, ids); +// +// // 获取可撤回的工资单 +// List enableWithdrawList = Lists.newArrayList(); +// if (CollectionUtils.isEmpty(ids)) { +// List salaryAcctEmployees = this.getSalarySendService(user).getSalaryAcctEmployees(salarySend.getSalaryAccountingId(), null); +// List acctEmployeeIds = salaryAcctEmployees.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); +// List> partition = Lists.partition(acctEmployeeIds, DbCrudConstant.DEF_PART_SIZE); +// for (List part : partition) { +// enableWithdrawList.addAll(new LambdaQueryChainWrapper<>(getSalarySendInfoMapper()) +// /** 注意:需要啥就加载啥,避免加载大字段salaryTemplate */ +// .select(SalarySendInfoPO::getId, SalarySendInfoPO::getSendMsgId) +// .eq(SalarySendInfoPO::getDeleteType, 0) +// .eq(SalarySendInfoPO::getTenantKey) +// .eq(SalarySendInfoPO::getSalarySendId, salarySend.getId()) +// .eq(SalarySendInfoPO::getSendStatus, SalarySendStatusEnum.ALREADYSEND.getValue()) +// .in(SalarySendInfoPO::getEmployeeId, part) +// .list()); +// } +// } else { +// List> partition = Lists.partition(ids, DbCrudConstant.DEF_PART_SIZE); +// for (List part : partition) { +// enableWithdrawList.addAll(new LambdaQueryChainWrapper<>(getSalarySendInfoMapper()) +// /** 注意:需要啥就加载啥,避免加载大字段salaryTemplate */ +// .select(SalarySendInfoPO::getId, SalarySendInfoPO::getSendMsgId) +// .eq(SalarySendInfoPO::getDeleteType, 0) +// .eq(SalarySendInfoPO::getTenantKey) +// .eq(SalarySendInfoPO::getSalarySendId, salarySend.getId()) +// .eq(SalarySendInfoPO::getSendStatus, SalarySendStatusEnum.ALREADYSEND.getValue()) +// .in(SalarySendInfoPO::getId, part) +// .list()); +// } +// } +// +// // 初始化进度 +// SalaryBillProgressDTO initProgress = salaryBillProgressService +// .buildInitProgress("撤回中", 136106, enableWithdrawList.size() * 2 + 1, enableWithdrawList.size(), new BigDecimal("0.5")); +// salaryBillProgressService.initProgress(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), initProgress); +// +// // 1.撤回消息:先修改数据再发消息,避免出错后无法撤回 +// String text = SalaryI18nUtil.getI18nLabel(184533, "此工资单已被撤回,如有问题,请联系管理员"); +// String title = SalaryI18nUtil.getI18nLabel(94626, "工资单"); +// List sendInfoUpdateIds = Lists.newArrayList(); +// +// AtomicInteger index = new AtomicInteger(0); +// AtomicInteger part = new AtomicInteger(0); +// int total = enableWithdrawList.size(); +// enableWithdrawList.forEach(e -> { +// if (!e.getSendMsgId().equals(0L)) { +// CancleMessageEntity cme = SalaryBillBO.buildCancleMessageEntity(e.getSendMsgId(), text, title); +// /** 撤回工资单 **********************************************************/ +// WeaResult cancelResult = asyncSystemMessageRest.cancleMsg(cme); +// if (cancelResult.isStatus()) { +// sendInfoUpdateIds.add(e.getId()); +// } +// } else { +// sendInfoUpdateIds.add(e.getId()); +// } +// // 更新撤回进度 +// index.addAndGet(1); +// part.addAndGet(1); +// if (index.get() % 100 == 0 || index.get() >= total) { +// salaryBillProgressService.getAndAddCalculatedQty(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), part.get()); +// part.set(0); +// } +// }); +// if (CollectionUtils.isNotEmpty(sendInfoUpdateIds)) { +// List> partition = Lists.partition(sendInfoUpdateIds, DbCrudConstant.DEF_PART_SIZE); +// partition.forEach(idsPart -> new LambdaUpdateChainWrapper<>(getSalarySendInfoMapper()) +// .eq(SalarySendInfoPO::getDeleteType, 0) +// .eq(SalarySendInfoPO::getTenantKey) +// .in(SalarySendInfoPO::getId, idsPart) +// .set(SalarySendInfoPO::getSendMsgId, 0) +// .update()); +// } +// // 2.撤回 +// withdrawSendInfo(sendInfoUpdateIds, salarySend); +// // 3.更新数量 +// updateSendNum(salarySend, getSalarySobService(user).getById(salarySend.getSalarySobId()), null, +// SalaryI18nUtil.getI18nLabel(100521, "撤回工资单发放")); +// +// int successCount = sendInfoUpdateIds.size(); +// String messsage = SalaryI18nUtil.getI18nLabel(139211, "撤回完成") + ": " +// + SalaryI18nUtil.getI18nLabel(134807, "成功条数") + "[" + (successCount) + "], " +// + SalaryI18nUtil.getI18nLabel(134808, "失败条数") + "[" + (total - successCount) + "]"; +// // 撤回进度完成 +// salaryBillProgressService.finish(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), messsage, true); +// } catch (Exception e) { +// log.info("撤回出错:{}", e.getMessage(), e); +// // 发送进度失败 +// salaryBillProgressService +// .fail(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), SalaryI18nUtil.getI18nLabel(136142, "工资单撤回出错") + ": " + e.getMessage()); +// } finally { +// DSTenantKeyThreadVar.tenantKey.remove(); +// } +// } +// /** 工资单撤回 end **********************************************************************/ +// +// /** +// * 我的工资单 start +// **********************************************************************/ +// @Override +// public Map mySalaryBill(Long salaryInfoId) { +// // 企业微信端示例数据 +// if (salaryInfoId.equals(1234567890L)) { +// return handle4WeChartDemo(salaryInfoId); +// } +// +// SalarySendInfoPO salarySendInfo = new LambdaQueryChainWrapper<>(getSalarySendInfoMapper()) +// .eq(SalarySendInfoPO::getDeleteType, 0) +// .eq(SalarySendInfoPO::getTenantKey) +// .eq(SalarySendInfoPO::getId, salaryInfoId).one(); +// if (salarySendInfo == null) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "工资单信息不存在")); +// } +// // 获取模板 +// String salaryTemplateContent = salarySendInfo.getSalaryTemplate(); +// if (StringUtils.isBlank(salaryTemplateContent)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100513, "没有默认模板,无法查看")); +// } +// SalaryTemplatePO salaryTemplate = SalaryBillBO.buildSalaryTemplateContent(salaryTemplateContent); +// +// // 判断是否是补发 +// boolean isReplenish = NumberUtils.INTEGER_ONE.equals(salarySendInfo.getSalaryAcctType()); +// SalaryTemplateBO.copyShowSet(isReplenish, salaryTemplate); +// +// // 获取人员信息项目分类 +// List listDTOS = JSONArray.parseArray(isReplenish ? salaryTemplate.getReplenishSalaryItemSetting() : salaryTemplate.getSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); +// // 国际化处理 +// listDTOS = SalaryTemplateBO.handleI18n(listDTOS); +// // 获取人员信息项目分类 +// SalaryTemplateSalaryItemSetListDTO employeeInformation = SalaryTemplateBO.getEmployeeInformation(listDTOS); +// // 1.薪资项目赋值 +// List itemSetListDTOS = listDTOS.stream() +// .filter(e -> !SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).collect(Collectors.toList()); +// // 获取薪资核算数据 +// List salaryAcctEmployees = getSalaryAcctEmployeeService(user) +// .listByRecordIdAndEmployeeIds(salarySendInfo.getSalaryAcctRecordId(), Collections.singletonList(salarySendInfo.getEmployeeId())); +// Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployees, SalaryAcctEmployeePO::getId); +// List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); +//// List salaryAcctResultList = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndEmployeeIds(Collections.singletonList(salarySendInfo.getSalaryAcctRecordId()), Collections.singletonList(currentEmployeeId)); +// if (CollectionUtils.isNotEmpty(salaryAcctResultValues)) { +// SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salarySendInfo.getSalaryAcctRecordId()); +// // 当前查询核算记录是回算,但是发放不是回算的,那么就取源头核算结果 +// boolean isOrigin = salaryAcctRecord != null && !isReplenish && salaryAcctRecord.getBackCalcStatus().equals(NumberUtils.INTEGER_ONE); +// Map map = Maps.newHashMap(); +// if (salarySendInfo.getTaxAgentId().equals(0L)) { +// for (SalaryAcctResultValuePO salaryAcctResultValue : salaryAcctResultValues) { +// if (isOrigin) { +// if (salaryAcctResultValue.getOriginResultValue() != null && !salaryAcctResultValue.getOriginResultValue().isEmpty()) { +// map.putAll(salaryAcctResultValue.getOriginResultValue()); +// } +// } else { +// map.putAll(salaryAcctResultValue.getResultValue()); +// } +// } +// } else { +// Map salaryAcctEmployeeMap = SalaryEntityUtil +// .convert2Map(salaryAcctEmployees, salaryAcctEmployee -> salaryAcctEmployee.getEmployeeId() + "-" + salaryAcctEmployee.getTaxAgentId()); +// Map singleEmpAcctMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultValuePO::getSalaryAcctEmployeeId); +// SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(salarySendInfo.getEmployeeId() + "-" + salarySendInfo.getTaxAgentId()); +// if (salaryAcctEmployee != null && singleEmpAcctMap.containsKey(salaryAcctEmployee.getId())) { +// SalaryAcctResultValuePO salaryAcctResultValue = singleEmpAcctMap.get(salaryAcctEmployee.getId()); +// if (Objects.nonNull(salaryAcctResultValue)) { +// if (isOrigin) { +// if (salaryAcctResultValue.getOriginResultValue() != null && !salaryAcctResultValue.getOriginResultValue().isEmpty()) { +// map.putAll(salaryAcctResultValue.getOriginResultValue()); +// } +// } else { +// map.putAll(salaryAcctResultValue.getResultValue()); +// } +// } +// } +// } +// org.apache.commons.collections4.CollectionUtils.emptyIfNull(itemSetListDTOS) +// .forEach(item -> item.getItems().forEach(e -> e.setSalaryItemValue(Optional.ofNullable(map.get("" + e.getId())).orElse("")))); +// } else { +// org.apache.commons.collections4.CollectionUtils.emptyIfNull(itemSetListDTOS) +// .forEach(item -> item.getItems().forEach(e -> e.setSalaryItemValue(""))); +// } +// // 2.人员信息赋值 +// if (employeeInformation != null && CollectionUtils.isNotEmpty(employeeInformation.getItems())) { +// // 如果是外部人员 +// if (salarySendInfo.getEmployeeType().equals(SalarySendEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { +// ExtEmployeePO extEmployeePO = extEmployeeService.getByIdWithDeleted(salarySendInfo.getEmployeeId()); +// if (extEmployeePO != null) { +// SimpleEmployee simpleEmployee = new SimpleEmployee(); +// simpleEmployee.setId(extEmployeePO.getId()); +// simpleEmployee.setUsername(extEmployeePO.getUsername()); +// simpleEmployee.setMobile(extEmployeePO.getUsername()); +// SalaryBillBO.buildEmployeeInfo(employeeInformation, simpleEmployee, SalaryBillBO.buildEmployeeFieldName()); +// } +// } else { +// SimpleEmployee simpleEmployee = hrmCommonEmployeeService.getEmployeeById(salarySendInfo.getEmployeeId()); +// if (simpleEmployee != null) { +// // 查询人员状态 +// HrmStatus hrmStatusDb = hrmCommonHrmStatusService.getHrmStatusByCodeId(simpleEmployee.getPersonnelStatus()); +// simpleEmployee.setPersonnelStatus(hrmStatusDb == null ? "" : hrmStatusDb.getName()); +// } +// SalaryBillBO.buildEmployeeInfo(employeeInformation, simpleEmployee, SalaryBillBO.buildEmployeeFieldName()); +// } +// } +// // 主题设置 +// salaryTemplate.setTheme(SalaryBillBO +// .getBillTitle(salaryTemplate.getTheme(), salarySendInfo.getSalaryMonth(), TenantContext.getCurrentTenant().getTenantName())); +// // 背景图 +// if (StringUtils.isNotBlank(salaryTemplate.getBackground())) { +// salaryTemplate.setBackground(String.format("/papi/file/preview?type=imgs&fileId=%s&random=123456", salaryTemplate.getBackground())); +// } +// +// Map resultMap = new LinkedHashMap<>(); +// resultMap.put("tenantName", TenantContext.getCurrentTenant().getTenantName()); +// resultMap.put("sendTime", SalaryDateUtil.getFormatLocalDateTime(salarySendInfo.getSendTime())); +// resultMap.put("employeeInformation", employeeInformation); +// resultMap.put("salaryGroups", itemSetListDTOS); +// resultMap.put("salaryTemplate", salaryTemplate); +// return resultMap; +// } +// +// /** +// * 企业微信端示例数据 +// * +// * @param salaryInfoId +// * @return +// */ +// private Map handle4WeChartDemo(Long salaryInfoId) { +// Map resultMap = new LinkedHashMap<>(); +// if (salaryInfoId.equals(1234567890L)) { +// List itemSetListDTOS = Lists.newArrayList(); +// List items = Lists.newArrayList(); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("735706397435338782").salaryItemValue("5000.00").name(SalaryI18nUtil.getI18nLabel(184508, "基本工资")).sortedIndex(0).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("735706397435338783").salaryItemValue("2000.00").name(SalaryI18nUtil.getI18nLabel(184537, "岗位工资")).sortedIndex(1).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("739465941241856001").salaryItemValue("100.00").name(SalaryI18nUtil.getI18nLabel(184538, "其他补贴")).sortedIndex(2).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("739466138709688320").salaryItemValue("3.00").name(SalaryI18nUtil.getI18nLabel(184539, "绩效分值")).sortedIndex(3).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("739505579468095489").salaryItemValue("600.00").name(SalaryI18nUtil.getI18nLabel(184540, "工时奖金")).sortedIndex(4).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("739505652314767360").salaryItemValue("500.00").name(SalaryI18nUtil.getI18nLabel(184544, "成果奖金")).sortedIndex(5).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("739506094797062145").salaryItemValue("200.00").name(SalaryI18nUtil.getI18nLabel(184545, "考勤扣款")).sortedIndex(6).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("739506691648290816").salaryItemValue("800.00").name(SalaryI18nUtil.getI18nLabel(184546, "餐补")).sortedIndex(7).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("739516333975699456").salaryItemValue("1").name(SalaryI18nUtil.getI18nLabel(184547, "当月缺勤")).sortedIndex(8).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("739516913670455296").salaryItemValue("200.00").name(SalaryI18nUtil.getI18nLabel(184549, "缺勤扣款")).sortedIndex(9).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("735706397435338798").salaryItemValue("200.00").name(SalaryI18nUtil.getI18nLabel(184550, "社保代扣")).sortedIndex(10).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("735706397435338799").salaryItemValue("200.00").name(SalaryI18nUtil.getI18nLabel(184551, "公积金代扣")).sortedIndex(11).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("741652500368097281").salaryItemValue("8800.00").name(SalaryI18nUtil.getI18nLabel(184553, "当月计税收入")).sortedIndex(12).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("735706397435338770").salaryItemValue("0").name(SalaryI18nUtil.getI18nLabel(184555, "当前累计专项附加扣除合计")).sortedIndex(13).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("735706397435338780").salaryItemValue("1000.00").name(SalaryI18nUtil.getI18nLabel(184556, "当月预扣个税")).sortedIndex(14).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("735706397435338800").salaryItemValue("8700.00").name(SalaryI18nUtil.getI18nLabel(184557, "当月实发现金")).sortedIndex(15).build()); +// items.add(SalaryTemplateSalaryItemListDTO.builder().id("735706397435338802").salaryItemValue("").name(SalaryI18nUtil.getI18nLabel(84961, "备注")).sortedIndex(16).build()); +// itemSetListDTOS.add(SalaryTemplateSalaryItemSetListDTO.builder() +// .groupId("custom_144") +// .groupName(SalaryI18nUtil.getI18nLabel(184561, "工资薪金项目")) +// .sortedIndex(0) +// .items(items) +// .build()); +// SalaryTemplatePO salaryTemplate = SalaryTemplatePO.builder() +// .id(759519856313417728L) +// .name(SalaryI18nUtil.getI18nLabel(184563, "测试模板")) +// .description("") +// .theme(SalaryI18nUtil.getI18nLabel(184565, "(示例)工资单明细")) +// .background("") +// .textContent(SalaryI18nUtil.getI18nLabel(184590, "(示例)本数据仅为您收入预发金额,考勤、绩效及各类专项奖励的差异值将根据实际数据后续在下次发薪时统一予以调整,如有异议,请联系****。")) +// .textContentPosition(2) +// .salaryItemNullStatus(0) +// .salaryItemZeroStatus(0) +// .salaryItemSetting(JSON.toJSONString(itemSetListDTOS)) +// .build(); +// resultMap.put("tenantName", TenantContext.getCurrentTenant().getTenantName()); +// resultMap.put("sendTime", SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now())); +// resultMap.put("employeeInformation", null); +// resultMap.put("salaryGroups", itemSetListDTOS); +// resultMap.put("salaryTemplate", salaryTemplate); +// } +// return resultMap; +// } +// +// @Override +// public Page mySalaryBillListPage(Page page, SalaryBillQueryParam queryParam, String tenantKey) { +// getSalarySendInfoMapper().mySalaryBillList(page, queryParam, tenantKey); +// return page; +// } + /** 我的工资单 end **********************************************************************/ +} diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 658f364d0..9cd1ede32 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -71,7 +71,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService private SysSalaryItemBiz sysSalaryItemBiz = new SysSalaryItemBiz(); -// @Autowired +// // private LoggerTemplate salaryItemLoggerTemplate; @Override diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 01bfb5162..1e0d54976 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -9,6 +9,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySendBiz; import com.engine.salary.biz.SalarySendInfoBiz; +import com.engine.salary.constant.SalaryArchiveConstant; import com.engine.salary.constant.SalaryItemConstant; import com.engine.salary.constant.SalaryTemplateSalaryItemSetGroupConstant; import com.engine.salary.encrypt.EncryptUtil; @@ -60,6 +61,7 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import weaver.common.MessageUtil; import weaver.hrm.User; import weaver.hrm.company.SubCompanyComInfo; import weaver.hrm.resource.ResourceComInfo; @@ -149,29 +151,10 @@ public class SalarySendServiceImpl extends Service implements SalarySendService return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } + private SalaryBillService getSalaryBillService(User user) { + return ServiceUtil.getService(SalaryBillServiceImpl.class, user); + } -// @RpcReference -// private FileDownloadClient fileDownloadClient; -// /** -// * 同步用RpcReference -// */ -// @RpcReference -// private SystemMessageRest systemMessageRest; -// /** -// * 异步用Autowired -// */ -// @Autowired -// private AsyncSystemMessageRest asyncSystemMessageRest; -// @RpcReference -// private MailBaseService mailBaseService; -// -// private SalaryBatchService salaryBatchService; -// @Autowired -// private LoggerTemplate salarySendLoggerTemplate; -// @Autowired -// private HrmCommonEmployeeService hrmCommonEmployeeService; -// @Autowired -// private ExecutorService taskExecutor; @Override public SalarySendPO getById(Long salarySendId) { @@ -772,6 +755,97 @@ public class SalarySendServiceImpl extends Service implements SalarySendService return listMaps; } + /** + * 组装详情数据 + * + * @param list + * @param salaryAcctResultValues + * @return + */ + @Override + public List> buildDetailList(List list, + List salaryAcctEmployees, List salaryAcctResultValues) { + List> listMaps = new ArrayList<>(); + if (CollectionUtils.isEmpty(list)) { + return listMaps; + } + // 所有个税扣缴义务人 + Map taxAgentMap = SalaryEntityUtil.convert2Map(getTaxAgentService(user).listAll(), TaxAgentPO::getId, TaxAgentPO::getName); + // 按人员分组核算数据 + Map> relationSalaryAcctEmployeeMap = SalaryEntityUtil.group2Map(salaryAcctEmployees, SalaryAcctEmployeePO::getEmployeeId); + Map salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployees, salaryAcctEmployee -> salaryAcctEmployee.getEmployeeId() + "-" + salaryAcctEmployee.getTaxAgentId()); + Map> singleEmpAcctMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); + List employeeIds = list.stream().map(SalarySendInfoListDTO::getEmployeeId).distinct().collect(Collectors.toList()); + // 查询分部 查询部门 + List comInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); + Map empComMap = SalaryEntityUtil.convert2Map(comInfos, DataCollectionEmployee::getEmployeeId); + + // 当前查询核算记录是回算,但是发放不是回算的,那么就取源头核算结果 + boolean isOrigin = false; + SalaryAcctRecordPO salaryAcctRecord = CollectionUtils.isEmpty(list) ? null : getSalaryAcctRecordService(user).getById(list.get(0).getSalaryAcctRecordId()); + if (Objects.nonNull(salaryAcctRecord) && Objects.nonNull(salaryAcctRecord.getBackCalcStatus())) { + isOrigin = !NumberUtils.INTEGER_ONE.equals(list.get(0).getSalaryAcctType()) && salaryAcctRecord.getBackCalcStatus().equals(NumberUtils.INTEGER_ONE); + } + + // 动态列 + long l = System.currentTimeMillis(); + Map finalEmpSubComMap = empComMap; + boolean finalIsOrigin = isOrigin; + list.forEach(e -> { + Map map = new LinkedHashMap<>(); + map.put("id", e.getId() + ""); + DataCollectionEmployee hrmDepartmentComInfo = finalEmpSubComMap.get(e.getEmployeeId()); + if (hrmDepartmentComInfo != null) { + map.put("subCompanyName", hrmDepartmentComInfo.getSubcompanyName()); + } else { + map.put("subCompanyName", ""); + } + if (hrmDepartmentComInfo != null) { + map.put("department", e.getDepartment()); + } + map.put("employeeId", e.getEmployeeId() + ""); + map.put("username", e.getUsername()); + map.put("mobile", e.getMobile()); + map.put("jobNum", e.getJobNum()); + map.put("email", e.getEmail()); +// map.put("employeeType", SalarySendEmployeeTypeEnum.getNameByValue(e.getEmployeeType())); + // 单个人的核算数据 + List resultValues = Lists.newArrayList(); + // 个税扣缴义务人 +// if (incomeCategorys.size() > 1) { +// List acctEmployees = relationSalaryAcctEmployeeMap.getOrDefault(e.getEmployeeId(), Collections.emptyList()); +// for (SalaryAcctEmployeePO salaryAcctEmployee : acctEmployees) { +// if (singleEmpAcctMap.containsKey(salaryAcctEmployee.getId())) { +// resultValues.add(singleEmpAcctMap.get(salaryAcctEmployee.getId())); +// } +// } +// } else { +// SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(e.getEmployeeId() + "-" + e.getTaxAgent()); +// if (salaryAcctEmployee != null && singleEmpAcctMap.containsKey(salaryAcctEmployee.getId())) { +// resultValues.add(singleEmpAcctMap.get(salaryAcctEmployee.getId())); +// } +// } + + SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(e.getEmployeeId() + "-" + e.getTaxAgentId()); + if (salaryAcctEmployee != null && singleEmpAcctMap.containsKey(salaryAcctEmployee.getId())) { + resultValues.addAll(singleEmpAcctMap.get(salaryAcctEmployee.getId())); + } + // 薪资项目 +// singleEmpAcctResultList.forEach(i-> map.put(i.getSalaryItemId() + SalaryArchiveConstant.DYNAMIC_SUFFIX, i.getResultValue())); + for (SalaryAcctResultPO salaryAcctResultValue : resultValues) { + if (finalIsOrigin) { + map.put(salaryAcctResultValue.getSalaryItemId() + SalaryArchiveConstant.DYNAMIC_SUFFIX, salaryAcctResultValue.getResultValue()); + } else { + map.put(salaryAcctResultValue.getSalaryItemId() + SalaryArchiveConstant.DYNAMIC_SUFFIX, salaryAcctResultValue.getResultValue()); + } + } + + listMaps.add(map); + }); + log.info("工资单详情构建总耗时:{}毫秒", System.currentTimeMillis() - l); + return listMaps; + } + /** * 通过薪资账套获取模板的薪资项目 * @@ -806,86 +880,88 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public Map grant(SalarySendGrantParam param) { - if (param.getSalarySendId() == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100327, "工资单发放Id必传")); - } + getSalaryBillService(user).grant(param, false, new ArrayList<>()); +// if (param.getSalarySendId() == null) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100327, "工资单发放Id必传")); +// } +// +// Long salarySendId = param.getSalarySendId(); +// Collection ids = param.getIds(); +// +// if (param.getSalarySendRangeIds() != null) { +// //如果传了范围id,则使用范围id发放 +// ids = getSalarySendRangeService(user) +// .getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); +// if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 +// throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); +// } +// } +// +// SalarySendPO salarySend = mapper.getById(salarySendId); +// if (salarySend == null) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在")); +// } +// // 已经冻结不能操作 +// if (Objects.equals(salarySend.getSendStatus(), NumberUtils.INTEGER_ONE)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "工资单已冻结")); +// } +// // 获取默认模板 +// List salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Collections.singletonList(salarySend.getSalarySobId())); +// if (CollectionUtils.isEmpty(salaryTemplates)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100518, "没有默认模板,无法发送")); +// } +// SalaryTemplatePO templatePO = salaryTemplates.get(0); +// Date sendTime = new Date(); +// // 获取可发送的列表 +// List> enableSendList = getEnableSendList(salarySend, ids, templatePO); +// // 1.发放 +// +// SalarySendInfoPO po = new SalarySendInfoPO(); +// po.setSendStatus(SalarySendStatusEnum.ALREADYSEND.getValue()); +// po.setSendTime(sendTime); +// po.setSalaryTemplate(JsonUtil.toJsonString(templatePO)); +// salarySendInfoMapper.updateGrantWithdraw(po, salarySendId, Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()), ids); +// +// +// List list = salarySendInfoMapper.listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).build()); +// //需要发送工资的人 +// +// List sendList = list.stream().filter(e -> e.getSendStatus().equals(SalarySendStatusEnum.ALREADYSEND.getValue())).collect(Collectors.toList()); +// int sendNum = sendList.size(); +// int sendTotal = list.size(); +// SalarySendPO salarySendNew = new SalarySendPO(); +// try { +// BeanUtils.copyProperties(salarySendNew, salarySend); +// } catch (IllegalAccessException e) { +// e.printStackTrace(); +// } catch (InvocationTargetException e) { +// e.printStackTrace(); +// } +// salarySendNew.setSendNum(sendNum); +// salarySendNew.setSendTotal(sendTotal); +// salarySendNew.setLastSendTime(sendTime); +// +// mapper.updateById(salarySendNew); +// +// List needSendList = Lists.newArrayList(); +// enableSendList.forEach(map -> { +// sendList.forEach(item -> { +// if (item.getId() == Long.valueOf(map.get("id").toString()).longValue()) { +// needSendList.add(item); +// } +// }); +// }); +// +// // 发送消息 +// param.setTemplate(templatePO); +// sendMessage(true, needSendList, param, salarySend); +// +// Map map = new HashMap<>(2); +// map.put("sendNum", sendNum); +// map.put("sendTotal", sendTotal); - Long salarySendId = param.getSalarySendId(); - Collection ids = param.getIds(); - - if (param.getSalarySendRangeIds() != null) { - //如果传了范围id,则使用范围id发放 - ids = getSalarySendRangeService(user) - .getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); - if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 - throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); - } - } - - SalarySendPO salarySend = mapper.getById(salarySendId); - if (salarySend == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在")); - } - // 已经冻结不能操作 - if (Objects.equals(salarySend.getSendStatus(), NumberUtils.INTEGER_ONE)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "工资单已冻结")); - } - // 获取默认模板 - List salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Collections.singletonList(salarySend.getSalarySobId())); - if (CollectionUtils.isEmpty(salaryTemplates)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100518, "没有默认模板,无法发送")); - } - SalaryTemplatePO templatePO = salaryTemplates.get(0); - Date sendTime = new Date(); - // 获取可发送的列表 - List> enableSendList = getEnableSendList(salarySend, ids, templatePO); - // 1.发放 - - SalarySendInfoPO po = new SalarySendInfoPO(); - po.setSendStatus(SalarySendStatusEnum.ALREADYSEND.getValue()); - po.setSendTime(sendTime); - po.setSalaryTemplate(JsonUtil.toJsonString(templatePO)); - salarySendInfoMapper.updateGrantWithdraw(po, salarySendId, Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()), ids); - - - List list = salarySendInfoMapper.listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).build()); - //需要发送工资的人 - - List sendList = list.stream().filter(e -> e.getSendStatus().equals(SalarySendStatusEnum.ALREADYSEND.getValue())).collect(Collectors.toList()); - int sendNum = sendList.size(); - int sendTotal = list.size(); - SalarySendPO salarySendNew = new SalarySendPO(); - try { - BeanUtils.copyProperties(salarySendNew, salarySend); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - salarySendNew.setSendNum(sendNum); - salarySendNew.setSendTotal(sendTotal); - salarySendNew.setLastSendTime(sendTime); - - mapper.updateById(salarySendNew); - - List needSendList = Lists.newArrayList(); - enableSendList.forEach(map -> { - sendList.forEach(item -> { - if (item.getId() == Long.valueOf(map.get("id").toString()).longValue()) { - needSendList.add(item); - } - }); - }); - - // 发送消息 - param.setTemplate(templatePO); - sendMessage(true, needSendList, param, salarySend); - - Map map = new HashMap<>(2); - map.put("sendNum", sendNum); - map.put("sendTotal", sendTotal); - - return map; +// return map; + return null; } /** @@ -919,6 +995,19 @@ public class SalarySendServiceImpl extends Service implements SalarySendService * 发送Em消息 */ private void sendPayRollEMMessage(SalarySendInfoPO po, SalaryTemplatePO template, Long employeeId) { + + + boolean canSendSms = MessageUtil.checkSendSMS(); + boolean canSendEmail = MessageUtil.checkSendEmail(); + +// try { +// MessageUtil.sendSMS(mobile, content); +// } catch (Exception e) { +// kqLog.info("SendSMS error.resourceId:" + resourceId + ">>>>>>mobile>>>>>>" + mobile); +// log.writeLog(e); +// } + + Long id = po.getId(); String background = template.getBackground(); String billTitle = getBillTitle(template.getTheme(), po.getSalaryMonth(), employeeId); @@ -1304,7 +1393,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService Long salarySendId = queryParam.getSalarySendId(); // 获取薪资核算ID SalarySendPO salarySendPO = getById(salarySendId); - if(Objects.isNull(salarySendPO)){ + if (Objects.isNull(salarySendPO)) { throw new SalaryRunTimeException("工资发放记录不存在或已被删除"); } return getSalaryAcctResultService(user).sumRow(SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build()); diff --git a/src/com/engine/salary/service/impl/SalarySobDefaultEmpFieldServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobDefaultEmpFieldServiceImpl.java index 2355e2b87..aa63617a8 100644 --- a/src/com/engine/salary/service/impl/SalarySobDefaultEmpFieldServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobDefaultEmpFieldServiceImpl.java @@ -12,7 +12,7 @@ import com.engine.salary.service.SalarySobDefaultEmpFieldService; **/ public class SalarySobDefaultEmpFieldServiceImpl implements SalarySobDefaultEmpFieldService { -// @Autowired +// // private SalarySobDefaultEmpFieldMapper salarySobDefaultEmpFieldMapper; // // @Override diff --git a/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java index 068b06a52..0a2d9b792 100644 --- a/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SysSalaryItemServiceImpl.java @@ -37,7 +37,7 @@ public class SysSalaryItemServiceImpl extends Service implements SysSalaryItemSe private SysSalaryItemMapper getSysSalaryItemMapper() { return MapperProxyFactory.getProxy(SysSalaryItemMapper.class); } -// @Autowired +// // private LoggerTemplate salaryItemLoggerTemplate; @Override diff --git a/src/com/engine/salary/wrapper/SalaryArchiveTaxAgentWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveTaxAgentWrapper.java index 69b7a509f..44146d169 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveTaxAgentWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveTaxAgentWrapper.java @@ -47,7 +47,7 @@ public class SalaryArchiveTaxAgentWrapper extends Service { // // private SalaryBatchService salaryBatchService; -// @Autowired +// // private ExecutorService taskExecutor; /** diff --git a/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java b/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java index 45f0f1cea..02d5d4412 100644 --- a/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java @@ -40,7 +40,7 @@ public class SalaryTemplateWrapper extends Service { private SalaryTemplateService getSalaryTemplateService(User user) { return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user); } -// @RpcReference +// // private MailBaseService mailBaseService; private SalarySobService getSalarySobService(User user) { From ccec800a75ed33048aafa360c9a4227da9ff3e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 8 May 2023 11:21:09 +0800 Subject: [PATCH 073/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/constant/des.json | 599 ------------------ .../engine/salary/formlua/core/QlExpress.java | 20 +- 2 files changed, 10 insertions(+), 609 deletions(-) diff --git a/src/com/engine/salary/constant/des.json b/src/com/engine/salary/constant/des.json index 047235f93..fe3b8ce5f 100644 --- a/src/com/engine/salary/constant/des.json +++ b/src/com/engine/salary/constant/des.json @@ -454,258 +454,6 @@ "infinite": false } ] - }, - { - "name": "ISJSON", - "chineseName": "JSON字符格式化", - "description": "判断是不是JSON字符串,参数可以是数组,也可以是字符串,参数为数组时数组中必须只包含一个字符串。", - "example": "假设文本控件={a:123},ISJSON({文本控件})", - "result": "true", - "paramDescs": [ - "*变量或常量*(必选)" - ], - "formatString": "ISJSON({变量})", - "paramArray": [], - "paramData": [], - "returnType": "boolean", - "type": "function", - "validForm": "current_data", - "paramCount": 1, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - } - ] - }, - { - "name": "GETJSONVALUE", - "chineseName": "JSON字符取值", - "description": "获取JSON值。第一个参数为json,可以是数组也可以是对象;第二个参数为json对象的键值,返回键值对应的值,json为数组时返回的多个值以逗号分隔", - "example": "假设文本控件={a:123},GetJSONValue('{文本控件}','a')", - "result": "123", - "paramDescs": [ - "*变量或常量*(必选)", - "*变量或常量*(必选)" - ], - "formatString": "GETJSONVALUE({变量1},变量2)", - "paramArray": [], - "paramData": [], - "returnType": "string", - "type": "function", - "validForm": "current_data", - "paramCount": 2, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - }, - { - "dataType": "string", - "must": true, - "infinite": false - } - ] - }, - { - "name": "ISINT", - "chineseName": "字符内容是否是整数", - "description": "判断字符内容是否是整数", - "example": "ISINT( 2.123 )", - "result": "false", - "paramDescs": [ - "*字符*(必选)" - ], - "formatString": "ISINT({字符})", - "paramArray": [], - "paramData": [], - "returnType": "boolean", - "type": "function", - "validForm": "current_data", - "paramCount": 1, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - } - ] - }, - { - "name": "ISNUMBER", - "chineseName": "字符内容是否是数字", - "description": "判断字符内容是否是数字。", - "example": "ISNUMBER('2.123')", - "result": "true", - "paramDescs": [ - "*字符*(必选)" - ], - "formatString": "ISNUMBER({字符})", - "paramArray": [], - "paramData": [], - "returnType": "boolean", - "type": "function", - "validForm": "current_data", - "paramCount": 1, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - } - ] - }, - { - "name": "SPLIT", - "chineseName": "字符分割", - "description": "字符分割函数,将字符以指定字符为依据分割字符为一组字符", - "example": "假设文本控件=ABC#DEF,SPLIT('{文本控件}','#')", - "result": "[ABC,DEF]", - "paramDescs": [ - "*字符*(必选)", - "*分割符*(必选)" - ], - "formatString": "SPLIT({字符},{字符})", - "paramArray": [], - "paramData": [], - "returnType": "string", - "type": "function", - "validForm": "current_data", - "paramCount": 2, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - }, - { - "dataType": "string", - "must": true, - "infinite": false - } - ] - }, - { - "name": "LOWER", - "chineseName": "字符转小写", - "description": "将字符中的字母转为小写。", - "example": "LOWER('ABC')", - "result": "abc", - "paramDescs": [ - "*字符*(必选)" - ], - "formatString": "LOWER({字符})", - "paramArray": [], - "paramData": [], - "returnType": "String", - "type": "function", - "validForm": "current_data", - "paramCount": 1, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - } - ] - }, - { - "name": "UPPER", - "chineseName": "字符转大写", - "description": "将字符中的字母转为大写。", - "example": "UPPER('abc')", - "result": "ABC", - "paramDescs": [ - "*字符*(必选)" - ], - "formatString": "UPPER({字符})", - "paramArray": [], - "paramData": [], - "returnType": "String", - "type": "function", - "validForm": "current_data", - "paramCount": 1, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - } - ] - }, - { - "name": "TEXTBEFORE", - "chineseName": "截取N个分割符之前的字符", - "description": "截取N个分割符之前的字符", - "example": "TEXTBEFORE('abc-12','-',1)", - "result": "abc", - "paramDescs": [ - "*字符*(必选)", - "*字符*(必选)", - "*变量或常量*(必选)" - ], - "formatString": "TEXTBEFORE({目标文本},{分隔符},{索引下标})", - "paramArray": [], - "paramData": [], - "returnType": "String", - "type": "function", - "validForm": "current_data", - "paramCount": 3, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - }, - { - "dataType": "string", - "must": true, - "infinite": false - }, - { - "dataType": "number", - "must": true, - "infinite": false - } - ] - }, - { - "name": "TEXTAFTER", - "chineseName": "截取N个分隔符之后的字符", - "description": "截取N个分隔符之后的字符", - "example": "TEXTAFTER('abc-12','-',1)", - "result": "12", - "paramDescs": [ - "*字符*(必选)", - "*字符*(必选)", - "*变量或常量*(必选)" - ], - "formatString": "TEXTAFTER({目标文本},{分隔符},{索引下标})", - "paramArray": [], - "paramData": [], - "returnType": "String", - "type": "function", - "validForm": "current_data", - "paramCount": 3, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - }, - { - "dataType": "string", - "must": true, - "infinite": false - }, - { - "dataType": "number", - "must": true, - "infinite": false - } - ] } ], "dataType": "char", @@ -1232,159 +980,6 @@ "infinite": true } ] - }, - { - "name": "COMPAREDATE", - "chineseName": "返回两个日期指定时间的差值", - "description": "日期比较,返回两个日期指定时间域的差值。可比较的时间域包括'Y'-比较年;'M'-比较月;'D'-比较日;'H'-比较小时;'I'-比较分钟;'S'-比较秒。", - "example": "假设 日期1=2022-04-03、日期2=2022-04-04,COMPAREDATE({日期1},{日期2},'D')", - "result": "1", - "paramDescs": [ - "*日期1*(必选)", - "*日期2*(必选)", - "*比较类型*(可选)" - ], - "formatString": "COMPAREDATE(日期1,日期2,[比较类型])", - "paramArray": [], - "paramData": [], - "returnType": "date", - "type": "function", - "validForm": "current_data", - "paramCount": 3, - "paramStatuses": [ - { - "dataType": "date", - "must": true, - "infinite": false - }, - { - "dataType": "date", - "must": true, - "infinite": false - }, - { - "dataType": "string", - "must": true, - "infinite": false - } - ] - }, - { - "name": "TIMESTAMPTODATE", - "chineseName": "返回时间戳转换后的日期", - "description": "将时间戳按指定格式转换成日期。", - "example": "TIMESTAMPTODATE('1671172579', 'yyyy-MM-dd HH:mm:ss')", - "result": "2022-12-16 14:36:19", - "paramDescs": [ - "*时间戳*(必选)", - "*日期格式*(可选,默认yyyy-MM-dd HH:mm:ss)" - ], - "formatString": "TIMESTAMPTODATE(时间戳,日期格式)", - "paramArray": [], - "paramData": [], - "returnType": "string", - "type": "function", - "validForm": "current_data", - "paramCount": 2, - "paramStatuses": [ - { - "dataType": "date", - "must": true, - "infinite": false - }, - { - "dataType": "string", - "must": false, - "infinite": false - } - ] - }, - { - "name": "DATETOTIMESTAMP", - "chineseName": "返回日期转换后的时间戳", - "description": "将日期转换成时间戳。", - "example": "DATETOTIMESTAMP('2022-12-16 14:36:19'", - "result": "'1671172579'", - "paramDescs": [ - "*日期*(必选)" - ], - "formatString": "DATETOTIMESTAMP(日期)", - "paramArray": [], - "paramData": [], - "returnType": "string", - "type": "function", - "validForm": "current_data", - "paramCount": 1, - "paramStatuses": [ - { - "dataType": "date", - "must": true, - "infinite": false - } - ] - }, - { - "name": "DATE", - "chineseName": "拼接日期字符串", - "description": "拼接日期", - "example": "DATE('2022','12','16')", - "result": "'2022-12-16'", - "paramDescs": [ - "*日期字符*(必选)" - ], - "formatString": "DATE({年},{月},{日})", - "paramArray": [], - "paramData": [], - "returnType": "string", - "type": "function", - "validForm": "current_data", - "paramCount": 3, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - }, - { - "dataType": "string", - "must": true, - "infinite": false - }, - { - "dataType": "string", - "must": true, - "infinite": false - } - ] - }, - { - "name": "DAYS", - "chineseName": "计算两个日期自建的间隔天数", - "description": "计算两个日期的间隔天数", - "example": "DAYS('2022-12-16','2022-12-18')", - "result": "2", - "paramDescs": [ - "*日期字符*(必选)" - ], - "formatString": "DAYS({日期},{日期})", - "paramArray": [], - "paramData": [], - "returnType": "number", - "type": "function", - "validForm": "current_data", - "paramCount": 2, - "paramStatuses": [ - { - "dataType": "string", - "must": true, - "infinite": false - }, - { - "dataType": "string", - "must": true, - "infinite": false - } - ] } ], "dataType": "date", @@ -1698,62 +1293,6 @@ "infinite": false } ] - }, - { - "name": "SORT", - "chineseName": "条件排序", - "description": "根据排序条件进行字符和数字的排序,UP为升序,DOWN为降序。", - "example": "SORT(1,2,5,4,3,'UP')", - "result": "[1,2,3,4,5]", - "paramDescs": [ - "*字符或数字*(必选)", - "*字符或数字*(可选)", - "......", - "*排序方式*" - ], - "formatString": "SORT({变量1},{变量2},{变量3}...{排序方式})", - "paramArray": [], - "paramData": [], - "returnType": "all", - "type": "function", - "validForm": "current_data", - "paramCount": -1, - "paramStatuses": [ - { - "dataType": "array", - "must": true, - "infinite": false - }, - { - "dataType": "number", - "must": true, - "infinite": false - } - ] - }, - { - "name": "IFERROR", - "chineseName": "异常处理", - "description": "异常处理函数", - "example": "IFERROR(10/0,'0')", - "result": "0", - "paramDescs": [ - "*公式内容*" - ], - "formatString": "IFERROR({变量},{变量})", - "paramArray": [], - "paramData": [], - "returnType": "all", - "type": "function", - "validForm": "current_data", - "paramCount": -1, - "paramStatuses": [ - { - "dataType": "all", - "must": true, - "infinite": false - } - ] } ], "dataType": "logic", @@ -1947,144 +1486,6 @@ "infinite": false } ] - }, - { - "name": "CALDTROW", - "chineseName": "明细逐行计算函数", - "description": "明细逐行计算", - "example": "假设:明细有金额1、金额2、金额3等三个控件,明细行数为2,第一行值分别为:5、6、10,第二行的值分别为:1、1、9。CALDTROW({金额3}==10,{金额1}+{金额2})", - "result": "当金额3等于10的时候运算加法,只有第一行的金额3等于10,明细第一行的金额3赋值为11", - "paramDescs": [ - "*字段*(必选)", - "*公式或字段*(必选)" - ], - "formatString": "CALDTROW({字段},{公式或字段})", - "paramArray": [], - "paramData": [], - "returnType": "all", - "type": "function", - "validForm": "current_data", - "paramCount": 2, - "paramStatuses": [ - { - "dataType": "boolean", - "must": true, - "infinite": false - }, - { - "dataType": "all", - "must": true, - "infinite": false - } - ] - }, - { - "name": "ABS", - "chineseName": "绝对值", - "description": "绝对值", - "example": "ABS(-9)", - "result": "9", - "paramDescs": [ - "*字段*(必选)" - ], - "formatString": "ABS({字段})", - "paramArray": [], - "paramData": [], - "returnType": "all", - "type": "function", - "validForm": "current_data", - "paramCount": 1, - "paramStatuses": [ - { - "dataType": "number", - "must": true, - "infinite": false - } - ] - }, - { - "name": "RANDOM", - "chineseName": "随机数生成", - "description": "随机数生成", - "example": "RANDOM(5,'NUM')", - "result": "26489", - "paramDescs": [ - "*数字*(必选)", - "*文本*(必选)[NUM(数字)、CHAR(字符)、FIX(字符与数字混合)]" - ], - "formatString": "RANDOM({随机数长度},{随机类型})", - "paramArray": [], - "paramData": [], - "returnType": "all", - "type": "function", - "validForm": "current_data", - "paramCount": 2, - "paramStatuses": [ - { - "dataType": "boolean", - "must": true, - "infinite": false - }, - { - "dataType": "all", - "must": true, - "infinite": false - } - ] - }, - { - "name": "POWER", - "chineseName": "N次方", - "description": "计算数值的N次方", - "example": "POWER(2, 2)
POWER(4, 1/2)", - "result": "4
2", - "paramDescs": [ - "*数字*(必选)", - "*数字*(必选,N次方的N)" - ], - "formatString": "POWER({数字}, {数字})", - "paramArray": [], - "paramData": [], - "returnType": "all", - "type": "function", - "validForm": "current_data", - "paramCount": 2, - "paramStatuses": [ - { - "dataType": "number", - "must": true, - "infinite": false - }, - { - "dataType": "number", - "must": true, - "infinite": false - } - ] - }, - { - "name": "SQRT", - "chineseName": "根号", - "description": "将数值开根号", - "example": "SQRT(4)", - "result": "2", - "paramDescs": [ - "*数字*(必选)" - ], - "formatString": "SQRT({数字})", - "paramArray": [], - "paramData": [], - "returnType": "all", - "type": "function", - "validForm": "current_data", - "paramCount": 1, - "paramStatuses": [ - { - "dataType": "number", - "must": true, - "infinite": false - } - ] } ], "dataType": "math", diff --git a/src/com/engine/salary/formlua/core/QlExpress.java b/src/com/engine/salary/formlua/core/QlExpress.java index 30ef2af57..91b3145ef 100644 --- a/src/com/engine/salary/formlua/core/QlExpress.java +++ b/src/com/engine/salary/formlua/core/QlExpress.java @@ -145,22 +145,25 @@ public class QlExpress { runner.replaceOperator("*", new WOperatorMulti("*")); runner.replaceOperator("/", new WOperatorDiv("/")); //逻辑函数 - runner.replaceOperator("IN", new InOperator("in")); runner.replaceOperator("IF", new InOperator("IF")); runner.addFunctionOfServiceMethod(FuncNames.AND.toString(), logicService, FuncNames.AND.getName(), new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.OR.toString(), logicService, FuncNames.OR.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.NOT.toString(), logicService, FuncNames.NOT.getName(), new Class[]{Object[].class}, ""); + runner.replaceOperator("IN", new InOperator("in")); runner.addFunctionOfServiceMethod(FuncNames.LIKE.toString(), logicService, FuncNames.LIKE.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.ISEMPTY.toString(), logicService, FuncNames.ISEMPTY.getName(), new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.TRUE.toString(), logicService, FuncNames.TRUE.getName(), new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.FALSE.toString(), logicService, FuncNames.FALSE.getName(), new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod(FuncNames.ISEMPTY.toString(), logicService, FuncNames.ISEMPTY.getName(), new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod(FuncNames.NOT.toString(), logicService, FuncNames.NOT.getName(), new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.IFS.toString(), logicService, FuncNames.IFS.getName(), new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod(FuncNames.FIND.toString(), logicService, FuncNames.FIND.getName(), new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.SWITCH.toString(), logicService, FuncNames.SWITCH.getName(), new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod(FuncNames.FIND.toString(), logicService, FuncNames.FIND.getName(), new Class[]{Object[].class}, ""); //日期函数 - runner.addFunctionOfServiceMethod("DATEDIFF", dateTimeService, "dateDiff", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("TODAY", dateTimeService, "today", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("NOW", dateTimeService, "now", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("DATEADD", dateTimeService, "dateAdd", new Class[]{Object[].class}, errorInfo); + runner.addFunctionOfServiceMethod("DATEDIFF", dateTimeService, "dateDiff", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("DATEFORMAT", dateTimeService, "dateFormat", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("YEAR", dateTimeService, "year", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("MONTH", dateTimeService, "month", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("DAY", dateTimeService, "day", new Class[]{Object[].class}, ""); @@ -169,10 +172,6 @@ public class QlExpress { runner.addFunctionOfServiceMethod("SECOND", dateTimeService, "seconds", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("WEEKNUM", dateTimeService, "weekNum", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("WEEKDAY", dateTimeService, "weekDay", new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod("NOW", dateTimeService, "now", new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod("TODAY", dateTimeService, "today", new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod("DATEFORMAT", dateTimeService, "dateFormat", new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod("DAYOFMONTH", dateTimeService, "dayOfMonth", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("EOMONTH", dateTimeService, "eoMonth", new Class[]{Object[].class}, ""); // runner.addFunctionOfServiceMethod("NETWORKDAYSPI", dateTimeService, "workdayIntl", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("CURRYEAR", dateTimeService, "currYear", new Class[]{Object[].class}, ""); @@ -184,6 +183,7 @@ public class QlExpress { runner.addFunctionOfServiceMethod("CURRSECOND", dateTimeService, "currSecond", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("MAXDATE", dateTimeService, "maxDate", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("MINDATE", dateTimeService, "minDate", new Class[]{Object[].class}, ""); +// runner.addFunctionOfServiceMethod("DAYOFMONTH", dateTimeService, "dayOfMonth", new Class[]{Object[].class}, ""); //聚合函数 // runner.addFunctionOfServiceMethod("COUNT", aggregationFunc, "counts", new Class[]{Object[].class}, "COUNT参数错误"); @@ -211,8 +211,8 @@ public class QlExpress { //数学函数 runner.addFunctionOfServiceMethod("ROUNDUP", mathFuncsService, "roundUp", new Class[]{Object[].class}, ""); - runner.addFunctionOfServiceMethod("ROUNDDOWN", mathFuncsService, "roundDown", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("ROUND", mathFuncsService, "round", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("ROUNDDOWN", mathFuncsService, "roundDown", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.AGGREGATION.toString(), mathFuncsService, FuncNames.AGGREGATION.getName(), new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.MOD.toString(), mathFuncsService, FuncNames.MOD.getName(), new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.TRUNC.toString(), mathFuncsService, FuncNames.TRUNC.getName(), new Class[]{Object.class, Object.class}, ""); From 197506b72b3a495e89ccf159839c4bac59d1cfae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 8 May 2023 14:12:33 +0800 Subject: [PATCH 074/245] =?UTF-8?q?=E9=80=82=E9=85=8Dif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/formlua/core/QlExpress.java | 3 ++- src/com/engine/salary/formlua/core/QlExpressTest.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/formlua/core/QlExpress.java b/src/com/engine/salary/formlua/core/QlExpress.java index 91b3145ef..8086f0000 100644 --- a/src/com/engine/salary/formlua/core/QlExpress.java +++ b/src/com/engine/salary/formlua/core/QlExpress.java @@ -9,6 +9,7 @@ import com.engine.salary.formlua.func.date.DateTimeServiceImpl; import com.engine.salary.formlua.func.finance.FinanceService; import com.engine.salary.formlua.func.finance.FinanceServiceImpl; import com.engine.salary.formlua.func.find.FindFuncsService; +import com.engine.salary.formlua.func.logic.IfOperator; import com.engine.salary.formlua.func.logic.LogicService; import com.engine.salary.formlua.func.logic.LogicServiceImpl; import com.engine.salary.formlua.func.math.MathFuncsService; @@ -145,7 +146,7 @@ public class QlExpress { runner.replaceOperator("*", new WOperatorMulti("*")); runner.replaceOperator("/", new WOperatorDiv("/")); //逻辑函数 - runner.replaceOperator("IF", new InOperator("IF")); + runner.replaceOperator("IF", new IfOperator("IF")); runner.addFunctionOfServiceMethod(FuncNames.AND.toString(), logicService, FuncNames.AND.getName(), new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.OR.toString(), logicService, FuncNames.OR.getName(), new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod(FuncNames.NOT.toString(), logicService, FuncNames.NOT.getName(), new Class[]{Object[].class}, ""); diff --git a/src/com/engine/salary/formlua/core/QlExpressTest.java b/src/com/engine/salary/formlua/core/QlExpressTest.java index d981054d6..25af7e339 100644 --- a/src/com/engine/salary/formlua/core/QlExpressTest.java +++ b/src/com/engine/salary/formlua/core/QlExpressTest.java @@ -16,7 +16,7 @@ public class QlExpressTest { context.put("a", 1); context.put("b", 2); context.put("c", 3); - String formula = "AGGREGATION(a+b,0,'AVG')"; + String formula = "IF(1=1,1,2)"; Object execute = express.execute(formula, context); if(execute instanceof JSONObject){ From bbba7f314d04c986c076f636a6d073fc5ec5774d Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 8 May 2023 17:58:17 +0800 Subject: [PATCH 075/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=EF=BC=8C=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E3=80=81=E6=A0=B8=E7=AE=97=E6=98=8E=E7=BB=86=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=91=98=E5=B7=A5=E7=8A=B6=E6=80=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 2 +- .../engine/salary/service/impl/RecordsBuildServiceImpl.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index 82beab3a3..5b2d3bb85 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -1255,7 +1255,7 @@ public class SIArchivesBiz { map.put("siSchemeId", item.getSiSchemeId()); map.put("fundSchemeId", item.getFundSchemeId()); map.put("otherSchemeId", item.getOtherSchemeId()); - map.put("status", item.getUserStatus() != null ? UserStatusEnum.values()[item.getUserStatus()].getDefaultLabel() : ""); + map.put("status", item.getUserStatus() != null ? UserStatusEnum.getDefaultLabelByValue(item.getUserStatus()) : ""); map.put("baseInfo", item.getBaseInfoId()); map.put("paymentOrganization", item.getPaymentOrganization()); if (socialItem != null) { diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index d6cc2e8f9..bdea7d744 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -15,7 +15,6 @@ import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.siaccount.BillStatusEnum; import com.engine.salary.enums.siaccount.ResourceFromEnum; import com.engine.salary.mapper.datacollection.EmployMapper; -import com.engine.salary.mapper.siaccount.InsuranceAccountInspectMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.RecordsBuildService; @@ -82,7 +81,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("department", simpleEmployee.getDepartmentName()); record.put("supplementaryMonth", item.getSupplementaryMonth()); record.put("mobile", simpleEmployee.getMobile()); - record.put("employeeStatus", simpleEmployee.getStatus() != null ? UserStatusEnum.values()[Integer.parseInt(simpleEmployee.getStatus())].getDefaultLabel() : ""); + record.put("employeeStatus", simpleEmployee.getStatus() != null ? UserStatusEnum.getDefaultLabelByValue(Integer.parseInt(simpleEmployee.getStatus())) : ""); ResourceFromEnum from = SalaryEnumUtil.enumMatchByValue(item.getResourceFrom(), ResourceFromEnum.values(), ResourceFromEnum.class); record.put("sourceFrom", SalaryI18nUtil.getI18nLabel(from.getLabelId(), from.getDefaultLabel())); record.put("socialPayOrg", paymentMap.get(item.getSocialPayOrg()) == null ? "" : paymentMap.get(item.getSocialPayOrg()).getName()); From 797d5095ebf250d7601bb3789f42a79887906d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 9 May 2023 10:43:51 +0800 Subject: [PATCH 076/245] =?UTF-8?q?=E9=80=82=E9=85=8Dif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsEmployeeController.java | 8 + .../entity/bo/SalaryStatisticsEmployeeBO.java | 26 +- .../dto/SalaryStatisticsEmployeeListDTO.java | 8 + .../param/SalaryAcctEmployeeQueryParam.java | 4 +- ...aryStatisticsEmployeeDetailQueryParam.java | 4 +- .../SalaryStatisticsEmployeeQueryParam.java | 4 +- .../SalaryStatisticsEmployeeService.java | 54 +++ .../SalaryStatisticsEmployeeServiceImpl.java | 348 ++++++++++++++++++ .../SalaryStatisticsEmployeeController.java | 77 ++++ .../SalaryStatisticsEmployeeWrapper.java | 129 +++++++ .../engine/salary/util/SalaryDateUtil.java | 5 + 11 files changed, 646 insertions(+), 21 deletions(-) create mode 100644 src/com/api/salary/web/SalaryStatisticsEmployeeController.java create mode 100644 src/com/engine/salary/report/service/SalaryStatisticsEmployeeService.java create mode 100644 src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java create mode 100644 src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java create mode 100644 src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java diff --git a/src/com/api/salary/web/SalaryStatisticsEmployeeController.java b/src/com/api/salary/web/SalaryStatisticsEmployeeController.java new file mode 100644 index 000000000..92902b46f --- /dev/null +++ b/src/com/api/salary/web/SalaryStatisticsEmployeeController.java @@ -0,0 +1,8 @@ +package com.api.salary.web; + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/report/statistics/employee") +public class SalaryStatisticsEmployeeController extends com.engine.salary.report.web.SalaryStatisticsEmployeeController{ + +} diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java index 0067e1cff..470c0690e 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java @@ -1,14 +1,10 @@ package com.engine.salary.report.entity.bo; +import com.engine.salary.util.SalaryDateUtil; import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; -import java.time.YearMonth; -import java.time.format.DateTimeFormatter; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -23,12 +19,12 @@ public class SalaryStatisticsEmployeeBO { * @param salaryMonth * @return */ - public static Set getSalaryMonths(Integer year, List salaryMonth) { + public static Set getSalaryMonths(Integer year, List salaryMonth) { Set salaryMonths = Sets.newHashSet(); // 年份参数 if (Objects.nonNull(year)) { List months = Arrays.asList("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"); - for (int i=0;i 2 ? salaryMonth.subList(0, 1) : salaryMonth); if (salaryMonth.size() == 2) { - if (salaryMonth.get(0).isAfter(salaryMonth.get(1))) { + if (salaryMonth.get(0).after(salaryMonth.get(1))) { salaryMonths.clear(); salaryMonths.add("2000-01"); } else { - YearMonth startYearMonth = salaryMonth.get(0); - YearMonth endYearMonth = salaryMonth.get(1); + Date startYearMonth = salaryMonth.get(0); + Date endYearMonth = salaryMonth.get(1); Set yearMonths = Sets.newHashSet(); - while (!startYearMonth.isAfter(endYearMonth)) { - yearMonths.add(startYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"))); - startYearMonth = startYearMonth.plusMonths(1); + while (!startYearMonth.after(endYearMonth)) { + yearMonths.add(SalaryDateUtil.getFormatYearMonth(startYearMonth)); + startYearMonth = SalaryDateUtil.plusMonths(startYearMonth, 1); } if (CollectionUtils.isNotEmpty(salaryMonths)) { Set finalSalaryMonths = salaryMonths; @@ -56,7 +52,7 @@ public class SalaryStatisticsEmployeeBO { } } } else { - String singMonth = salaryMonth.get(0).format(DateTimeFormatter.ofPattern("yyyy-MM")); + String singMonth = SalaryDateUtil.getFormatYearMonth(salaryMonth.get(0)); salaryMonths.add(CollectionUtils.isNotEmpty(salaryMonths) ? (salaryMonths.contains(singMonth) ? singMonth : "2000-01") : singMonth); } } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java index 6c7e5ca80..791c01c30 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java @@ -1,5 +1,6 @@ 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; @@ -21,24 +22,31 @@ public class SalaryStatisticsEmployeeListDTO { private Long id; //姓名 + @TableTitle(title = "姓名", dataIndex = "name", key = "name") private String name; //分部 + @TableTitle(title = "分部", dataIndex = "subCompany", key = "subCompany") private String subCompany; //部门 + @TableTitle(title = "部门", dataIndex = "department", key = "department") private String department; //岗位 + @TableTitle(title = "岗位", dataIndex = "position", key = "position") private String position; // 员工状态 + @TableTitle(title = "员工状态", dataIndex = "status", key = "status") private String status; //工号 + @TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum") private String jobNum; //证件号码 + @TableTitle(title = "证件号码", dataIndex = "idNo", key = "idNo") private String idNo; //人员类型 diff --git a/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java index e3f721b2c..fb4131bb4 100644 --- a/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java @@ -5,7 +5,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.YearMonth; +import java.util.Date; import java.util.List; /** @@ -30,5 +30,5 @@ public class SalaryAcctEmployeeQueryParam { private Integer year; //薪资所属月") - private List salaryMonth; + private List salaryMonth; } \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java index 6d8937669..6bb78d7d3 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java @@ -5,7 +5,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.YearMonth; +import java.util.Date; import java.util.List; /** @@ -39,5 +39,5 @@ public class SalaryStatisticsEmployeeDetailQueryParam extends BaseQueryParam { private Integer year; //薪资所属月 - private List salaryMonth; + private List salaryMonth; } \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java index ff1afbdb2..98e3900e5 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java @@ -6,7 +6,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.YearMonth; +import java.util.Date; import java.util.List; /** @@ -31,7 +31,7 @@ public class SalaryStatisticsEmployeeQueryParam extends BaseQueryParam { private Integer year; //薪资所属月") - private List salaryMonth; + private List salaryMonth; //人员类型,ORGANIZATION:内部人员 |EXT_EMPLOYEE:外部人员") private EmployeeTypeEnum employeeType; diff --git a/src/com/engine/salary/report/service/SalaryStatisticsEmployeeService.java b/src/com/engine/salary/report/service/SalaryStatisticsEmployeeService.java new file mode 100644 index 000000000..23b52f4b3 --- /dev/null +++ b/src/com/engine/salary/report/service/SalaryStatisticsEmployeeService.java @@ -0,0 +1,54 @@ +package com.engine.salary.report.service; + +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeDetailResultDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeDetailQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeQueryParam; +import com.engine.salary.util.page.PageInfo; + +import java.util.List; +import java.util.Map; + +/** + * 薪酬统计员工明细 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface SalaryStatisticsEmployeeService { + + /** + * 获取员工统计分页列表 + * + * @param queryParam + * @return + */ + PageInfo listPage(SalaryStatisticsEmployeeQueryParam queryParam); + + /** + * 获取员工明细结果数据 + * + * @param queryParam + * @return + */ + SalaryStatisticsEmployeeDetailResultDTO getDetailSalaryAcctResult(SalaryStatisticsEmployeeDetailQueryParam queryParam); + + /** + * 获取员工核算详情数据分页列表 + * + * @param salaryStatisticsEmployeeDetailResult + * @param queryParam + * @return + */ + List> listDetailPage(SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult, SalaryStatisticsEmployeeDetailQueryParam queryParam); + + /** + * 导出员工详情列表 + * + * @param map + * @param queryParam + */ +// void exportDetailList(Map map, SalaryStatisticsEmployeeDetailQueryParam queryParam); +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java new file mode 100644 index 000000000..11760702b --- /dev/null +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -0,0 +1,348 @@ +package com.engine.salary.report.service.impl; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper; +import com.engine.salary.report.common.constant.SalaryConstant; +import com.engine.salary.report.entity.bo.SalaryStatisticsEmployeeBO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeDetailResultDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeDetailQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeQueryParam; +import com.engine.salary.report.service.SalaryStatisticsEmployeeService; +import com.engine.salary.service.*; +import com.engine.salary.service.impl.*; +import com.engine.salary.util.SalaryAssert; +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 com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 薪酬统计员工明细 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class SalaryStatisticsEmployeeServiceImpl extends Service implements SalaryStatisticsEmployeeService { + + private SalaryAcctEmployeeMapper getSalaryAcctEmployeeMapper() { + return MapperProxyFactory.getProxy(SalaryAcctEmployeeMapper.class); + } + + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + +// private ExtEmployeeMapper extEmployeeMapper; + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + @Override + public PageInfo listPage(SalaryStatisticsEmployeeQueryParam queryParam) { + List list = Collections.emptyList(); + PageInfo page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list); + + // 1.分权处理, 首先获取个税扣缴义务人参数 + Collection taxAgentViews = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); + List taxAgentIds = Objects.isNull(taxAgentViews) ? Lists.newArrayList() : taxAgentViews.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(taxAgentIds)) { + return page; + } + + // 2.年月参数处理,注意:薪资所属月居然是用字符串存储的,无法通过sql between处理 + Set salaryMonths = SalaryStatisticsEmployeeBO.getSalaryMonths(queryParam.getYear(), queryParam.getSalaryMonth()) + .stream() + .map(SalaryDateUtil::dateStrToLocalYearMonth) + .collect(Collectors.toSet()); + + // 查询薪资核算人员 + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByTaxAgentAndSalaryMonth(taxAgentIds, salaryMonths); + if (CollectionUtils.isEmpty(salaryAcctEmployeeList)) { + return page; + } +// if (queryParam.getEmployeeType() != null) { +// salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(s -> queryParam.getEmployeeType().getValue().equals(s.getEmployeeType())).collect(Collectors.toList()); +// } + +// // 外部人员id +// Set extEmployeeIds = Sets.newHashSet(); + // 内部人员id + Set innerEmployeeIds = Sets.newHashSet(); + for (SalaryAcctEmployeePO sae : salaryAcctEmployeeList) { +// if (EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(sae.getEmployeeType())) { +// extEmployeeIds.add(sae.getEmployeeId()); +// } else if (EmployeeTypeEnum.ORGANIZATION.getValue().equals(sae.getEmployeeType())) { +// innerEmployeeIds.add(sae.getEmployeeId()); +// } + innerEmployeeIds.add(sae.getEmployeeId()); + } + // 3.关键字搜索参数 + if (StringUtils.isNotEmpty(queryParam.getKeyword())) { +// if (CollectionUtils.isNotEmpty(extEmployeeIds)) { +// // 查询外部人员 +// List extEmployeeList = new LambdaQueryChainWrapper<>(extEmployeeMapper) +// .eq(ExtEmployeePO::getTenantKey, tenantKey) +// .eq(ExtEmployeePO::getDeleteType, 0) +// .list(); +// Set finalExtEmployeeIds = extEmployeeIds; +// extEmployeeIds = extEmployeeList.stream() +// .filter(e -> finalExtEmployeeIds.contains(e.getId()) && (e.getUsername().contains(queryParam.getKeyword()) || (StringUtils.isNotEmpty(e.getCardNum()) && e.getCardNum().contains(queryParam.getKeyword())))) +// .map(ExtEmployeePO::getId) +// .collect(Collectors.toSet()); +// } + if (CollectionUtils.isNotEmpty(innerEmployeeIds)) { + List salaryEmployees = getSalaryEmployeeService(user).listAll(); + Set finalInnerEmployeeIds = innerEmployeeIds; + innerEmployeeIds = salaryEmployees.stream() + .filter(e -> finalInnerEmployeeIds.contains(e.getEmployeeId()) && (e.getUsername().contains(queryParam.getKeyword()) || (StringUtils.isNotEmpty(e.getWorkcode()) && e.getWorkcode().contains(queryParam.getKeyword())))) + .map(DataCollectionEmployee::getEmployeeId) + .collect(Collectors.toSet()); +// Map idNoMap = idNoMapByEmployeeIds(finalInnerEmployeeIds); +// for (Long k : idNoMap.keySet()) { +// if (idNoMap.get(k) != null && idNoMap.get(k).contains(queryParam.getKeyword())) { +// innerEmployeeIds.addAll(idNoMap.keySet()); +// } +// } + } + } + + List innerEmployeeIdList = innerEmployeeIds.stream().sorted(Comparator.comparing(e -> e)).collect(Collectors.toList()); +// List extEmployeeIdList = extEmployeeIds.stream().sorted(Comparator.comparing(e -> e)).collect(Collectors.toList()); + // 排序,内部员工优先 + list = innerEmployeeIdList.stream().map(e -> SalaryStatisticsEmployeeListDTO.builder() + .id(e) +// .employeeType(EmployeeTypeEnum.ORGANIZATION.getValue()) + .build()).collect(Collectors.toList()); +// list.addAll(extEmployeeIdList.stream().map(e -> SalaryStatisticsEmployeeListDTO.builder() +// .id(e) +// .employeeType(EmployeeTypeEnum.EXT_EMPLOYEE.getValue()) +// .build()).collect(Collectors.toList())); + + // 第一页数据显示处理 + page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, SalaryStatisticsEmployeeListDTO.class); + List salaryStatisticsEmployeeListDTOs = page.getList(); + List employeeIds = salaryStatisticsEmployeeListDTOs.stream().map(SalaryStatisticsEmployeeListDTO::getId).collect(Collectors.toList()); + // 查询外部人员 +// List extEmployeeList = CollectionUtils.isEmpty(extEmployeeIdList) ? Lists.newArrayList() : new LambdaQueryChainWrapper<>(extEmployeeMapper) +// .eq(ExtEmployeePO::getTenantKey, tenantKey) +// .eq(ExtEmployeePO::getDeleteType, 0) +// .in(ExtEmployeePO::getId, extEmployeeIdList) +// .list(); +// Map extEmployeeMap = extEmployeeList.stream().collect(Collectors.toMap(ExtEmployeePO::getId, v -> v)); + List simpleEmployeeList = getSalaryEmployeeService(user).getEmployeeByIds(employeeIds); + Map innerEmployeeMap = simpleEmployeeList.stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, v -> v)); + salaryStatisticsEmployeeListDTOs.forEach(e -> { + DataCollectionEmployee simpleEmployee = innerEmployeeMap.get(e.getId()); + e.setName(Objects.isNull(simpleEmployee) ? "" : simpleEmployee.getUsername()); + e.setSubCompany(simpleEmployee.getSubcompanyName()); + e.setDepartment(simpleEmployee.getDepartmentName()); + e.setPosition(simpleEmployee.getJobtitleName()); + e.setStatus(simpleEmployee.getStatus()); + e.setJobNum(simpleEmployee.getWorkcode()); + e.setIdNo(simpleEmployee.getIdNo()); + }); + page.setList(salaryStatisticsEmployeeListDTOs); + return page; + } + + + @Override + public SalaryStatisticsEmployeeDetailResultDTO getDetailSalaryAcctResult(SalaryStatisticsEmployeeDetailQueryParam queryParam) { + SalaryAssert.notNull(queryParam.getEmployeeId(), SalaryI18nUtil.getI18nLabel(163974, "人员id不能为空")); + + // 薪资所属月参数,如果已经有年的就取交集 + Set salaryMonths = SalaryStatisticsEmployeeBO.getSalaryMonths(queryParam.getYear(), queryParam.getSalaryMonth()).stream().map(SalaryDateUtil::dateStrToLocalYearMonth).collect(Collectors.toSet()); + + // 1.获取该员工所有核算人员数据 + SalaryAcctEmployeePO build = SalaryAcctEmployeePO.builder().employeeId(queryParam.getEmployeeId()).build(); + if (CollectionUtils.isNotEmpty(queryParam.getIds())) { + build.setIds(queryParam.getIds()); + } + if (CollectionUtils.isNotEmpty(salaryMonths)) { + build.setSalaryMonths(salaryMonths); + } + if (Objects.nonNull(queryParam.getTaxAgentId())) { + build.setTaxAgentId(queryParam.getTaxAgentId()); + } + List salaryAcctEmployees = getSalaryAcctEmployeeMapper().listSome(build); + salaryAcctEmployees = salaryAcctEmployees.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getSalaryMonth)).collect(Collectors.toList()); + Collections.reverse(salaryAcctEmployees); + + // 2.获取核算结果数据 + Set salaryAcctEmployeeIds = salaryAcctEmployees.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toSet()); + List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + + // 3.获取薪资项目 + Map resultMap = Maps.newHashMap(); + salaryAcctResultValues.forEach(sv -> { + resultMap.put(sv.getSalaryItemId() + "", sv.getResultValue()); + }); + List salaryItemIds = resultMap.keySet().stream().map(Long::valueOf).collect(Collectors.toList()); + List salaryItemList = CollectionUtils.isEmpty(salaryItemIds) ? Lists.newArrayList() : getSalaryItemService(user).listByIds(salaryItemIds); + + return SalaryStatisticsEmployeeDetailResultDTO.builder() + .salaryAcctEmployeeList(salaryAcctEmployees) + .salaryAcctResultValueList(salaryAcctResultValues) + .salaryItemList(salaryItemList) + .build(); + } + + @Override + public List> listDetailPage(SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult, SalaryStatisticsEmployeeDetailQueryParam queryParam) { + + List taxAgentList = getTaxAgentService(user).listAll(); + Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); + + Map> acctResultValueList = SalaryEntityUtil.group2Map(salaryStatisticsEmployeeDetailResult.getSalaryAcctResultValueList(), SalaryAcctResultPO::getSalaryAcctEmpId); + Map> acctResultValueMap = new HashMap<>(); + acctResultValueList.forEach((k, v) -> { + Map map = new HashMap(); + v.forEach(l -> { + map.put(l.getSalaryItemId() + "", l.getResultValue()); + }); + acctResultValueMap.put(k, map); + }); + + + List> list = Lists.newArrayList(); + Map map; + for (SalaryAcctEmployeePO se : salaryStatisticsEmployeeDetailResult.getSalaryAcctEmployeeList()) { + map = Maps.newHashMap(); + Map resultValueMap = Optional.ofNullable(acctResultValueMap.get(se.getId())).orElse(Maps.newHashMap()); + Map finalMap = map; + resultValueMap.forEach((k, v) -> { + finalMap.put(k + SalaryConstant.DYNAMIC_SUFFIX, v); + }); + map.put("id", se.getId().toString()); + map.put("salaryMonth", se.getSalaryMonth()); + map.put("taxAgent", taxAgentMap.get(se.getTaxAgentId())); +// IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(Integer.parseInt(se.getIncomeCategory())); +// map.put("incomeCategory", Objects.isNull(incomeCategoryEnum) ? "" : SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel())); + list.add(map); + } + return list; + } + +// @Override +// public void exportDetailList(Map map, SalaryStatisticsEmployeeDetailQueryParam queryParam) { +// DataCollectionEmployee employee = getSalaryEmployeeService(user).getEmployeeById(queryParam.getEmployeeId()); +// // 获取核算数据 +// SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult; +// if (Objects.isNull(employee)) { +// salaryStatisticsEmployeeDetailResult = SalaryStatisticsEmployeeDetailResultDTO.builder() +// .salaryAcctEmployeeList(Lists.newArrayList()) +// .salaryAcctResultValueList(Lists.newArrayList()) +// .salaryItemList(Lists.newArrayList()) +// .build(); +// } else { +// salaryStatisticsEmployeeDetailResult = this.getDetailSalaryAcctResult(queryParam); +// } +// +// String nameI18n = (StringUtils.isEmpty(employee.getUsername()) ? "" : "[" + employee.getUsername() + "]") + SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 177855, "薪资明细表"); +// +// List sheetList = new ArrayList<>(); +// ExcelSheetData excelSheetData = new ExcelSheetData(); +// // 1.工作簿名称 +// excelSheetData.setSheetName(nameI18n); +// List headerList = Lists.newArrayList(); +// headerList.add(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 87614, "薪资所属月")); +// headerList.add(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86184, "个税扣缴义务人")); +// headerList.add(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 121908, "收入所得项目")); +// salaryStatisticsEmployeeDetailResult.getSalaryItemList().forEach(item -> headerList.add(item.getName())); +// // 2.表头 +// excelSheetData.setHeaders(Collections.singletonList(headerList.toArray(new String[]{}))); +// +// List taxAgentList = getTaxAgentService(user).listAll(tenantKey); +// Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); +// +// Map> acctResultValueMap = SalaryEntityUtil.convert2Map(salaryStatisticsEmployeeDetailResult.getSalaryAcctResultValueList(), SalaryAcctResultPO::getSalaryAcctEmployeeId, SalaryAcctResultPO::getResultValue); +// +// // 组装数据 +// List> rows = new ArrayList<>(); +// for (SalaryAcctEmployeePO se : salaryStatisticsEmployeeDetailResult.getSalaryAcctEmployeeList()) { +// if (CollectionUtils.isNotEmpty(queryParam.getIds()) && !queryParam.getIds().contains(se.getId())) { +// continue; +// } +// List row = new ArrayList<>(); +// row.add(se.getSalaryMonth()); +// row.add(taxAgentMap.get(se.getTaxAgentId())); +// IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(Integer.parseInt(se.getIncomeCategory())); +// row.add(Objects.isNull(incomeCategoryEnum) ? "" : SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel())); +// // 薪资项目 +// Map resultValueMap = Optional.ofNullable(acctResultValueMap.get(se.getId())).orElse(Maps.newHashMap()); +// salaryStatisticsEmployeeDetailResult.getSalaryItemList().forEach(item -> row.add(Optional.ofNullable(resultValueMap.get(item.getId().toString())).orElse(""))); +// +// rows.add(row); +// } +// if (CollectionUtils.isNotEmpty(rows)) { +// List countRow = new ArrayList<>(); +// countRow.add(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 93278, "合计")); +// countRow.add("-"); +// countRow.add("-"); +// +// for (int i = 3; i < headerList.size(); i++) { +// BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.D_ZERO); +// for (List row : rows) { +// sumBigDecimal = sumBigDecimal.add(new BigDecimal(StringUtils.isEmpty(row.get(i).toString()) ? SalaryStatisticsReportBO.ZERO : row.get(i).toString())); +// } +// countRow.add(sumBigDecimal.toString()); +// } +// rows.add(countRow); +// } +// +// // 3.表数据 +// excelSheetData.setRows(rows); +// +// sheetList.add(excelSheetData); +// +// salaryBatchService.simpleExportExcel(ExportExcelInfo.builder() +//// .sharePassword(queryParam.getSharePassword()) +// .bizId(map.get("biz").toString()) +// .flag(true) +// .userId(employeeId) +// .eteamsId(map.get("eteamsId").toString()) +// .tenantKey(tenantKey) +// .operator(map.get("username").toString()) +// .module(map.get("module").toString()) +// .fileName(nameI18n + ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())) +// .handlerName("exportSalaryStatisticsEmployeeDetailList") +// .dataType(nameI18n) +// .function("exportSalaryStatisticsEmployeeDetailList").build(), sheetList); +// } +} diff --git a/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java b/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java new file mode 100644 index 000000000..23571d9e8 --- /dev/null +++ b/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java @@ -0,0 +1,77 @@ +package com.engine.salary.report.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeDetailQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeQueryParam; +import com.engine.salary.report.wrapper.SalaryStatisticsEmployeeWrapper; +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.POST; +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.Map; + +/** + * 薪酬统计员工明细 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryStatisticsEmployeeController { + + private SalaryStatisticsEmployeeWrapper getSalaryStatisticsEmployeeWrapper(User user) { + return ServiceUtil.getService(SalaryStatisticsEmployeeWrapper.class, user); + } + + /** + * 员工列表 + * + * @param queryParam + * @return + */ + @POST + @Path("/list") + @Produces(MediaType.APPLICATION_JSON) + public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsEmployeeQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsEmployeeWrapper(user)::list, queryParam); + } + + /** + * 员工详情列表 + * + * @param queryParam + * @return + */ + @POST + @Path("/detailList") + @Produces(MediaType.APPLICATION_JSON) + public String detailList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsEmployeeDetailQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsEmployeeWrapper(user)::detailList, queryParam); + } + +// /** +// * 导出员工详情列表 +// * +// * @param queryParam +// * @return +// */ +// @PostMapping("/exportDetailList") +// @ApiOperation("导出员工详情列表") +// @WeaPermission(publicPermission = true) +// public WeaResult> exportDetailList(@RequestBody SalaryStatisticsEmployeeDetailQueryParam queryParam) { +// return WeaResult.success(getSalaryStatisticsEmployeeWrapper(user).exportDetailList(queryParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); +// } +} diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java new file mode 100644 index 000000000..31fc2d0e5 --- /dev/null +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -0,0 +1,129 @@ +package com.engine.salary.report.wrapper; + +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.report.common.constant.SalaryConstant; +import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeDetailResultDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeDetailQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeQueryParam; +import com.engine.salary.report.service.SalaryStatisticsEmployeeService; +import com.engine.salary.report.service.impl.SalaryStatisticsEmployeeServiceImpl; +import com.engine.salary.report.util.ReportDataUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 薪酬统计员工明细 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryStatisticsEmployeeWrapper extends Service { + + private SalaryStatisticsEmployeeService getSalaryStatisticsEmployeeService(User user) { + return ServiceUtil.getService(SalaryStatisticsEmployeeServiceImpl.class, user); + } + /** + * 员工列表 + * + * @param queryParam + * @return + */ + public PageInfo list(SalaryStatisticsEmployeeQueryParam queryParam) { + PageInfo page = getSalaryStatisticsEmployeeService(user).listPage(queryParam); + return page; + } + + /** + * 员工详情列表 + * + * @param queryParam + * @return + */ + public Map detailList(SalaryStatisticsEmployeeDetailQueryParam queryParam) { + // 获取核算数据 + SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult = getSalaryStatisticsEmployeeService(user).getDetailSalaryAcctResult(queryParam); + List> records = getSalaryStatisticsEmployeeService(user).listDetailPage(salaryStatisticsEmployeeDetailResult, queryParam); + + Map countResultMap = Maps.newHashMap(); + countResultMap.put("id", "1000000"); + countResultMap.put("salaryMonth", "-"); + countResultMap.put("taxAgent", "-"); + countResultMap.put("incomeCategory", "-"); + if (CollectionUtils.isNotEmpty(records)) { + List salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList(); + for (SalaryItemPO item : salaryItems) { + BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.ZERO); + String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX; + for (Map record : records) { + if (record.containsKey(itemKey)) { + if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString())) { + sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString())); + record.put(itemKey, ReportDataUtil.thousandthConvert(record.get(itemKey).toString())); + } + } + } + countResultMap.put(itemKey, ReportDataUtil.thousandthConvert(sumBigDecimal.toString())); + } + } + PageInfo> pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), records); + + // 列表columns + List weaTableColumns = buildDetailTableColumns(salaryStatisticsEmployeeDetailResult); + + // 结果 + Map resultMap = Maps.newHashMap(); + resultMap.put("columns", weaTableColumns); + resultMap.put("pageInfo", pageInfo); + return resultMap; + } + + private List buildDetailTableColumns(SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult) { + // 表格表头 + List columns = new ArrayList<>(); + columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel( 87614, "薪资所属月"), "salaryMonth", "100")); + columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel( 86184, "个税扣缴义务人"), "taxAgent", "150")); + columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel( 121908, "收入所得项目"), "incomeCategory", "150")); + salaryStatisticsEmployeeDetailResult.getSalaryItemList().forEach(item -> { + columns.add(new WeaTableColumn(item.getName(), item.getId() + SalaryConstant.DYNAMIC_SUFFIX, "100")); + }); + return columns; + } + +// public Map exportDetailList(SalaryStatisticsEmployeeDetailQueryParam queryParam) { +// SalaryAssert.notNull(queryParam.getEmployeeId(), SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 163974, "人员id不能为空")); +// // 构建异步导出参数 +// Map map = salaryBatchService.buildeExportParam("exportSalaryStatisticsEmployeeDetailList"); +// LocalRunnable localRunnable = new LocalRunnable() { +// @Override +// public void execute() { +// try { +// DSTenantKeyThreadVar.tenantKey.set(currentTenantKey); +// getSalaryStatisticsEmployeeService(user).exportDetailList(map, queryParam); +// } finally { +// DSTenantKeyThreadVar.tenantKey.remove(); +// } +// } +// }; +// ThreadPoolUtil.execute(localRunnable); +// +// return map; +// } +} diff --git a/src/com/engine/salary/util/SalaryDateUtil.java b/src/com/engine/salary/util/SalaryDateUtil.java index 729bbd25c..af3eb35e2 100644 --- a/src/com/engine/salary/util/SalaryDateUtil.java +++ b/src/com/engine/salary/util/SalaryDateUtil.java @@ -585,6 +585,11 @@ public class SalaryDateUtil { ZoneId zoneOffset = StrUtil.isNotEmpty(offset) ? ZoneOffset.of(offset) : ZoneOffset.systemDefault(); return Date.from(dateTime.atZone(zoneOffset).toInstant()); } + + public static Date plusMonths(Date date, int i) { + LocalDate localDate = SalaryDateUtil.dateToLocalDate(date).plusMonths(i); + return SalaryDateUtil.localDateToDate(localDate); + } } From ecd037424b780bf51af5f20fc83b420967372f74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 9 May 2023 14:28:46 +0800 Subject: [PATCH 077/245] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/entity/param/BaseQueryParam.java | 21 ------------------- ...aryStatisticsEmployeeDetailQueryParam.java | 1 + .../SalaryStatisticsEmployeeQueryParam.java | 1 + .../SalaryStatisticsReportDataQueryParam.java | 1 + .../SalaryStatisticsReportQueryParam.java | 1 + .../entity/param/SubTableDataQueryParam.java | 1 + .../entity/param/TaxAgentQueryParam.java | 1 + 7 files changed, 6 insertions(+), 21 deletions(-) delete mode 100644 src/com/engine/salary/report/entity/param/BaseQueryParam.java diff --git a/src/com/engine/salary/report/entity/param/BaseQueryParam.java b/src/com/engine/salary/report/entity/param/BaseQueryParam.java deleted file mode 100644 index 99b9b4981..000000000 --- a/src/com/engine/salary/report/entity/param/BaseQueryParam.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.engine.salary.report.entity.param; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -//分页参数 -public class BaseQueryParam { - - //当前页码 - private Integer current = 1; - - //每页数据条数 - private Integer pageSize = 10; - - //总条数 - private Integer total = 0; -} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java index 6bb78d7d3..08080aa1c 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java index 98e3900e5..2a13d43de 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index 121d4183d..3874c0cac 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java index 1fa43d8f9..dc9a61bb8 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java index 0e0c0102a..2ff0c8bb8 100644 --- a/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java index 253e5f81a..3c75632a5 100644 --- a/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java +++ b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; From 2941b5f304d949c24906f740cbf6781205ded482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 9 May 2023 17:37:05 +0800 Subject: [PATCH 078/245] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=90=8C=E6=97=B6=E5=88=A0=E9=99=A4=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/SalaryStatisticsItemMapper.java | 3 +- .../report/SalaryStatisticsItemMapper.xml | 9 +++++ .../salary/report/enums/UnitTypeEnum.java | 9 ++++- .../service/SalaryStatisticsItemService.java | 5 +++ .../impl/SalaryStatisticsItemServiceImpl.java | 35 +++++++++++-------- .../SalaryStatisticsReportServiceImpl.java | 5 +-- .../engine/salary/util/SalaryEntityUtil.java | 9 +++++ 7 files changed, 56 insertions(+), 19 deletions(-) diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java index 8a7ddab42..65913ab29 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java @@ -68,5 +68,6 @@ public interface SalaryStatisticsItemMapper { * @param ids 主键id集合 */ void deleteByIds(@Param("ids") Collection ids); - + + void deleteByReportIds(@Param("reportIds") List reportIds); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml index 94fde1d06..68d44970b 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml @@ -340,5 +340,14 @@ + + UPDATE hrsa_salary_statistics_item + SET delete_type = 1 + WHERE delete_type = 0 + AND stat_report_id IN + + #{reportIds} + + \ No newline at end of file diff --git a/src/com/engine/salary/report/enums/UnitTypeEnum.java b/src/com/engine/salary/report/enums/UnitTypeEnum.java index f1e008d40..7b93dfca9 100644 --- a/src/com/engine/salary/report/enums/UnitTypeEnum.java +++ b/src/com/engine/salary/report/enums/UnitTypeEnum.java @@ -6,7 +6,14 @@ public enum UnitTypeEnum implements BaseEnum { REN(1, 157087, "人"), YUAN(2, 152739, "元"), QIAN(3, 157088, "千"), - BAIWAN(4, 152745, "百万"); + WAN(5, 152745, "万"), + BAIWAN(4, 152745, "百万"), + day(6, 152745, "天"), + month(7, 152745, "月"), + year(8, 152745, "年"), + second(9, 152745, "秒"), + minute(10, 152745, "分钟"), + hour(11, 152745, "小时"); private Integer value; diff --git a/src/com/engine/salary/report/service/SalaryStatisticsItemService.java b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java index a576a75c7..52ab29e3f 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsItemService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java @@ -54,4 +54,9 @@ public interface SalaryStatisticsItemService { */ void saveOrUpdateBatch(List salaryStatisticsItemList); + /** + * 根据报表id删除 + * @param reportIds + */ + void deleteByReportIds(List reportIds); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java index 711d62428..72846cd1f 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java @@ -1,6 +1,5 @@ package com.engine.salary.report.service.impl; -import com.alibaba.fastjson.JSON; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.enums.sicategory.DeleteTypeEnum; @@ -11,6 +10,7 @@ import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; import com.engine.salary.report.enums.UnitTypeEnum; import com.engine.salary.report.service.SalaryStatisticsItemService; import com.engine.salary.util.SalaryAssert; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import dm.jdbc.util.IdGenerator; @@ -110,12 +110,12 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .itemName(saveParam.getItemName()) .itemValue(StringUtils.join(saveParam.getItemValue(), ",")) - .countRule(JSON.toJSONString(saveParam.getCountRule())) - .sumRule(JSON.toJSONString(saveParam.getSumRule())) - .avgRule(JSON.toJSONString(saveParam.getAvgRule())) - .maxRule(JSON.toJSONString(saveParam.getMaxRule())) - .minRule(JSON.toJSONString(saveParam.getMinRule())) - .medianRule(JSON.toJSONString(saveParam.getMedianRule())) + .countRule(SalaryEntityUtil.toJSONString(saveParam.getCountRule())) + .sumRule(SalaryEntityUtil.toJSONString(saveParam.getSumRule())) + .avgRule(SalaryEntityUtil.toJSONString(saveParam.getAvgRule())) + .maxRule(SalaryEntityUtil.toJSONString(saveParam.getMaxRule())) + .minRule(SalaryEntityUtil.toJSONString(saveParam.getMinRule())) + .medianRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule())) .indexValue(max + 1) .statReportId(saveParam.getStatReportId()) .unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getValue() : saveParam.getUnitType()) @@ -143,12 +143,12 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt itemPO.setUnitType(saveParam.getUnitType()); } else { itemPO.setItemValue(StringUtils.join(saveParam.getItemValue(), ",")); - itemPO.setCountRule(Objects.nonNull(saveParam.getCountRule()) ? JSON.toJSONString(saveParam.getCountRule()) : ""); - itemPO.setSumRule(Objects.nonNull(saveParam.getSumRule()) ? JSON.toJSONString(saveParam.getSumRule()) : ""); - itemPO.setAvgRule(Objects.nonNull(saveParam.getAvgRule()) ? JSON.toJSONString(saveParam.getAvgRule()) : ""); - itemPO.setMaxRule(Objects.nonNull(saveParam.getMaxRule()) ? JSON.toJSONString(saveParam.getMaxRule()) : ""); - itemPO.setMinRule(Objects.nonNull(saveParam.getMinRule()) ? JSON.toJSONString(saveParam.getMinRule()) : ""); - itemPO.setMedianRule(Objects.nonNull(saveParam.getMedianRule()) ? JSON.toJSONString(saveParam.getMedianRule()) : ""); + itemPO.setCountRule(SalaryEntityUtil.toJSONString(saveParam.getCountRule())); + itemPO.setSumRule(SalaryEntityUtil.toJSONString(saveParam.getSumRule())); + itemPO.setAvgRule(SalaryEntityUtil.toJSONString(saveParam.getAvgRule())); + itemPO.setMaxRule(SalaryEntityUtil.toJSONString(saveParam.getMaxRule())); + itemPO.setMinRule(SalaryEntityUtil.toJSONString(saveParam.getMinRule())); + itemPO.setMedianRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule())); } getSalaryStatisticsItemMapper().updateIgnoreNull(itemPO); @@ -171,10 +171,15 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt Long id = po.getId(); SalaryStatisticsItemPO item = getSalaryStatisticsItemMapper().getById(id); if (item == null) { - getSalaryStatisticsItemMapper().insertIgnoreNull(item); + getSalaryStatisticsItemMapper().insertIgnoreNull(po); } else { - getSalaryStatisticsItemMapper().update(item); + getSalaryStatisticsItemMapper().update(po); } }); } + + @Override + public void deleteByReportIds(List reportIds) { + getSalaryStatisticsItemMapper().deleteByReportIds(reportIds); + } } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 302885e35..44e1c4561 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -288,9 +288,10 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary int success = list.size(); if (success > 0) { List deleteIds = list.stream().map(SalaryStatisticsReportPO::getId).collect(Collectors.toList()); + //删除报表 getSalaryStatisticsReportMapper().deleteByIds(deleteIds); - - + //删除薪资项 + getSalaryStatisticsItemService(user).deleteByReportIds(deleteIds); // list.forEach(e -> { // // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); diff --git a/src/com/engine/salary/util/SalaryEntityUtil.java b/src/com/engine/salary/util/SalaryEntityUtil.java index 695dc2c2e..3cc5fe7dd 100644 --- a/src/com/engine/salary/util/SalaryEntityUtil.java +++ b/src/com/engine/salary/util/SalaryEntityUtil.java @@ -1,5 +1,6 @@ package com.engine.salary.util; +import com.alibaba.fastjson.JSON; import com.engine.salary.enums.SalaryRoundingModeEnum; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -349,4 +350,12 @@ public class SalaryEntityUtil { return resultList; } + public static String toJSONString(Object obj) { + if (obj != null) { + return JSON.toJSONString(obj); + } + return ""; + } + + } From c87db92ee8b56dd4e7a4e78d7e9083504a123964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 10 May 2023 14:26:39 +0800 Subject: [PATCH 079/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E5=9F=BA=E6=9C=AC=E4=BF=A1=E6=81=AF=E5=92=8C?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/CalculateFormulaVarBO.java | 22 ++++++++++++++----- .../SalaryFormulaReferenceEnum.java | 6 +++-- .../service/impl/RemoteExcelServiceImpl.java | 10 +++++++++ src/com/engine/salary/util/JsonUtil.java | 12 ++++------ .../salary/web/SalaryAcctController.java | 12 +++++----- 5 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java index 425c7715c..6ed15c5a7 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java @@ -38,6 +38,8 @@ import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.util.SalaryDateUtil.DATE_TIME_FORMATTER_PATTERN; + /** * 薪资核算-将数据转换成公式中的变量 *

Copyright: Copyright (c) 2022

@@ -163,7 +165,12 @@ public class CalculateFormulaVarBO { String fieldId = SalarySQLReferenceEnum.SALARY_CYCLE.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + fieldName; - formulaVarValues.add(new FormulaVarValue().setFieldId(fieldId).setFieldValue(map.getOrDefault(fieldName, StringUtils.EMPTY))); + String fieldValue = map.getOrDefault(fieldName, StringUtils.EMPTY); + //日期值取yyyy-MM-dd + if (StringUtils.isNotBlank(fieldValue) && fieldValue.length() > 10 && SalaryDateUtil.parse(fieldValue, DATE_TIME_FORMATTER_PATTERN) != null) { + fieldValue = fieldValue.substring(0, 10); + } + formulaVarValues.add(new FormulaVarValue().setFieldId(fieldId).setFieldValue(fieldValue)); } } return formulaVarValues; @@ -210,8 +217,6 @@ public class CalculateFormulaVarBO { } - - /** * 处理薪资档案(会涉及调薪计薪规则)+处理核算日期 * @@ -228,7 +233,6 @@ public class CalculateFormulaVarBO { List formulaVarValues = resultMap.computeIfAbsent(key, k -> Lists.newArrayList()); // 将薪资档案的值转换成公式中的变量,填充到返回结果集中 formulaVarValues.addAll(handleSalaryArchiveItemVal(salaryAcctCalculateBO, salaryArchiveTaxAgentDataDTO.getSalaryItemValues(), salarySobAdjustRulePOMap)); - formulaVarValues.addAll(handleSalarySobCycleDTO(salaryAcctCalculateBO)); } } } @@ -511,8 +515,16 @@ public class CalculateFormulaVarBO { String fieldId = SalarySQLReferenceEnum.SALARY_ACCT_EMPLOYEE.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + fieldName; - return new FormulaVarValue().setFieldId(fieldId).setFieldValue(map.getOrDefault(fieldName, StringUtils.EMPTY)); + String fieldValue = map.getOrDefault(fieldName, StringUtils.EMPTY); + //判断是否是日期,日期值取yyyy-MM-dd + if (StringUtils.isNotBlank(fieldValue) && fieldValue.length() > 10 && SalaryDateUtil.parse(fieldValue, DATE_TIME_FORMATTER_PATTERN) != null) { + fieldValue = fieldValue.substring(0, 10); + } + return new FormulaVarValue().setFieldId(fieldId).setFieldValue(fieldValue); }).collect(Collectors.toList())); + + //将薪资周期转换成公式中的变量,填充到返回结果集中 + formulaVarValues.addAll(handleSalarySobCycleDTO(salaryAcctCalculateBO)); }); } diff --git a/src/com/engine/salary/enums/salaryformula/SalaryFormulaReferenceEnum.java b/src/com/engine/salary/enums/salaryformula/SalaryFormulaReferenceEnum.java index 80d48a5e5..8cf79c880 100644 --- a/src/com/engine/salary/enums/salaryformula/SalaryFormulaReferenceEnum.java +++ b/src/com/engine/salary/enums/salaryformula/SalaryFormulaReferenceEnum.java @@ -24,8 +24,10 @@ public enum SalaryFormulaReferenceEnum implements BaseEnum { ADD_UP_DEDUCTIONS("addUpDeductions", "累计专项附加扣除", 85380), WELFARE("welfare", "社保福利", 87522), OTHER_DEDUCTION("otherDeduction", "其他免税扣除", 93849), - ISSUED("ISSUED", "已发", 0),; - ; + SALARY_ACCT_EMPLOYEE("salaryAcctEmployee", "核算基本信息", 85368), + SALARY_CYCLE("SalaryCycle", "核算日期", 85368), + ISSUED("ISSUED", "已发", 0); + private String value; private String defaultLabel; diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index 790bf959c..d0c6a69eb 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -157,6 +157,12 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic case ATTEND: vars = attendData2FormulaVar(referenceEnum); break; + case SALARY_ACCT_EMPLOYEE: + vars = convert2FormulaVar(SalaryAcctEmployeePO.class, referenceEnum.getValue() + ""); + break; + case SALARY_CYCLE: + vars = convert2FormulaVar(SalarySobCycleDTO.class, referenceEnum.getValue() + ""); + break; default: break; } @@ -236,6 +242,10 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic welfare2FormulaVar(SalaryFormulaReferenceEnum.WELFARE)); result.put(SalaryFormulaReferenceEnum.ATTEND.getDefaultLabel(), attendData2FormulaVar(SalaryFormulaReferenceEnum.ATTEND)); + result.put(SalarySQLReferenceEnum.SALARY_ACCT_EMPLOYEE.getDefaultLabel(), + convert2FormulaVar(SalaryAcctEmployeePO.class, SalarySQLReferenceEnum.SALARY_ACCT_EMPLOYEE.getValue() + "")); + result.put(SalarySQLReferenceEnum.SALARY_CYCLE.getDefaultLabel(), + convert2FormulaVar(SalarySobCycleDTO.class, SalarySQLReferenceEnum.SALARY_CYCLE.getValue() + "")); return result; } return result; diff --git a/src/com/engine/salary/util/JsonUtil.java b/src/com/engine/salary/util/JsonUtil.java index 081ad3e78..1e6ce59ff 100644 --- a/src/com/engine/salary/util/JsonUtil.java +++ b/src/com/engine/salary/util/JsonUtil.java @@ -65,15 +65,11 @@ public class JsonUtil { if (map != null && map.size() > 0) { Iterator var4 = map.entrySet().iterator(); - while(var4.hasNext()) { - Entry entry = (Entry)var4.next(); + while (var4.hasNext()) { + Entry entry = (Entry) var4.next(); Object obj = entry.getValue(); - - try { - V value = JSON.parseObject(JSON.toJSONString(obj), valueCls); - result.put(entry.getKey(), value); - } catch (Exception var8) { - } + V value = JSON.parseObject(JSON.toJSONString(obj), valueCls); + result.put(entry.getKey(), value); } } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index c1916b13f..1fdd0a7a6 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -49,28 +49,28 @@ public class SalaryAcctController { private SalaryAcctRecordWrapper salaryAcctRecordWrapper; private SalaryAcctRecordWrapper getSalaryAcctRecordWrapper(User user) { - return (SalaryAcctRecordWrapper) ServiceUtil.getService(SalaryAcctRecordWrapper.class, user); + return ServiceUtil.getService(SalaryAcctRecordWrapper.class, user); } private SalaryAcctEmployeeWrapper getSalaryAcctEmployeeWrapper(User user) { - return (SalaryAcctEmployeeWrapper) ServiceUtil.getService(SalaryAcctEmployeeWrapper.class, user); + return ServiceUtil.getService(SalaryAcctEmployeeWrapper.class, user); } private SalaryAcctResultWrapper getSalaryAcctResultWrapper(User user) { - return (SalaryAcctResultWrapper) ServiceUtil.getService(SalaryAcctResultWrapper.class, user); + return ServiceUtil.getService(SalaryAcctResultWrapper.class, user); } // private SalaryAcctCheckResultWrapper salaryAcctCheckResultWrapper; private SalaryComparisonResultWrapper getSalaryComparisonResultWrapper(User user) { - return (SalaryComparisonResultWrapper) ServiceUtil.getService(SalaryComparisonResultWrapper.class, user); + return ServiceUtil.getService(SalaryComparisonResultWrapper.class, user); } private SalaryAcctExcelWrapper getSalaryAcctExcelWrapper(User user) { - return (SalaryAcctExcelWrapper) ServiceUtil.getService(SalaryAcctExcelWrapper.class, user); + return ServiceUtil.getService(SalaryAcctExcelWrapper.class, user); } private SalaryAcctExcelService getSalaryAcctExcelService(User user) { - return (SalaryAcctExcelService) ServiceUtil.getService(SalaryAcctExcelServiceImpl.class, user); + return ServiceUtil.getService(SalaryAcctExcelServiceImpl.class, user); } // /**********************************薪资核算记录相关 start*********************************/ From 3840f264646a1b4404793f36b34a1ed8b11ee2b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 10 May 2023 18:55:23 +0800 Subject: [PATCH 080/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/formlua/core/QlExpress.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/formlua/core/QlExpress.java b/src/com/engine/salary/formlua/core/QlExpress.java index 8086f0000..cf90cab07 100644 --- a/src/com/engine/salary/formlua/core/QlExpress.java +++ b/src/com/engine/salary/formlua/core/QlExpress.java @@ -99,8 +99,11 @@ public class QlExpress { resultObj.put("excute", false); } return resultObj; - } catch (Exception e) { + } catch (Throwable e) { logger.error("err", e); + while (e != null) { + e = e.getCause(); + } String jsonError = e.getMessage(); if (e instanceof PatternSyntaxException) { PatternSyntaxException patternSyntaxException = (PatternSyntaxException) e; From 6ec0b53fe5ed06202937f4b4aa68947ec961c75e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 11 May 2023 10:00:21 +0800 Subject: [PATCH 081/245] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E8=B5=B7=E5=A7=8B=E5=8F=91=E8=96=AA=E6=98=AF=E5=85=A5=E8=81=8C?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../maintainer/MaintainerController.java | 14 ++++ .../datacollection/AddUpSituationManager.java | 22 ++++--- .../salaryarchive/SalaryArchiveManager.java | 64 +++++++++++++++++++ 3 files changed, 90 insertions(+), 10 deletions(-) create mode 100644 src/com/engine/salary/maintainer/salaryarchive/SalaryArchiveManager.java diff --git a/src/com/engine/salary/maintainer/MaintainerController.java b/src/com/engine/salary/maintainer/MaintainerController.java index 1122d6681..c184a6082 100644 --- a/src/com/engine/salary/maintainer/MaintainerController.java +++ b/src/com/engine/salary/maintainer/MaintainerController.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.salary.maintainer.datacollection.AddUpSituationManager; import com.engine.salary.maintainer.salaryacct.SalaryAcctManager; import com.engine.salary.maintainer.salaryacct.SalaryAcctSupplementParam; +import com.engine.salary.maintainer.salaryarchive.SalaryArchiveManager; import com.engine.salary.util.ResponseResult; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -40,6 +41,10 @@ public class MaintainerController { return ServiceUtil.getService(AddUpSituationManager.class, user); } + private SalaryArchiveManager getSalaryArchiveManager(User user) { + return ServiceUtil.getService(SalaryArchiveManager.class, user); + } + //---------------------------薪资核算 start ------------------------------------ /** @@ -94,4 +99,13 @@ public class MaintainerController { } //---------------------------数据采集 往期累计情况 end ------------------------------------ + + @GET + @Path("/salaryArchive/initPayStartDate") + @Produces(MediaType.APPLICATION_JSON) + public String initPayDate(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryArchiveManager(user)::initPayStartDate); + } + } diff --git a/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java b/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java index 69f62e147..c65d02559 100644 --- a/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java +++ b/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java @@ -24,7 +24,7 @@ import java.util.stream.Collectors; * @date 2023/04/23 17:23 * @description 往期累计情况维护类 */ -public class AddUpSituationManager extends Service { +public class AddUpSituationManager extends Service { private TaxDeclarationMapper getTaxDeclarationMapper() { return MapperProxyFactory.getProxy(TaxDeclarationMapper.class); @@ -38,29 +38,31 @@ public class AddUpSituationManager extends Service { // 获取已有的个税申报表记录 List taxDeclarationList = getTaxDeclarationMapper().listSome(new TaxDeclarationPO()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); - Map taxDeclarationMap = SalaryEntityUtil.convert2Map(taxDeclarationList, TaxDeclarationPO::getId, PO->PO.getTaxAgentId()+"-"+sdf.format(PO.getSalaryMonth())); + Map taxDeclarationMap = SalaryEntityUtil.convert2Map(taxDeclarationList, TaxDeclarationPO::getId, PO -> PO.getTaxAgentId() + "-" + sdf.format(PO.getSalaryMonth())); BaseBean bb = new BaseBean(); List taxDeclarationIds = taxDeclarationList.stream().map(TaxDeclarationPO::getId).collect(Collectors.toList()); - bb.writeLog("往期累计数据恢复DataIds:"+ taxDeclarationIds); - bb.writeLog("往期累计数据恢复DataMap:"+ taxDeclarationMap); + bb.writeLog("往期累计数据恢复DataIds:" + taxDeclarationIds); + bb.writeLog("往期累计数据恢复DataMap:" + taxDeclarationMap); boolean result = true; // 循环调用生成申报单接口 - for(int i =0; i < taxDeclarationList.size(); i++){ + for (int i = 0; i < taxDeclarationList.size(); i++) { TaxDeclarationPO po = taxDeclarationList.get(i); - bb.writeLog("开始删除生成:"+po.getTaxAgentId()+"-"+po.getSalaryMonth()); + bb.writeLog("开始删除生成:" + po.getTaxAgentId() + "-" + po.getSalaryMonth()); // 删除记录 int delete = getTaxDeclarationMapper().deleteByIdZj(po.getId()); LocalDate localDate = SalaryDateUtil.dateToLocalDate(po.getSalaryMonth()); // 调用生成申报单接口 - YearMonth yearMonth = YearMonth.of(localDate.getYear(),localDate.getMonth()); + YearMonth yearMonth = YearMonth.of(localDate.getYear(), localDate.getMonth()); try { getTaxDeclarationService().save(TaxDeclarationSaveParam.builder().salaryMonth(yearMonth).taxAgentId(po.getTaxAgentId()).build()); - }catch (Exception e){ - bb.writeLog("错误:"+e); + } catch (Exception e) { + bb.writeLog("错误:" + e); result = false; continue; } } - return result; + return result; } + + } diff --git a/src/com/engine/salary/maintainer/salaryarchive/SalaryArchiveManager.java b/src/com/engine/salary/maintainer/salaryarchive/SalaryArchiveManager.java new file mode 100644 index 000000000..cbd52a6ca --- /dev/null +++ b/src/com/engine/salary/maintainer/salaryarchive/SalaryArchiveManager.java @@ -0,0 +1,64 @@ +package com.engine.salary.maintainer.salaryarchive; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; +import com.engine.salary.mapper.archive.SalaryArchiveMapper; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.service.SalaryEmployeeService; +import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class SalaryArchiveManager extends Service { + private SalaryArchiveService getSalaryArchiveService(User user) { + return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + private SalaryArchiveMapper getSalaryArchiveMapper() { + return MapperProxyFactory.getProxy(SalaryArchiveMapper.class); + } + + public Boolean initPayStartDate() { + //获取所有待定薪档案 + List list = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().runStatus(SalaryArchiveStatusEnum.PENDING.getValue()).build()); + + //过滤已存在起始发薪日期的数据 + List needData = list.stream().filter(po -> po.getPayStartDate() == null).collect(Collectors.toList()); + List empIds = SalaryEntityUtil.properties(needData, SalaryArchivePO::getEmployeeId, Collectors.toList()); + + //获取人员信息 + List emps = getSalaryEmployeeService(user).getEmployeeByIds(empIds); + Map longDataCollectionEmployeeMap = SalaryEntityUtil.convert2Map(emps, DataCollectionEmployee::getEmployeeId); + + //设置起始发薪日期 + List collect1 = needData.stream().peek(po -> { + Long employeeId = po.getEmployeeId(); + DataCollectionEmployee orDefault = longDataCollectionEmployeeMap.getOrDefault(employeeId, new DataCollectionEmployee()); + String companystartdate = orDefault.getCompanystartdate(); + if (StringUtils.isNotBlank(companystartdate)&&SalaryDateUtil.checkDay(companystartdate)) { + Date parse = SalaryDateUtil.parse(companystartdate, SalaryDateUtil.DATE_FORMATTER_PATTERN); + po.setPayStartDate(parse); + } + }).collect(Collectors.toList()); + + collect1.forEach(getSalaryArchiveMapper()::update); + + return null; + } +} From 53f2c1ebb6a5cb645b80583203d5ff8d05ee4cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 11 May 2023 10:21:21 +0800 Subject: [PATCH 082/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=A1=8C=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctExcelServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 035f36a73..d190fb19d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -762,7 +762,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } for (int i = 0; i < data.size(); i++) { - String row = "第" + (i + 2) + "行"; + String row = "第" + (i + 3) + "行"; int usernameIndex = 0; boolean isError = false; From 54ca46c653d7c6b05d8f64574cb742f919405f1f Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 11 May 2023 10:51:43 +0800 Subject: [PATCH 083/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E9=A1=B9=E8=87=AA=E5=8A=A8=E9=94=81=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryAcctResultUpdateLockStatusParam.java | 11 +++++++++++ .../service/impl/SalaryAcctExcelServiceImpl.java | 7 +++++++ .../service/impl/SalaryAcctResultServiceImpl.java | 13 +++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java index d5ae5718f..1e6042977 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java @@ -1,7 +1,12 @@ package com.engine.salary.entity.salaryacct.param; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Set; /** * 更新核算锁定状态 @@ -12,6 +17,9 @@ import lombok.Data; * @version 1.0 **/ @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class SalaryAcctResultUpdateLockStatusParam { //锁定状态 @@ -23,6 +31,9 @@ public class SalaryAcctResultUpdateLockStatusParam { //薪资核算人员的id") // private Set idStrSet; + //薪资项目的IdList + private Set salaryItemIds; + //薪资核算记录的id") private Long salaryAcctRecordId; } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index d190fb19d..e232cd3b8 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -28,6 +28,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.service.*; @@ -1021,6 +1022,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); } } + // 导入的列都自动锁定 + SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() + .salaryItemIds(excelSalaryItemIds) + .salaryAcctRecordId(param.getSalaryAcctRecordId()) + .lockStatus(LockStatusEnum.LOCK).build(); + getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); apidatas.put("successCount", successCount); apidatas.put("errorCount", failCount); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 8ea761ec2..5f10df7cc 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -844,9 +844,18 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // } // salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); // } - Set salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); + + Set salaryItemIds; + if(CollectionUtils.isNotEmpty(updateParam.getSalaryItemIds())){ + salaryItemIds = updateParam.getSalaryItemIds(); + }else{ + salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); + } if (updateParam.getLockStatus() == LockStatusEnum.LOCK) { - salaryAcctRecord.getLockSalaryItemIds().addAll(salaryItemIds); + Set lockSalaryItemIds = new HashSet<>(); + lockSalaryItemIds.addAll(salaryAcctRecord.getLockSalaryItemIds()); + lockSalaryItemIds.addAll(salaryItemIds); + salaryAcctRecord.setLockSalaryItemIds(new ArrayList(lockSalaryItemIds)); } else { salaryAcctRecord.getLockSalaryItemIds().removeAll(salaryItemIds); } From b0084cad9cfebfca5d87725c0c5ef37cb16e02e4 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 11 May 2023 14:40:10 +0800 Subject: [PATCH 084/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BC=96=E8=BE=91=20=E6=89=8B=E5=8A=A8=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=90=8E=E8=87=AA=E5=8A=A8=E9=94=81=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 53 ++++++++++++++++--- .../dto/SalaryAcctResultDetailDTO.java | 22 ++++++++ .../impl/SalaryAcctResultServiceImpl.java | 25 +++++++-- 3 files changed, 91 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 96bd7353f..8822dcc6d 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -15,10 +15,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobEmpFieldDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; -import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; -import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; -import com.engine.salary.entity.salarysob.po.SalarySobItemPO; -import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; @@ -369,6 +366,7 @@ public class SalaryAcctResultBO { TaxAgentPO taxAgentPO, SalaryAcctEmployeePO salaryAcctEmployee, List salarySobEmpFields, + List salarySobItemGroupPOS, List salarySobItemPOS, List salaryItems, List salaryAcctResults, @@ -391,6 +389,26 @@ public class SalaryAcctResultBO { Map resultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResults, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue); Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); Map salaryBackItemMap = SalaryEntityUtil.convert2Map(salaryBackItemPOS, SalaryItemPO::getId); + Map> salarySobItemPOMap = SalaryEntityUtil.group2Map(salarySobItemPOS, SalarySobItemPO::getSalarySobItemGroupId); + + // 对分组进行排序 + salarySobItemGroupPOS = sortGroup(salarySobItemGroupPOS); + // 对分组内薪资项目排序 + sortItem(salarySobItemPOMap); + // 根据账套分组封装薪资项目的值 + List itemsByGroup = new ArrayList<>(); + for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ + List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); + List items = groupItems.stream() + .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) + .collect(Collectors.toList()); + itemsByGroup.add(SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO.builder() + .salarySobItemGroupId(groupPO.getId()) + .salarySobItemGroupName(groupPO.getName()) + .salaryItems(items) + .sortedIndex(groupPO.getSortedIndex()).build() ); + } + // 公式项的值(不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段) List formulaItems = salarySobItemPOS.stream() .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0) @@ -415,10 +433,32 @@ public class SalaryAcctResultBO { .employeeInfos(employeeInfos) .formulaItems(formulaItems) .inputItems(inputItems) + .itemsByGroup(itemsByGroup) .issuedAndReissueItems(issuedAndReissueItems) .build(); } + private static List sortGroup(List salarySobItemGroupPOS) { + if(CollectionUtils.isEmpty(salarySobItemGroupPOS)){ + return Collections.emptyList(); + } + return salarySobItemGroupPOS.stream().sorted(Comparator.comparingInt(SalarySobItemGroupPO::getSortedIndex)).collect(Collectors.toList()); + } + + /** + * 薪资账套的薪资项目按照sortedIndex排序 + * + */ + private static void sortItem(Map> salarySobItemPOMap) { + for(Map.Entry> entry : salarySobItemPOMap.entrySet()){ + List items = entry.getValue(); + if (CollectionUtils.isNotEmpty(items)) { + List sortedValue = items.stream().sorted(Comparator.comparingInt(SalarySobItemPO::getSortedIndex)).collect(Collectors.toList()); + salarySobItemPOMap.put(entry.getKey(), sortedValue); + } + } + } + /** * 转换成薪资核算结果详情dto * @@ -436,7 +476,8 @@ public class SalaryAcctResultBO { .salaryItemName(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .resultValue(resultValueMap.getOrDefault(salarySobItemPO.getSalaryItemId(), StringUtils.EMPTY)) .dataType(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) - .canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0)) +// .canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0)) + .canEdit(true) .build(); } @@ -492,7 +533,7 @@ public class SalaryAcctResultBO { .salaryAcctEmpId(salaryAcctEmployee.getId()) .employeeId(salaryAcctEmployee.getEmployeeId()) .taxAgentId(salaryAcctEmployee.getTaxAgentId()) - .resultValue(e.getResultValue()) + .resultValue(StringUtils.trim(e.getResultValue())) .originResultValue(salaryAcctResultOldPOMap.get(saveParam.getSalaryAcctEmpId() + "-" + e.getSalaryItemId())) .creator(employeeId) .createTime(now) diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java index efd51c4a2..c8d16c683 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java @@ -39,6 +39,9 @@ public class SalaryAcctResultDetailDTO { //输入项") private List inputItems; + // 根据账套分组的薪资项目 + private List itemsByGroup; + //已发补发 private List issuedAndReissueItems; @@ -66,4 +69,23 @@ public class SalaryAcctResultDetailDTO { //是否可编辑 private Boolean canEdit; } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class SalaryAcctResultDetailItemByGroupDTO { + + //薪资账套分组id") + private Long salarySobItemGroupId; + + //薪资项目分组名称") + private String salarySobItemGroupName; + + //分组中包含的薪资项目 + private List salaryItems; + + //分组顺序 + private Integer sortedIndex; + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 5f10df7cc..f1ceef54e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -156,6 +156,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); } + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return (SalaryAcctResultService) ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; @@ -271,7 +275,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe TaxAgentPO taxAgent = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId()); // 转换成薪资核算结果详情dto - return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS, salarySobBackItemPOList, salaryBackItemPOS, salaryBackItemFormula); + return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemGroupPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS, salarySobBackItemPOList, salaryBackItemPOS, salaryBackItemFormula); } @Override @@ -523,9 +527,24 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe encryptUtil.decryptList(salaryAcctResultPOSOld, SalaryAcctResultPO.class); // 保存参数转换成薪资核算结果po List salaryAcctResultPOS = SalaryAcctResultBO.convert2PO(salaryAcctResultPOSOld, saveParam, salaryAcctEmployeePO, (long) user.getUID()); + // 对比核算结果提取修改了哪些薪资项目 + Set needLockItems = new HashSet<>(); + Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); + salaryAcctResultPOS.stream().forEach(PO -> { + String oldValue = oldResutMap.get(PO.getSalaryItemId()).getResultValue(); + if(!StringUtils.equals(oldValue,PO.getResultValue())){ + needLockItems.add(PO.getSalaryItemId()); + } + }); + // 编辑的列都自动锁定 + SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() + .salaryItemIds(needLockItems) + .salaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()) + .lockStatus(LockStatusEnum.LOCK).build(); + getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); - SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctEmployeePO.getSalaryAcctRecordId()); +// SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctEmployeePO.getSalaryAcctRecordId()); // 若保存编辑时一同传已发补发,则删除以下代码 // if(byId.getBackCalcStatus() != null && Objects.equals(byId.getBackCalcStatus(),1)){ // // 是回算 @@ -927,4 +946,4 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // } return salaryItemIds; } -} +} \ No newline at end of file From f848b74f28eb19541045f1e0cac543da3b42e563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 12 May 2023 11:51:42 +0800 Subject: [PATCH 085/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryArchiveExcelServiceImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 5c3b72f25..573c4a6e9 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -515,7 +515,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // 初始化导入对重复记录校验 if (importHandleParam.isInit()) { Map validMap = SalaryArchiveExcelBO - .validInitImportData(isError, i+1, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam); + .validInitImportData(isError, i + 1, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam); errorCount = Integer.parseInt(validMap.getOrDefault("errorCount", errorCount).toString()); successCount = Integer.parseInt(validMap.getOrDefault("successCount", successCount).toString()); } @@ -552,6 +552,8 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch public Map processInit(SalaryArchiveImportActionParam param) { + log.info("salary process param {}", param); + // 初始化国际化标签 SalaryArchiveExcelBO.initI18n(); @@ -652,6 +654,9 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch apidatas.put("successCount", successCount); apidatas.put("errorCount", errorCount); apidatas.put("errorNotice", excelComments); + + log.info("salary process param {} result {}", param, apidatas); + return apidatas; // 发送导入回调信息 From d51c89bb82ad18888a70b3b41647aa0e8d0f4688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 15 May 2023 09:28:22 +0800 Subject: [PATCH 086/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/formlua/core/QlExpress.java | 45 +++--- .../salary/formlua/core/QlExpressTest.java | 7 +- .../formlua/entity/standard/ExcelResult.java | 43 +++++- .../salary/service/FormulaRunService.java | 3 +- .../service/impl/FormulaRunServiceImpl.java | 133 ++++++++++------- .../impl/SalaryAcctCalculateServiceImpl.java | 24 +-- .../impl/SalaryArchiveExcelServiceImpl.java | 8 +- .../impl/SalaryFormulaServiceImpl.java | 138 +++++++++--------- 8 files changed, 233 insertions(+), 168 deletions(-) diff --git a/src/com/engine/salary/formlua/core/QlExpress.java b/src/com/engine/salary/formlua/core/QlExpress.java index cf90cab07..9dbc51f7c 100644 --- a/src/com/engine/salary/formlua/core/QlExpress.java +++ b/src/com/engine/salary/formlua/core/QlExpress.java @@ -1,8 +1,8 @@ package com.engine.salary.formlua.core; -import com.alibaba.fastjson.JSONObject; import com.engine.salary.formlua.entity.parameter.DataType; import com.engine.salary.formlua.entity.parameter.FuncNames; +import com.engine.salary.formlua.entity.standard.ExcelResult; import com.engine.salary.formlua.func.compare.*; import com.engine.salary.formlua.func.date.DateTimeService; import com.engine.salary.formlua.func.date.DateTimeServiceImpl; @@ -68,7 +68,7 @@ public class QlExpress { * @param context 上下文 * @throws Exception */ - public Object execute(String statement, Map context) { + public ExcelResult execute(String statement, Map context) { String expressSql = statement; initRunner(runner); DynamicParamsUtil.supportDynamicParams = true; @@ -78,50 +78,51 @@ public class QlExpress { // threadLocalData.setExpressContext(context); // ParamContext.get().setValue("formulaParam",threadLocalData); // ParamContext.get().setValue("currentUser",simpleEmployee); + ExcelResult excelResult = new ExcelResult(); try { ExpressRegularUtil.checkFuncExpress(expressSql); expressSql = expressSql.replaceAll("\\{", ""); expressSql = expressSql.replaceAll("\\}", ""); + + excelResult.setExpress(expressSql); + excelResult.setExpressContext(expressContext); Object obj = runner.execute(expressSql, expressContext, null, true, false); - JSONObject resultObj = new JSONObject(); + if (obj != null) { - resultObj.put("excute", true); if (obj instanceof DataType) { DataType dataType = (DataType) obj; - resultObj.put("data", dataType.getContent()); - resultObj.put("dataType", dataType.getDataType()); - resultObj.put("boolData", dataType.getContent()); + excelResult.setData(dataType.getContent()); + excelResult.setDataType(dataType.getDataType()); } else { - resultObj.put("data", obj); - resultObj.put("boolData", obj); + excelResult.setData(obj); } + excelResult.setStatus(true); } else { - resultObj.put("excute", false); + excelResult.setStatus(false); } - return resultObj; + return excelResult; } catch (Throwable e) { - logger.error("err", e); - while (e != null) { + logger.error("express run err", e); + while (e.getCause() != null) { e = e.getCause(); } - String jsonError = e.getMessage(); + String errorMsg = e.getMessage(); if (e instanceof PatternSyntaxException) { PatternSyntaxException patternSyntaxException = (PatternSyntaxException) e; - jsonError = patternSyntaxException.getDescription(); + errorMsg = patternSyntaxException.getDescription(); } else { if (null != e.getCause()) { - jsonError = e.getCause().getMessage(); + errorMsg = e.getCause().getMessage(); if (e.getCause() instanceof InvocationTargetException) { InvocationTargetException invocationTargetException = (InvocationTargetException) e.getCause(); - jsonError = invocationTargetException.getTargetException().getMessage(); + errorMsg = invocationTargetException.getTargetException().getMessage(); } } } - JSONObject resultObj = new JSONObject(); - resultObj.put("excute", false); - resultObj.put("data", ""); - resultObj.put("err", jsonError); - return resultObj; + + excelResult.setStatus(false); + excelResult.setErrorMsg(errorMsg); + return excelResult; } } diff --git a/src/com/engine/salary/formlua/core/QlExpressTest.java b/src/com/engine/salary/formlua/core/QlExpressTest.java index 25af7e339..3c76ceff3 100644 --- a/src/com/engine/salary/formlua/core/QlExpressTest.java +++ b/src/com/engine/salary/formlua/core/QlExpressTest.java @@ -1,7 +1,5 @@ package com.engine.salary.formlua.core; -import com.alibaba.fastjson.JSONObject; - import java.util.HashMap; import java.util.Map; @@ -19,9 +17,6 @@ public class QlExpressTest { String formula = "IF(1=1,1,2)"; Object execute = express.execute(formula, context); - if(execute instanceof JSONObject){ - Object data = ((JSONObject) execute).get("data"); - System.out.println(data); - } + } } diff --git a/src/com/engine/salary/formlua/entity/standard/ExcelResult.java b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java index f504acc33..1e1923864 100644 --- a/src/com/engine/salary/formlua/entity/standard/ExcelResult.java +++ b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java @@ -1,13 +1,24 @@ package com.engine.salary.formlua.entity.standard; +import com.ql.util.express.IExpressContext; + import java.io.Serializable; import java.math.BigDecimal; -/** - * @author roy - */ public class ExcelResult implements Serializable { private static final long serialVersionUID = 4578033427466119428L; + + + /** + * 执行语句 + */ + private String express; + + /** + * 上下文 + */ + private IExpressContext expressContext; + /** * 文本、数字、日期从这里取值 */ @@ -24,6 +35,32 @@ public class ExcelResult implements Serializable { private boolean status; private String errorMsg; private String formulaId; + private String dataType; + + public String getExpress() { + return express; + } + + public void setExpress(String express) { + this.express = express; + } + + public IExpressContext getExpressContext() { + return expressContext; + } + + public void setExpressContext(IExpressContext expressContext) { + this.expressContext = expressContext; + } + + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } public String getFormulaId() { return formulaId; diff --git a/src/com/engine/salary/service/FormulaRunService.java b/src/com/engine/salary/service/FormulaRunService.java index db1d82717..43fbc55df 100644 --- a/src/com/engine/salary/service/FormulaRunService.java +++ b/src/com/engine/salary/service/FormulaRunService.java @@ -3,11 +3,12 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.po.FormulaVar; +import com.engine.salary.formlua.entity.standard.ExcelResult; import java.util.List; public interface FormulaRunService { - Object run(ExpressFormula expressFormula, List formulaVars, DataCollectionEmployee simpleEmployee) throws Exception; + ExcelResult run(ExpressFormula expressFormula, List formulaVars, DataCollectionEmployee simpleEmployee) ; } diff --git a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java index a0ea79549..413f3bdfa 100644 --- a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java +++ b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java @@ -1,6 +1,5 @@ package com.engine.salary.service.impl; -import com.alibaba.fastjson.JSONObject; import com.engine.core.impl.Service; import com.engine.salary.encrypt.AESEncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -9,6 +8,7 @@ import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.enums.salaryformula.ReferenceTypeEnum; import com.engine.salary.formlua.core.QlExpress; import com.engine.salary.formlua.entity.parameter.DataType; +import com.engine.salary.formlua.entity.standard.ExcelResult; import com.engine.salary.service.FormulaRunService; import com.engine.salary.sys.enums.OpenEnum; import com.fasterxml.jackson.core.JsonProcessingException; @@ -22,6 +22,7 @@ import org.apache.commons.lang3.math.NumberUtils; import weaver.conn.RecordSet; import weaver.conn.RecordSetDataSource; import weaver.general.BaseBean; +import weaver.general.Util; import java.math.BigDecimal; import java.util.HashMap; @@ -43,7 +44,7 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService @Override - public Object run(ExpressFormula expressFormula, List formulaVars, DataCollectionEmployee simpleEmployee) throws Exception { + public ExcelResult run(ExpressFormula expressFormula, List formulaVars, DataCollectionEmployee simpleEmployee) { if (ReferenceTypeEnum.parseByValue(expressFormula.getReferenceType()) == ReferenceTypeEnum.FORMULA) { return runFormula(expressFormula, formulaVars); @@ -52,13 +53,14 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService return runSQL(expressFormula, formulaVars); } log.error("express execute fail, {} not in ReferenceTypeEnum ", expressFormula.getReferenceType()); - return StringUtils.EMPTY; + return new ExcelResult(); } - private String runSQL(ExpressFormula expressFormula, List formulaVars) { + private ExcelResult runSQL(ExpressFormula expressFormula, List formulaVars) { if (isLog) { log.info("SQL ExpressFormula {}", expressFormula); } + ExcelResult excelResult = new ExcelResult(); //解析配置,获取返回值、数据源 String extendParam = expressFormula.getExtendParam(); @@ -86,44 +88,56 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService if (decrypt != null) { openDecrypt = decrypt.asText().trim(); } - } catch (JsonProcessingException e) { - log.error("express execute fail, sql extendParam parse fail", e); - } - //解析sql - String sql = expressFormula.getFormulaRunScript(); - for (FormulaVar formulaVar : formulaVars) { - sql = sql.replaceAll(formulaVar.getFieldId(), "'" + formulaVar.getContent() + "'"); - } - if (isLog) { - log.info("ExpressFormula sql run {}", sql); - } + //解析sql + String sql = expressFormula.getFormulaRunScript(); + for (FormulaVar formulaVar : formulaVars) { + sql = sql.replaceAll(formulaVar.getFieldId(), "'" + formulaVar.getContent() + "'"); + } + if (isLog) { + log.info("ExpressFormula sql run {}", sql); + } - //外部数据源 - if (StringUtils.isNotBlank(datasourceId)) { - RecordSetDataSource rs = new RecordSetDataSource(datasourceId); - log.error("执行外部sql,{},datasourceId{}", sql, datasourceId); - if (rs.executeSql(sql)) { - if (rs.next()) { - result = rs.getString(sqlReturnKey); + excelResult.setExpress(sql); + + //外部数据源 + if (StringUtils.isNotBlank(datasourceId)) { + RecordSetDataSource rs = new RecordSetDataSource(datasourceId); + log.error("执行外部sql,{},datasourceId{}", sql, datasourceId); + if (rs.executeSql(sql)) { + if (rs.next()) { + result = rs.getString(sqlReturnKey); + } + } + } else { + RecordSet rs = new RecordSet(); + if (rs.execute(sql)) { + if (rs.next()) { + result = rs.getString(sqlReturnKey); + } } } - } else { - RecordSet rs = new RecordSet(); - if (rs.execute(sql)) { - if (rs.next()) { - result = rs.getString(sqlReturnKey); - } - } - } - if (OpenEnum.OPEN.getValue().equals(openDecrypt)) { - result = AESEncryptUtil.decrypt(result); + if (OpenEnum.OPEN.getValue().equals(openDecrypt)) { + result = AESEncryptUtil.decrypt(result); + } + + excelResult.setStatus(true); + excelResult.setData(Util.null2String(result)); + return excelResult; + + } catch (Throwable e) { + log.error("express run err sql", e); + while (e.getCause() != null) { + e = e.getCause(); + } + excelResult.setStatus(false); + excelResult.setErrorMsg(e.getMessage()); + return excelResult; } - return result; } - private Object runFormula(ExpressFormula expressFormula, List formulaVars) throws Exception { + private ExcelResult runFormula(ExpressFormula expressFormula, List formulaVars) { //是否是自定义函数 boolean isCustomFunction = true; @@ -146,20 +160,42 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService String formula = expressFormula.getFormulaRunScript(); - if(isCustomFunction){ - DefaultContext context = new DefaultContext(); - formulaVars.forEach(v -> { - if (isLog) { - log.info("FORMULA formulaVar {} - {}", v.getFieldId(), v.getContent()); - } - if (DataType.NUMBER.equals(v.getFieldType()) && NumberUtils.isCreatable(v.getContent())) { - context.put(v.getFieldId(), new BigDecimal(v.getContent())); + ExcelResult execute = new ExcelResult(); + if (isCustomFunction) { + try { + execute.setExpress(formula); + DefaultContext context = new DefaultContext(); + formulaVars.forEach(v -> { + if (isLog) { + log.info("FORMULA formulaVar {} - {}", v.getFieldId(), v.getContent()); + } + if (DataType.NUMBER.equals(v.getFieldType()) && NumberUtils.isCreatable(v.getContent())) { + context.put(v.getFieldId(), new BigDecimal(v.getContent())); + } else { + context.put(v.getFieldId(), v.getContent()); + } + }); + execute.setExpressContext(context); + Object data = runner.execute(formula, context, null, true, false); + + if (data != null) { + execute.setData(data); + execute.setStatus(true); } else { - context.put(v.getFieldId(), v.getContent()); + execute.setStatus(false); } - }); - return runner.execute(formula, context, null, true, false); - }else{ + + } catch (Throwable e) { + log.error("express run err isCustomFunction", e); + while (e.getCause() != null) { + e = e.getCause(); + } + execute.setStatus(false); + execute.setErrorMsg(e.getMessage()); + } + + return execute; + } else { Map context = new HashMap<>(); formulaVars.forEach(v -> { if (isLog) { @@ -171,10 +207,7 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService context.put(v.getFieldId(), v.getContent()); } }); - Object execute = express.execute(formula, context); - if(execute instanceof JSONObject){ - return ((JSONObject) execute).get("data"); - } + execute = express.execute(formula, context); return execute; } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 043958a12..eff8b4e09 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -23,6 +23,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum; +import com.engine.salary.formlua.entity.standard.ExcelResult; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; @@ -132,14 +133,14 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc // 7、查询考勤数据 List attendQuoteDataDTOS = getAttendQuoteDataService(user).getAttendQuoteData(salarySobCycleDTO.getSalaryMonth(), salarySobCycleDTO.getSalarySobId(), employeeIds); // 8、查询薪资核算人员的薪资核算结果 - List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId,Collectors.toList()); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId, Collectors.toList()); List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 薪资回算时回算前的核算结果 (没有回算项) Map> collect = salaryAcctResultPOS.stream().collect(Collectors.groupingBy(k -> k.getEmployeeId() + "-" + k.getTaxAgentId() + "-" + k.getSalaryItemId())); Map salaryAcctResultPOMap = new HashMap<>(); - for(Map.Entry> et : collect.entrySet()){ - salaryAcctResultPOMap.put(et.getKey(),et.getValue().get(0).getOriginResultValue()); + for (Map.Entry> et : collect.entrySet()) { + salaryAcctResultPOMap.put(et.getKey(), et.getValue().get(0).getOriginResultValue()); } //核算锁定的值 Map salaryAcctLockResultPOS = MapUtils.emptyIfNull(salaryAcctCalculateBO.getSalaryAcctLockResultPOS()); @@ -181,12 +182,11 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc String resultValue; SalaryItemPO salaryItemPO = salaryItemMap.get(salaryItemId); ExpressFormula expressFormula; - if (salarySobBackItemMap.containsKey(salaryItemId)){ + if (salarySobBackItemMap.containsKey(salaryItemId)) { // 如果薪资账套的回算项目中重新定义了回算项目公式,则使用薪资账套下的公式 SalarySobBackItemPO salarySobBackItemPO = salarySobBackItemMap.get(salaryItemId); expressFormula = expressFormulaMap.get(salarySobBackItemPO.getFormulaId()); - } - else if (salaryItemIdKeySalarySobItemPOMap.containsKey(salaryItemId)) { + } else if (salaryItemIdKeySalarySobItemPOMap.containsKey(salaryItemId)) { // 如果薪资账套下重新定义了薪资项目的公式,则使用薪资账套下的公式,否则使用薪资项目本身的公式 SalarySobItemPO salarySobItemPO = salaryItemIdKeySalarySobItemPOMap.get(salaryItemId); expressFormula = expressFormulaMap.get(salarySobItemPO.getFormulaId()); @@ -229,8 +229,8 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc .setSalarySobId(salaryAcctEmployeePO.getSalarySobId()) .setSalaryItemId(salaryItemPO.getId()) .setResultValue(resultValue) - .setOriginResultValue(salaryAcctResultPOMap.get(salaryAcctEmployeePO.getEmployeeId()+"-"+salaryAcctEmployeePO.getTaxAgentId()+"-"+salaryItemId) == null - ? StringUtils.EMPTY : salaryAcctResultPOMap.get(salaryAcctEmployeePO.getEmployeeId()+"-"+salaryAcctEmployeePO.getTaxAgentId()+"-"+salaryItemId)) + .setOriginResultValue(salaryAcctResultPOMap.get(salaryAcctEmployeePO.getEmployeeId() + "-" + salaryAcctEmployeePO.getTaxAgentId() + "-" + salaryItemId) == null + ? StringUtils.EMPTY : salaryAcctResultPOMap.get(salaryAcctEmployeePO.getEmployeeId() + "-" + salaryAcctEmployeePO.getTaxAgentId() + "-" + salaryItemId)) .setCalculateKey(salaryAcctCalculateBO.getCalculateKey()) .setCreator((long) user.getUID()) .setCreateTime(now) @@ -271,8 +271,12 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc // 给公式中的变量填入值 try { List formulaVars = ExpressFormulaBO.buildFormulaVar4Accounting(expressFormula, formulaVarValueMap); - Object run = getFormulaRunService(user).run(expressFormula, formulaVars, simpleEmployee); - return run.toString(); + ExcelResult run = getFormulaRunService(user).run(expressFormula, formulaVars, simpleEmployee); + + if (run.isStatus()) { + return run.getData().toString(); + } + } catch (Exception e) { log.error("express execute fail ", e); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 573c4a6e9..e9bd1e77c 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -17,7 +17,6 @@ import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.param.TaxAgentRangeSaveParam; -import com.engine.salary.entity.taxagent.po.TaxAgentEmployeePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveListTypeEnum; @@ -30,7 +29,10 @@ import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; -import com.engine.salary.util.excel.*; +import com.engine.salary.util.excel.ExcelComment; +import com.engine.salary.util.excel.ExcelParseHelper; +import com.engine.salary.util.excel.ExcelSupport; +import com.engine.salary.util.excel.ExcelUtilPlus; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -713,7 +715,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch List salaryArchiveIds = salaryArchiveList.stream().map(SalaryArchivePO::getId).collect(Collectors.toList()); Map salaryArchivesMap = SalaryEntityUtil.convert2Map(salaryArchiveList, k -> k.getEmployeeId() + "-" + k.getTaxAgentId()); - List employees = getTaxAgentService(user).listEmployees(); +// List employees = getTaxAgentService(user).listEmployees(); // 查询人员状态 // List hrmStatusList = hrmCommonHrmStatusService.list(tenantKey); diff --git a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java index ba50bf39b..e5493758a 100644 --- a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java @@ -12,6 +12,7 @@ import com.engine.salary.enums.salaryformula.ReferenceTypeEnum; import com.engine.salary.enums.salaryformula.ReturnTypeEnum; import com.engine.salary.enums.salaryformula.ValidateTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.formlua.entity.standard.ExcelResult; import com.engine.salary.mapper.formula.FormulaMapper; import com.engine.salary.mapper.formula.FormulaVarMapper; import com.engine.salary.service.FormulaRunService; @@ -120,16 +121,34 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe throw new SalaryRunTimeException("校验类型异常"); } + //将select因XSS过滤造成的异常字符转换回来 + param.setFormula(param.getFormula().replaceAll("select", "select")); + param.setFormula(param.getFormula().replaceAll("SELECT", "SELECT")); + param.setFormula(param.getFormula().replaceAll("join", "join")); + param.setFormula(param.getFormula().replaceAll("JOIN", "JOIN")); + param.setFormula(param.getFormula().replaceAll("and", "and")); + param.setFormula(param.getFormula().replaceAll("AND", "AND")); + param.setFormula(param.getFormula().replaceAll("or", "or")); + param.setFormula(param.getFormula().replaceAll("OR", "OR")); + param.setFormula(param.getFormula().replaceAll("in", "in")); + param.setFormula(param.getFormula().replaceAll("IN", "IN")); + param.setFormula(param.getFormula().replaceAll("like", "like")); + param.setFormula(param.getFormula().replaceAll("LIKE", "like")); + param.setFormula(param.getFormula().replaceAll("exists", "exists")); + param.setFormula(param.getFormula().replaceAll("EXISTS", "EXISTS")); + param.setFormula(param.getFormula().replaceAll("between", "between")); + param.setFormula(param.getFormula().replaceAll("BETWEEN", "BETWEEN")); + // 解析公式中的参数 if (ReferenceTypeEnum.parseByValue(param.getReferenceType()) == ReferenceTypeEnum.FORMULA) { List parameterList = parseFormulaParameters(param.getFormula(), ReferenceTypeEnum.FORMULA); param.setParameters(parameterList); - }else if(ReferenceTypeEnum.parseByValue(param.getReferenceType()) == ReferenceTypeEnum.SQL){ + } else if (ReferenceTypeEnum.parseByValue(param.getReferenceType()) == ReferenceTypeEnum.SQL) { List parameterList = parseFormulaParameters(param.getFormula(), ReferenceTypeEnum.SQL); param.setParameters(parameterList); } int orderIndex = 0; - for(FormulaVar parameter : param.getParameters() ){ + for (FormulaVar parameter : param.getParameters()) { parameter.setOrderIndex(orderIndex++); } @@ -144,7 +163,6 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe String extendParam = param.getExtendParam(); if (ReferenceTypeEnum.parseByValue(param.getReferenceType()) == ReferenceTypeEnum.SQL) { - if (extendParam == null) { throw new SalaryRunTimeException("未设置SQL返回值"); } @@ -163,24 +181,6 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe if (StringUtils.isBlank(sqlReturnKey)) { throw new SalaryRunTimeException("未设置SQL返回值"); } - - //将select因XSS过滤造成的异常字符转换回来 - param.setFormula(param.getFormula().replaceAll("select", "select")); - param.setFormula(param.getFormula().replaceAll("SELECT", "SELECT")); - param.setFormula(param.getFormula().replaceAll("join", "join")); - param.setFormula(param.getFormula().replaceAll("JOIN", "JOIN")); - param.setFormula(param.getFormula().replaceAll("and", "and")); - param.setFormula(param.getFormula().replaceAll("AND", "AND")); - param.setFormula(param.getFormula().replaceAll("or", "or")); - param.setFormula(param.getFormula().replaceAll("OR", "OR")); - param.setFormula(param.getFormula().replaceAll("in", "in")); - param.setFormula(param.getFormula().replaceAll("IN", "IN")); - param.setFormula(param.getFormula().replaceAll("like", "like")); - param.setFormula(param.getFormula().replaceAll("LIKE", "like")); - param.setFormula(param.getFormula().replaceAll("exists", "exists")); - param.setFormula(param.getFormula().replaceAll("EXISTS", "EXISTS")); - param.setFormula(param.getFormula().replaceAll("between", "between")); - param.setFormula(param.getFormula().replaceAll("BETWEEN", "BETWEEN")); } //试运行公式 @@ -231,15 +231,15 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe return formulaPO; } - public List parseFormulaParameters(String formula, ReferenceTypeEnum referenceTypeEnum){ + public List parseFormulaParameters(String formula, ReferenceTypeEnum referenceTypeEnum) { List parameters = new ArrayList<>(); // 获取公式中所有可选的变量项目 Map> allParameters = getRemoteExcelService(user).allFieldList(referenceTypeEnum); List groups = new ArrayList<>(allParameters.keySet()); - StringBuilder reg =new StringBuilder("("); - for(int i =0; i < groups.size(); i++ ){ - reg.append("\\{"+ groups.get(i) +"\\."); - if(i+1 != groups.size()){ + StringBuilder reg = new StringBuilder("("); + for (int i = 0; i < groups.size(); i++) { + reg.append("\\{" + groups.get(i) + "\\."); + if (i + 1 != groups.size()) { reg.append("|"); } } @@ -250,50 +250,50 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe List vars = new ArrayList<>(); while (matcher.find()) { String var = matcher.group(0).replaceAll("\\{", "").replaceAll("}", ""); - if(StringUtils.isNotBlank(var)){ + if (StringUtils.isNotBlank(var)) { vars.add(var); } } // 去重 vars = vars.stream().distinct().collect(Collectors.toList()); - for(String var : vars){ + for (String var : vars) { String[] split = var.split("\\."); - if(split.length==2){ + if (split.length == 2) { List formulaVars = allParameters.get(split[0]); - if(formulaVars == null){ - throw new SalaryRunTimeException("保存失败,公式变量"+split[0]+"输入有误!"); + if (formulaVars == null) { + throw new SalaryRunTimeException("保存失败,公式变量" + split[0] + "输入有误!"); } Optional field = formulaVars.stream().filter(v -> Objects.equals(v.getName(), split[1])).findFirst(); - if(field.isPresent()){ + if (field.isPresent()) { FormulaVar formulaVar = field.get(); - String fieldName = "{" + split[0] + "." + split[1] +"}"; + String fieldName = "{" + split[0] + "." + split[1] + "}"; formulaVar.setFieldName(fieldName); parameters.add(formulaVar); - }else{ - throw new SalaryRunTimeException("保存失败,公式变量"+split[0]+split[1]+"输入有误!"); + } else { + throw new SalaryRunTimeException("保存失败,公式变量" + split[0] + split[1] + "输入有误!"); } - }else if(split.length > 2){ + } else if (split.length > 2) { // 变量名称中包含. List formulaVars = allParameters.get(split[0]); - if(formulaVars == null){ - throw new SalaryRunTimeException("保存失败,公式变量"+split[0]+"输入有误!"); + if (formulaVars == null) { + throw new SalaryRunTimeException("保存失败,公式变量" + split[0] + "输入有误!"); } StringBuilder field = new StringBuilder(""); - for(int i =1; i< split.length; i++){ - if(i != 1){ + for (int i = 1; i < split.length; i++) { + if (i != 1) { field.append("."); } field = field.append(split[i]); } String finalField = field.toString(); Optional optional = formulaVars.stream().filter(v -> Objects.equals(v.getName(), finalField)).findFirst(); - if(optional.isPresent()){ + if (optional.isPresent()) { FormulaVar formulaVar = optional.get(); - String fieldName = "{" + split[0] + "." + field +"}"; + String fieldName = "{" + split[0] + "." + field + "}"; formulaVar.setFieldName(fieldName); parameters.add(optional.get()); - }else{ - throw new SalaryRunTimeException("保存失败,公式变量"+split[0]+split[1]+"输入有误!"); + } else { + throw new SalaryRunTimeException("保存失败,公式变量" + split[0] + split[1] + "输入有误!"); } } } @@ -316,31 +316,27 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe 转换为实际的运行脚本 */ String formulaRunScript = param.getFormula(); - - List parameters = param.getParameters(); - for (int i = 0; i < parameters.size(); i++) { - FormulaVar po = parameters.get(i); - formulaRunScript = formulaRunScript.replace(po.getFieldName(), po.getFieldId()); - po.setContent(String.valueOf(i + 1)); - } - //验证公式是否可运行 - if (ReferenceTypeEnum.parseByValue(param.getReferenceType()) == ReferenceTypeEnum.FORMULA) { -// ExpressFormula test = ExpressFormula.builder().formulaRunScript(formulaRunScript).extendParam(param.getExtendParam()).referenceType(param.getReferenceType()).build(); -// Object run = null; -// try { -// run = getFormulaRunService(user).run(test, parameters, DataCollectionEmployee.builder().employeeId((long) user.getUID()).build()); -// } catch (Exception e) { -// log.error("express execute fail ", e); -// throw new SalaryRunTimeException("公式模拟运行出错,请检查公式配置!", e); -// } // -// if (run != null && StringUtils.isNotBlank(String.valueOf(run)) && returnTypeEnum == ReturnTypeEnum.NUMBER) { +// List parameters = param.getParameters(); +// for (int i = 0; i < parameters.size(); i++) { +// FormulaVar po = parameters.get(i); +// formulaRunScript = formulaRunScript.replace(po.getFieldName(), po.getFieldId()); +// po.setContent(String.valueOf(i + 1)); +// } +// //验证公式是否可运行 +// if (ReferenceTypeEnum.parseByValue(param.getReferenceType()) == ReferenceTypeEnum.FORMULA) { +// ExpressFormula test = ExpressFormula.builder().formulaRunScript(formulaRunScript).extendParam(param.getExtendParam()).referenceType(param.getReferenceType()).build(); +// ExcelResult run = getFormulaRunService(user).run(test, parameters, DataCollectionEmployee.builder().employeeId((long) user.getUID()).build()); +// +// if (run.isStatus()) { // //返回结果不是数字 -// if (!NumberUtils.isCreatable(String.valueOf(run))) { +// if (returnTypeEnum == ReturnTypeEnum.NUMBER && !NumberUtils.isCreatable(String.valueOf(run))) { // throw new SalaryRunTimeException("返回结果不是数值"); // } +// }else { +// throw new SalaryRunTimeException("公式配置异常"); // } - } +// } if (ReferenceTypeEnum.parseByValue(param.getReferenceType()) == ReferenceTypeEnum.SQL) { if (formulaRunScript.contains(";") || formulaRunScript.contains("--")) { @@ -357,18 +353,14 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe FormulaPO po = getFormulaMapper().getById(param.getId()); - ReturnTypeEnum returnTypeEnum = ReturnTypeEnum.parseByValue(po.getReturnType()); - //验证公式是否可运行 ExpressFormula test = ExpressFormula.builder().formulaRunScript(po.getFormulaRunScript()).extendParam(po.getExtendParam()).referenceType(po.getReferenceType()).build(); - Object run = null; - try { - run = getFormulaRunService(user).run(test, param.getParameters(), DataCollectionEmployee.builder().employeeId((long) user.getUID()).build()); - } catch (Exception e) { - log.error("express execute fail ", e); - throw new SalaryRunTimeException("公式测试运行出错,请检查公式配置!", e); + ExcelResult run = getFormulaRunService(user).run(test, param.getParameters(), DataCollectionEmployee.builder().employeeId((long) user.getUID()).build()); + if (run.isStatus()) { + return run.getData(); + } else { + return run.getErrorMsg(); } - return run; } @Override From fb271f435a6d17e8783dc612db6222e0c514c14e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 15 May 2023 10:00:59 +0800 Subject: [PATCH 087/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/formlua/core/QlExpress.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/formlua/core/QlExpress.java b/src/com/engine/salary/formlua/core/QlExpress.java index 9dbc51f7c..cefcd5bdc 100644 --- a/src/com/engine/salary/formlua/core/QlExpress.java +++ b/src/com/engine/salary/formlua/core/QlExpress.java @@ -268,7 +268,7 @@ public class QlExpress { // logger.error("err",e); // } } catch (Exception e) { - logger.error("err", e); + logger.error("初始化失败表达式", e); throw new RuntimeException("初始化失败表达式"); } } From 4ff15ca651b3210f484da2249c571689622b2ecb Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 15 May 2023 10:28:17 +0800 Subject: [PATCH 088/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E7=BC=96=E8=BE=91=E5=AF=BC=E5=85=A5=20?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultLogBO.java | 40 +++ .../param/SalaryAcctResultLogQueryParam.java | 73 +++++ .../salaryacct/po/SalaryAcctResultLogPO.java | 75 +++++ .../SalaryAcctResultDataSourceEnum.java | 56 ++++ .../salaryacct/SalaryAcctResultLogMapper.java | 81 +++++ .../salaryacct/SalaryAcctResultLogMapper.xml | 306 ++++++++++++++++++ .../service/SalaryAcctResultLogService.java | 72 +++++ .../impl/SalaryAcctExcelServiceImpl.java | 33 +- .../impl/SalaryAcctResultLogServiceImpl.java | 66 ++++ .../impl/SalaryAcctResultServiceImpl.java | 50 ++- 10 files changed, 840 insertions(+), 12 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultLogBO.java create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLogQueryParam.java create mode 100644 src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultLogPO.java create mode 100644 src/com/engine/salary/enums/salaryaccounting/SalaryAcctResultDataSourceEnum.java create mode 100644 src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java create mode 100644 src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.xml create mode 100644 src/com/engine/salary/service/SalaryAcctResultLogService.java create mode 100644 src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultLogBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultLogBO.java new file mode 100644 index 000000000..985880f3c --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultLogBO.java @@ -0,0 +1,40 @@ +package com.engine.salary.entity.salaryacct.bo; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultLogPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; +import dm.jdbc.util.IdGenerator; +import org.apache.commons.lang3.math.NumberUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author Harryxzy + * @date 2023/05/12 16:54 + * @description + */ +public class SalaryAcctResultLogBO { + + public static List buildSalaryAcctResultLog(List salaryAcctResultList, Long uid, SalaryAcctResultDataSourceEnum datasource){ + Date now = new Date(); + List needInsertList = new ArrayList<>(); + salaryAcctResultList.stream().forEach(PO -> { + needInsertList.add(SalaryAcctResultLogPO.builder() + .id(IdGenerator.generate()) + .datasource(datasource.getValue()) + .salaryAcctRecordId(PO.getSalaryAcctRecordId()) + .salaryAcctResultId(PO.getId()) + .salaryAcctEmpId(PO.getSalaryAcctEmpId()) + .salaryItemId(PO.getSalaryItemId()) + .employeeId(PO.getEmployeeId()) + .operator(uid) + .operateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .updateTime(now) + .build()); + }); + return needInsertList; + } +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLogQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLogQueryParam.java new file mode 100644 index 000000000..b38d9d2b8 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLogQueryParam.java @@ -0,0 +1,73 @@ +package com.engine.salary.entity.salaryacct.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author Harryxzy + * @date 2023/05/12 15:14 + * @description 薪资核算结果来源 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryAcctResultLogQueryParam { + + /** + * 主键id + */ + private Long id; + + /** + * 数据来源:1:手动编辑、2:导入 + */ + private Integer datasource; + + /** + * 薪资核算记录id + */ + private Long salaryAcctRecordId; + + /** + * 薪资核算结果id + */ + private Long salaryAcctResultId; + + /** + * 薪资核算人员id + */ + private Long salaryAcctEmpId; + + + /** + * 薪资项目id + */ + private Long salaryItemId; + + /** + * 人员id + */ + private Long employeeId; + + /** + * 操作人 + */ + private Long operator; + + + /** + * 操作时间 + */ + private Date operateTime; + + /** + * 是否已删除。0:未删除、1:已删除 + */ + private Integer deleteType; +} diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultLogPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultLogPO.java new file mode 100644 index 000000000..e3d2bed60 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultLogPO.java @@ -0,0 +1,75 @@ +package com.engine.salary.entity.salaryacct.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author Harryxzy + * @date 2023/05/12 15:14 + * @description 薪资核算结果来源 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryAcctResultLogPO { + + /** + * 主键id + */ + private Long id; + + /** + * 数据来源:1:手动编辑、2:导入 + */ + private Integer datasource; + + /** + * 薪资核算记录id + */ + private Long salaryAcctRecordId; + + /** + * 薪资核算结果id + */ + private Long salaryAcctResultId; + + /** + * 薪资核算人员id + */ + private Long salaryAcctEmpId; + + + /** + * 薪资项目id + */ + private Long salaryItemId; + + /** + * 人员id + */ + private Long employeeId; + + /** + * 操作人 + */ + private Long operator; + + + /** + * 操作时间 + */ + private Date operateTime; + + /** + * 是否已删除。0:未删除、1:已删除 + */ + private Integer deleteType; + + private Date updateTime; +} diff --git a/src/com/engine/salary/enums/salaryaccounting/SalaryAcctResultDataSourceEnum.java b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctResultDataSourceEnum.java new file mode 100644 index 000000000..e2d498049 --- /dev/null +++ b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctResultDataSourceEnum.java @@ -0,0 +1,56 @@ +package com.engine.salary.enums.salaryaccounting; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 薪资核算结果的数据来源 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum SalaryAcctResultDataSourceEnum implements BaseEnum { + + EDIT(1, "手动编辑", 91870), + IMPORT(2, "导入", 91862) + ; + + private int value; + + private String defaultLabel; + + private int labelId; + + SalaryAcctResultDataSourceEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + public static SalaryAcctResultDataSourceEnum parseByValue(Integer value) { + for (SalaryAcctResultDataSourceEnum SalaryAcctResultDataSourceEnum : SalaryAcctResultDataSourceEnum.values()) { + if (Objects.equals(SalaryAcctResultDataSourceEnum.getValue(), value)) { + return SalaryAcctResultDataSourceEnum; + } + } + return null; + } +} diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java new file mode 100644 index 000000000..13229c4f1 --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java @@ -0,0 +1,81 @@ +package com.engine.salary.mapper.salaryacct; + +import com.engine.salary.entity.salaryacct.param.SalaryAcctResultLogQueryParam; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultLogPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.Date; +import java.util.List; + +/** + * @author Harryxzy + * @date 2023/05/12 15:21 + * @description + */ +public interface SalaryAcctResultLogMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryAcctResultLogQueryParam queryParam); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryAcctResultLogPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param salaryAcctResultLog 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 修改,修改所有字段 + * + * @param salaryAcctResultLog 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 修改,忽略null字段 + * + * @param salaryAcctResultLog 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 删除记录 + * + * @param salaryAcctResultLog 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryAcctResultLogPO salaryAcctResultLog); + + void batchInsert(List SalaryAcctResultLogList); + + /** + * 根据薪资核算人员删除数据,除了已经锁定的值 + * @param salaryAcctEmployeeIds + * @param lockSalaryItemIds + */ + void deleteBySalaryAcctEmpIdExceptItemIds(@Param("salaryAcctEmployeeIds") Collection salaryAcctEmployeeIds, + @Param("exceptItems") Collection lockSalaryItemIds, @Param("updateTime") Date updateTime); +} diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.xml new file mode 100644 index 000000000..66f70fa85 --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.xml @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + t.datasource + , t.delete_type + , t.employee_id + , t.id + , t.operate_time + , t.operator + , t.salary_acct_emp_id + , t.salary_acct_record_id + , t.salary_acct_result_id + , t.salary_item_id + + + + + + + + + + + + + + + INSERT INTO hrsa_salary_acct_result_log + + + + datasource, + + + delete_type, + + + employee_id, + + + id, + + + operate_time, + + + operator, + + + salary_acct_emp_id, + + + salary_acct_record_id, + + + salary_acct_result_id, + + + salary_item_id, + + + + + #{datasource}, + + + #{deleteType}, + + + #{employeeId}, + + + #{id}, + + + #{operateTime}, + + + #{operator}, + + + #{salaryAcctEmpId}, + + + #{salaryAcctRecordId}, + + + #{salaryAcctResultId}, + + + #{salaryItemId}, + + + + + + INSERT INTO hrsa_salary_acct_result_log(id, datasource, salary_acct_record_id, salary_acct_result_id, salary_acct_emp_id, + salary_item_id, employee_id, operator, operate_time, delete_type, update_time) + VALUES + + ( + #{item.id}, + #{item.datasource}, + #{item.salaryAcctRecordId}, + #{item.salaryAcctResultId}, + #{item.salaryAcctEmpId}, + #{item.salaryItemId}, + #{item.employeeId}, + #{item.operator}, + #{item.operateTime}, + #{item.deleteType}, + #{item.updateTime} + ) + + + + INSERT INTO hrsa_salary_acct_result_log(id, datasource, salary_acct_record_id, salary_acct_result_id, salary_acct_emp_id, + salary_item_id, employee_id, operator, operate_time, delete_type, update_time) + + select + #{item.id,jdbcType=DOUBLE}, + #{item.datasource,jdbcType=INTEGER}, + #{item.salaryAcctRecordId,jdbcType=DOUBLE}, + #{item.salaryAcctResultId,jdbcType=DOUBLE}, + #{item.salaryAcctEmpId,jdbcType=DOUBLE}, + #{item.salaryItemId,jdbcType=DOUBLE}, + #{item.employeeId,jdbcType=DOUBLE}, + #{item.operator,jdbcType=,jdbcType=DOUBLE}, + #{item.operateTime,jdbcType=DATE}, + #{item.deleteType,jdbcType=INTEGER}, + #{item.updateTime,jdbcType=DATE} + from dual + + + + + INSERT INTO hrsa_salary_acct_result_log(id, datasource, salary_acct_record_id, salary_acct_result_id, salary_acct_emp_id, + salary_item_id, employee_id, operator, operate_time, delete_type, update_time) + VALUES + ( + #{item.id}, + #{item.datasource}, + #{item.salaryAcctRecordId}, + #{item.salaryAcctResultId}, + #{item.salaryAcctEmpId}, + #{item.salaryItemId}, + #{item.employeeId}, + #{item.operator}, + #{item.operateTime}, + #{item.deleteType}, + #{item.updateTime} + ) + + + + + + UPDATE hrsa_salary_acct_result_log + + datasource=#{datasource}, + delete_type=#{deleteType}, + employee_id=#{employeeId}, + operate_time=#{operateTime}, + operator=#{operator}, + salary_acct_emp_id=#{salaryAcctEmpId}, + salary_acct_record_id=#{salaryAcctRecordId}, + salary_acct_result_id=#{salaryAcctResultId}, + salary_item_id=#{salaryItemId}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_acct_result_log + + + datasource=#{datasource}, + + + delete_type=#{deleteType}, + + + employee_id=#{employeeId}, + + + operate_time=#{operateTime}, + + + operator=#{operator}, + + + salary_acct_emp_id=#{salaryAcctEmpId}, + + + salary_acct_record_id=#{salaryAcctRecordId}, + + + salary_acct_result_id=#{salaryAcctResultId}, + + + salary_item_id=#{salaryItemId}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_acct_result_log + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + + + UPDATE hrsa_salary_acct_result_log + SET delete_type=1, update_time = #{updateTime} + WHERE delete_type = 0 + + AND salary_acct_emp_id IN + + #{acctEmpId} + + + + + AND salary_item_id NOT IN + + #{itemId} + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryAcctResultLogService.java b/src/com/engine/salary/service/SalaryAcctResultLogService.java new file mode 100644 index 000000000..8edcf222d --- /dev/null +++ b/src/com/engine/salary/service/SalaryAcctResultLogService.java @@ -0,0 +1,72 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultLogPO; + +import java.util.Collection; +import java.util.List; + +/** + * @author Harryxzy + * @date 2023/05/12 15:27 + * @description 薪资核算结果数据来源 + */ +public interface SalaryAcctResultLogService { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryAcctResultLogPO getById(Long id); + + + /** + * 新增,忽略null字段 + * + * @param salaryAcctResultLog 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 修改,修改所有字段 + * + * @param salaryAcctResultLog 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 修改,忽略null字段 + * + * @param salaryAcctResultLog 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 删除记录 + * + * @param salaryAcctResultLog 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryAcctResultLogPO salaryAcctResultLog); + + void batchInsert(List salaryAcctResultLogList); + + /** + * 根据薪资核算人员删除数据,除了已经锁定的值 + * @param salaryAcctEmployeeIds + * @param lockSalaryItemIds + */ + void deleteBySalaryAcctEmpIdExceptItemIds(Collection salaryAcctEmployeeIds, Collection lockSalaryItemIds); +} diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index cab21170f..56a1cc819 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -11,14 +11,12 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultLogBO; import com.engine.salary.entity.salaryacct.dto.SalaryAccEmployeeListDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO; import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO; import com.engine.salary.entity.salaryacct.param.*; -import com.engine.salary.entity.salaryacct.po.ExcelAcctResultPO; -import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; -import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; -import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; @@ -28,6 +26,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.service.*; @@ -136,6 +135,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } + private SalaryAcctResultLogService getSalaryAcctResultLogService(User user) { + return ServiceUtil.getService(SalaryAcctResultLogServiceImpl.class, user); + } + @Override public XSSFWorkbook exportSalaryAcctEmployee(SalaryAcctEmployeeQueryParam queryParam) { ValidUtil.doValidator(queryParam); @@ -1014,6 +1017,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 处理导入薪资项的回算值 handleOriginResultValue(deleteResults, salaryAcctResults); getSalaryAcctResultService(user).batchSave(salaryAcctResults); + // 存储薪资核算结果数据来源日志 + new Thread() { + public void run() { + handleSalaryAcctResultLog(salaryAcctResults); + } + }.start(); //报表 getSalaryAcctReportService(user).batchSave(salaryAcctReports); } @@ -1035,6 +1044,22 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return apidatas; } + /** + * 存储薪资核算结果数据来源日志 + * @param salaryAcctResults + */ + private void handleSalaryAcctResultLog(List salaryAcctResults) { + Set salaryAcctEmpIds = salaryAcctResults.stream().map(SalaryAcctResultPO::getSalaryAcctEmpId).collect(Collectors.toSet()); + Set salaryItemIds = salaryAcctResults.stream().map(SalaryAcctResultPO::getSalaryItemId).collect(Collectors.toSet()); + // 查询导入的薪资核算结果 + List salaryAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); + Long uid = Long.valueOf(user.getUID()); + List needInsertList = SalaryAcctResultLogBO.buildSalaryAcctResultLog(salaryAcctResultList, uid, SalaryAcctResultDataSourceEnum.IMPORT); + if(CollectionUtils.isNotEmpty(needInsertList)){ + getSalaryAcctResultLogService(user).batchInsert(needInsertList); + } + } + /** * @description * @return void diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java new file mode 100644 index 000000000..72a128c1e --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java @@ -0,0 +1,66 @@ +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultLogPO; +import com.engine.salary.mapper.salaryacct.SalaryAcctResultLogMapper; +import com.engine.salary.service.SalaryAcctResultLogService; +import com.engine.salary.util.db.MapperProxyFactory; +import com.google.common.collect.Lists; + +import java.util.Collection; +import java.util.Date; +import java.util.List; + +/** + * @author Harryxzy + * @date 2023/05/12 15:29 + * @description + */ +public class SalaryAcctResultLogServiceImpl extends Service implements SalaryAcctResultLogService { + + private SalaryAcctResultLogMapper getSalaryAcctResultLogMapper() { + return MapperProxyFactory.getProxy(SalaryAcctResultLogMapper.class); + } + + @Override + public List listAll() { + return getSalaryAcctResultLogMapper().listAll(); + } + + @Override + public SalaryAcctResultLogPO getById(Long id) { + return getSalaryAcctResultLogMapper().getById(id); + } + + @Override + public int insertIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog) { + return getSalaryAcctResultLogMapper().insertIgnoreNull(salaryAcctResultLog); + } + + + @Override + public int update(SalaryAcctResultLogPO salaryAcctResultLog) { + return getSalaryAcctResultLogMapper().update(salaryAcctResultLog); + } + + @Override + public int updateIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog) { + return getSalaryAcctResultLogMapper().updateIgnoreNull(salaryAcctResultLog); + } + + @Override + public int delete(SalaryAcctResultLogPO salaryAcctResultLog) { + return getSalaryAcctResultLogMapper().delete(salaryAcctResultLog); + } + + @Override + public void batchInsert(List salaryAcctResultLogList) { + List> partition = Lists.partition(salaryAcctResultLogList, 50); + partition.forEach(getSalaryAcctResultLogMapper()::batchInsert); + } + + @Override + public void deleteBySalaryAcctEmpIdExceptItemIds(Collection salaryAcctEmployeeIds, Collection lockSalaryItemIds) { + getSalaryAcctResultLogMapper().deleteBySalaryAcctEmpIdExceptItemIds(salaryAcctEmployeeIds,lockSalaryItemIds, new Date()); + } +} diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 8ea761ec2..43cd4a00d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -9,19 +9,13 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; import com.engine.salary.entity.report.bo.SalaryAcctResultReportBO; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; -import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculateBO; -import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculatePriorityBO; -import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO; -import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; +import com.engine.salary.entity.salaryacct.bo.*; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.*; -import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; -import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; -import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; -import com.engine.salary.entity.salaryacct.po.SalaryAcctResultTempPO; +import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.*; @@ -30,6 +24,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; +import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -156,6 +151,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); } + private SalaryAcctResultLogService getSalaryAcctResultLogService(User user) { + return ServiceUtil.getService(SalaryAcctResultLogServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; @@ -550,6 +549,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); } + // 存储薪资核算结果数据来源日志 + saveSalaryAcctResultLog(salaryAcctResultPOSOld,salaryAcctResultPOS); + // 查询操作日志的targetName // String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(salaryAcctEmployeePO.getSalaryAcctRecordId()); // 查询人员信息 @@ -568,6 +570,25 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // salaryAcctRecordLoggerTemplate.write(loggerContext); } + /** + * 存储薪资核算结果数据来源日志 + * @param salaryAcctResultPOSOld + * @param salaryAcctResultPOS + */ + private void saveSalaryAcctResultLog(List salaryAcctResultPOSOld, List salaryAcctResultPOS) { + // 对比核算结果提取修改了哪些薪资项目 + List editItems = new ArrayList<>(); + Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); + salaryAcctResultPOS.stream().forEach(PO -> { + String oldValue = oldResutMap.get(PO.getSalaryItemId()).getResultValue(); + if(!StringUtils.equals(oldValue,PO.getResultValue())){ + editItems.add(PO); + } + }); + List needInsertList = SalaryAcctResultLogBO.buildSalaryAcctResultLog(editItems, Long.valueOf(user.getUID()), SalaryAcctResultDataSourceEnum.EDIT); + getSalaryAcctResultLogService(user).batchInsert(needInsertList); + } + @Override public void batchSave(Collection salaryAcctResultPOS) { @@ -730,6 +751,19 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // salaryCheckResultService.check(salaryAcctCheckParam, true, simpleEmployee); // Thread.sleep(10); getSalaryAcctProgressService(user).finish(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), true); + + // 存储薪资核算数据来源日志 + new Thread() { + public void run() { + List exceptItemIds = new ArrayList<>(); + List salaryAcctEmployeeIds = salaryAcctEmployeePOS.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + exceptItemIds.addAll(lockSalaryItemIds); + exceptItemIds.addAll(salaryItemPOS.stream().filter(PO -> Objects.equals(PO.getValueType(), NumberUtils.INTEGER_ONE) && + Objects.equals(PO.getUseInEmployeeSalary(),0)) + .map(SalaryItemPO::getId).collect(Collectors.toList()) ); + getSalaryAcctResultLogService(user).deleteBySalaryAcctEmpIdExceptItemIds(salaryAcctEmployeeIds, exceptItemIds); + } + }.start(); // 记录日志 // 查询操作日志的targetName // String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(calculateParam.getSalaryAcctRecordId()); From cf6b35f6a00bbe01a5edfe4f5eec56573b667522 Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 15 May 2023 13:58:06 +0800 Subject: [PATCH 089/245] =?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=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=E5=88=97=E8=A1=A8=E8=A1=A8?= =?UTF-8?q?=E5=A4=B4=E8=BF=87=E7=A8=8B=E4=B8=AD=EF=BC=8C=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E6=BA=90=E6=95=B0=E6=8D=AE=E4=B8=AD=E4=BA=BA=E5=91=98id?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E7=9A=84=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index 5b2d3bb85..6945625f7 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -1103,6 +1103,7 @@ public class SIArchivesBiz { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); Map> result = new HashMap<>(); + insuranceArchivesEmployeePOS = insuranceArchivesEmployeePOS.stream().filter(f -> f.getEmployeeId() != null).collect(Collectors.toList()); insuranceArchivesEmployeePOS = insuranceArchivesEmployeePOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesEmployeePO::getEmployeeId))), ArrayList::new)); try { From e28ca6a2d0335745aaa63929937da5a7776a0f45 Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 15 May 2023 14:45:06 +0800 Subject: [PATCH 090/245] =?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=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=E5=88=97=E8=A1=A8=E8=A1=A8?= =?UTF-8?q?=E5=A4=B4=E8=BF=87=E7=A8=8B=E4=B8=AD=EF=BC=8C=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E6=BA=90=E6=95=B0=E6=8D=AE=E4=B8=AD=E4=BA=BA=E5=91=98id?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E7=9A=84=E6=95=B0=E6=8D=AEv2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index 6945625f7..a977984ca 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -1103,8 +1103,7 @@ public class SIArchivesBiz { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); Map> result = new HashMap<>(); - insuranceArchivesEmployeePOS = insuranceArchivesEmployeePOS.stream().filter(f -> f.getEmployeeId() != null).collect(Collectors.toList()); - insuranceArchivesEmployeePOS = insuranceArchivesEmployeePOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesEmployeePO::getEmployeeId))), ArrayList::new)); + insuranceArchivesEmployeePOS = insuranceArchivesEmployeePOS.stream().filter(f -> f.getEmployeeId() != null).collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesEmployeePO::getEmployeeId))), ArrayList::new)); try { SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); From 6fcfc2db9b2751404fc50d35faf9644c87e70402 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 15 May 2023 16:47:00 +0800 Subject: [PATCH 091/245] =?UTF-8?q?=E5=AE=9A=E8=96=AAaction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/action/CheckInitSalaryAction.java | 136 ++++++++++++++++++ .../salary/action/InitSalaryAction.java | 136 ++++++++++++++++++ 2 files changed, 272 insertions(+) create mode 100644 src/com/engine/salary/action/CheckInitSalaryAction.java create mode 100644 src/com/engine/salary/action/InitSalaryAction.java diff --git a/src/com/engine/salary/action/CheckInitSalaryAction.java b/src/com/engine/salary/action/CheckInitSalaryAction.java new file mode 100644 index 000000000..d93217792 --- /dev/null +++ b/src/com/engine/salary/action/CheckInitSalaryAction.java @@ -0,0 +1,136 @@ +package com.engine.salary.action; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.wrapper.SalaryArchiveWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +public class CheckInitSalaryAction implements Action { + + + private SalaryArchiveWrapper getSalaryArchiveWrapper(User user) { + return ServiceUtil.getService(SalaryArchiveWrapper.class, user); + } + + private String tableName; + + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + @Override + public String execute(RequestInfo requestInfo) { + try { + + Property[] properties = requestInfo.getMainTableInfo().getProperty(); + Map fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName, + property -> Util.null2String(property.getValue()))); + + + RecordSet rs = new RecordSet(); + + String queryImageId = "select salaryname,processfield from " + tableName + " where workflowid = ?"; + rs.executeQuery(queryImageId, requestInfo.getWorkflowid()); + + List list = new ArrayList<>(); + while (rs.next()) { + String processField = rs.getString("processfield"); + String salaryName = rs.getString("salaryname"); + String value = fieldMap.get(processField); + list.add(new SalaryField(processField, salaryName, value)); + } + List> importData = new ArrayList<>(); + Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); + if(!importDataMap.containsKey("生效日期")){ + importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); + } + if(!importDataMap.containsKey("最后发薪日期")){ + importDataMap.put("最后发薪日期", ""); + } + importData.add(importDataMap); + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .build(); + + //操作人 + String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(SalaryField::getValue).orElse("1"); + Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).checkSalaryArchiveInit(build); + + List errorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(errorNotice)) { + log.error("定薪检查存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + requestInfo.getRequestManager().setMessage(message.toString()); + return FAILURE_AND_CONTINUE; + } + } 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/action/InitSalaryAction.java b/src/com/engine/salary/action/InitSalaryAction.java new file mode 100644 index 000000000..25e0669c8 --- /dev/null +++ b/src/com/engine/salary/action/InitSalaryAction.java @@ -0,0 +1,136 @@ +package com.engine.salary.action; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.wrapper.SalaryArchiveWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +public class InitSalaryAction implements Action { + + + private SalaryArchiveWrapper getSalaryArchiveWrapper(User user) { + return ServiceUtil.getService(SalaryArchiveWrapper.class, user); + } + + private String tableName; + + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + @Override + public String execute(RequestInfo requestInfo) { + try { + + Property[] properties = requestInfo.getMainTableInfo().getProperty(); + Map fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName, + property -> Util.null2String(property.getValue()))); + + + RecordSet rs = new RecordSet(); + + String queryImageId = "select salaryname,processfield from " + tableName + " where workflowid = ?"; + rs.executeQuery(queryImageId, requestInfo.getWorkflowid()); + + List list = new ArrayList<>(); + while (rs.next()) { + String processField = rs.getString("processfield"); + String salaryName = rs.getString("salaryname"); + String value = fieldMap.get(processField); + list.add(new SalaryField(processField, salaryName, value)); + } + List> importData = new ArrayList<>(); + Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); + if(!importDataMap.containsKey("生效日期")){ + importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); + } + if(!importDataMap.containsKey("最后发薪日期")){ + importDataMap.put("最后发薪日期", ""); + } + importData.add(importDataMap); + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .build(); + + //操作人 + String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(SalaryField::getValue).orElse("1"); + Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).importSalaryArchiveInit(build); + + List errorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(errorNotice)) { + log.error("调薪存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + requestInfo.getRequestManager().setMessage(message.toString()); + return FAILURE_AND_CONTINUE; + } + } 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; + } + } +} From 7c741491845c7a4421e06fb9389cafc42f76637a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 15 May 2023 18:02:22 +0800 Subject: [PATCH 092/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=20=E9=80=89=E6=8B=A9=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=88=86=E7=B1=BB=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 4 +- .../dto/SalaryAcctImportFieldDTO.java | 37 +++++++-- .../impl/SalaryAcctExcelServiceImpl.java | 83 +++++++++++++------ 3 files changed, 89 insertions(+), 35 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 8822dcc6d..df92e4715 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -438,7 +438,7 @@ public class SalaryAcctResultBO { .build(); } - private static List sortGroup(List salarySobItemGroupPOS) { + public static List sortGroup(List salarySobItemGroupPOS) { if(CollectionUtils.isEmpty(salarySobItemGroupPOS)){ return Collections.emptyList(); } @@ -449,7 +449,7 @@ public class SalaryAcctResultBO { * 薪资账套的薪资项目按照sortedIndex排序 * */ - private static void sortItem(Map> salarySobItemPOMap) { + public static void sortItem(Map> salarySobItemPOMap) { for(Map.Entry> entry : salarySobItemPOMap.entrySet()){ List items = entry.getValue(); if (CollectionUtils.isNotEmpty(items)) { diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java index d954e319a..67d3560e6 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java @@ -5,7 +5,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Collection; import java.util.List; /** @@ -22,14 +21,17 @@ import java.util.List; @AllArgsConstructor public class SalaryAcctImportFieldDTO { - //公式项 - private Collection formulaItems; +// //公式项 +// private Collection formulaItems; +// +// //sql项 +// private Collection sqlItems; +// +// //输入项 +// private Collection inputItems; - //sql项 - private Collection sqlItems; - - //输入项 - private Collection inputItems; + // 根据账套分组的薪资项目 + private List itemsByGroup; // 缓存勾选项目 private List checkItems; @@ -46,4 +48,23 @@ public class SalaryAcctImportFieldDTO { //薪资项目名称 private String salaryItemName; } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ImportFieldByGroupDTO { + + //薪资账套分组id") + private Long salarySobItemGroupId; + + //薪资项目分组名称") + private String salarySobItemGroupName; + + //分组中包含的薪资项目 + private List salaryItems; + + //分组顺序 + private Integer sortedIndex; + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index e232cd3b8..fa4a0aed7 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -24,9 +24,9 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; +import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; -import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -119,6 +119,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return (SalaryEmployeeService) ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private SalarySobItemGroupService getSalarySobItemGroupService(User user) { + return ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; private SalaryCheckResultDetailService salaryCheckResultDetailService; @@ -376,36 +380,65 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc Set salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); // 查询薪资项目 List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); - // 薪资项目中的公式项 - List formulaItems = salaryItems.stream() - .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.FORMULA.getValue())) - .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() - .salaryItemId(salaryItemPO.getId()) - .salaryItemName(salaryItemPO.getName()) + Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); + + Map> salarySobItemPOMap = SalaryEntityUtil.group2Map(salarySobItems, SalarySobItemPO::getSalarySobItemGroupId); + + // 查询薪资账套的薪资项目分类 + List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 对分组进行排序 + salarySobItemGroupPOS = SalaryAcctResultBO.sortGroup(salarySobItemGroupPOS); + // 对分组内薪资项目排序 + SalaryAcctResultBO.sortItem(salarySobItemPOMap); + // 根据账套分组封装薪资项目的值 + List itemsByGroup = new ArrayList<>(); + for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ + List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); + List items = groupItems.stream() + .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() + .salaryItemId(salarySobItemPO.getSalaryItemId()) + .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .build()) - .collect(Collectors.toList()); - // 薪资项目中的SQl项 - List sqlItems = salaryItems.stream() - .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.SQL.getValue())) - .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() - .salaryItemId(salaryItemPO.getId()) - .salaryItemName(salaryItemPO.getName()) - .build()) - .collect(Collectors.toList()); - // 薪资项目中的输入项 - List inputItems = salaryItems.stream() - .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.INPUT.getValue())) - .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() - .salaryItemId(salaryItemPO.getId()) - .salaryItemName(salaryItemPO.getName()) - .build()) - .collect(Collectors.toList()); + .collect(Collectors.toList()); + + itemsByGroup.add(SalaryAcctImportFieldDTO.ImportFieldByGroupDTO.builder() + .salarySobItemGroupId(groupPO.getId()) + .salarySobItemGroupName(groupPO.getName()) + .salaryItems(items) + .sortedIndex(groupPO.getSortedIndex()).build() ); + } + +// // 薪资项目中的公式项 +// List formulaItems = salaryItems.stream() +// .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.FORMULA.getValue())) +// .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() +// .salaryItemId(salaryItemPO.getId()) +// .salaryItemName(salaryItemPO.getName()) +// .build()) +// .collect(Collectors.toList()); +// // 薪资项目中的SQl项 +// List sqlItems = salaryItems.stream() +// .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.SQL.getValue())) +// .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() +// .salaryItemId(salaryItemPO.getId()) +// .salaryItemName(salaryItemPO.getName()) +// .build()) +// .collect(Collectors.toList()); +// // 薪资项目中的输入项 +// List inputItems = salaryItems.stream() +// .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.INPUT.getValue())) +// .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() +// .salaryItemId(salaryItemPO.getId()) +// .salaryItemName(salaryItemPO.getName()) +// .build()) +// .collect(Collectors.toList()); // 缓存勾选 String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; String cacheValue = (String)Util_DataCache.getObjVal(cacheKey); List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); // 转换成dto - return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); +// return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); + return SalaryAcctImportFieldDTO.builder().itemsByGroup(itemsByGroup).checkItems(checkItems).build(); } @Override From a6fc40a084d203f2256f854ede068ba96cd88afc Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 16 May 2023 14:12:49 +0800 Subject: [PATCH 093/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=20?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=88=97=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index df92e4715..97ef9afae 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -409,16 +409,16 @@ public class SalaryAcctResultBO { .sortedIndex(groupPO.getSortedIndex()).build() ); } - // 公式项的值(不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段) - List formulaItems = salarySobItemPOS.stream() - .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0) - .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) - .collect(Collectors.toList()); - // 输入/导入项目的值 - List inputItems = salarySobItemPOS.stream() - .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() <= 0) - .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) - .collect(Collectors.toList()); +// // 公式项的值(不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段) +// List formulaItems = salarySobItemPOS.stream() +// .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0) +// .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) +// .collect(Collectors.toList()); +// // 输入/导入项目的值 +// List inputItems = salarySobItemPOS.stream() +// .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() <= 0) +// .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) +// .collect(Collectors.toList()); // // TODO 临时处理,后续删除,将已发补发加入输入、导入 // formulaItems.addAll(salarySobBackItemPOS.stream() // .map(salarySobBackItemPO -> backItemConvert2SalaryAcctResultDetailItemDTO(salarySobBackItemPO, salaryBackItemMap.get(salarySobBackItemPO.getSalaryItemId()), resultValueMap, salaryBackItemFormula)) @@ -431,8 +431,8 @@ public class SalaryAcctResultBO { .id(salaryAcctEmployee.getId()) .employeeId(salaryAcctEmployee.getEmployeeId()) .employeeInfos(employeeInfos) - .formulaItems(formulaItems) - .inputItems(inputItems) +// .formulaItems(formulaItems) +// .inputItems(inputItems) .itemsByGroup(itemsByGroup) .issuedAndReissueItems(issuedAndReissueItems) .build(); From a3ee91db15f98a09258e1b93dab389dfaa7e6e13 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 16 May 2023 15:05:02 +0800 Subject: [PATCH 094/245] =?UTF-8?q?=E5=9B=9E=E7=AE=97=E5=90=8E=E4=B8=8D?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E5=88=A0=E9=99=A4=E8=96=AA=E8=B5=84=E6=A0=B8?= =?UTF-8?q?=E7=AE=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctRecordBO.java | 4 +- .../salarybill/SalarySendInfoMapper.java | 2 + .../salarybill/SalarySendInfoMapper.xml | 9 ++++ .../mapper/salarybill/SalarySendMapper.java | 3 ++ .../mapper/salarybill/SalarySendMapper.xml | 8 ++++ .../salary/service/SalarySendService.java | 7 ++++ .../impl/SalaryAcctRecordServiceImpl.java | 3 ++ .../service/impl/SalarySendServiceImpl.java | 42 +++++++++++++++---- 8 files changed, 69 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java index db327ce8a..6f40a8d19 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java @@ -63,7 +63,9 @@ public class SalaryAcctRecordBO { List btnList = new ArrayList<>(); if (SalaryAcctRecordStatusEnum.NOT_ARCHIVED == salaryAcctRecordStatusEnum) { btnList.add(new WeaTableOperate("核算", null, "0")); - btnList.add(new WeaTableOperate("删除", null, "0")); + if(!Objects.equals(salaryAcctRecordPO.getBackCalcStatus(),NumberUtils.INTEGER_ONE)){ + btnList.add(new WeaTableOperate("删除", null, "0")); + } btnList.add(new WeaTableOperate("归档", null, "0")); } else if (SalaryAcctRecordStatusEnum.ARCHIVED == salaryAcctRecordStatusEnum && ( salarySendMap.get(salaryAcctRecordPO.getId()) ==Boolean.TRUE ) ){ btnList.add(new WeaTableOperate("查看", null, "0")); diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.java b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.java index 0def86342..ab67d35c0 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.java +++ b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.java @@ -97,4 +97,6 @@ public interface SalarySendInfoMapper { * @param po */ void updateIgnoreNull(SalarySendInfoPO po); + + void deleteBySalaryAcctRecordIds(@Param("salaryAcctRecordId") Collection ids); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml index 6fbbfd5b8..9150f856f 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml @@ -37,6 +37,15 @@ , t.tenant_key , t.salary_acct_type + + update hrsa_salary_send_info + set delete_type = 1 + where salary_acct_record_id in + + #{id} + + + SELECT diff --git a/src/com/engine/salary/service/SalarySendService.java b/src/com/engine/salary/service/SalarySendService.java index 1a590970f..b55c5a560 100644 --- a/src/com/engine/salary/service/SalarySendService.java +++ b/src/com/engine/salary/service/SalarySendService.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; @@ -157,4 +158,10 @@ public interface SalarySendService { * @return */ Map sumRow(SalarySendInfoQueryParam queryParam); + + /** + * 根据薪资核算id删除 工资单 + * @param ids + */ + void deleteBySalaryAcctRecordIds(Collection ids); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index f3b6e671a..f45782315 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -496,6 +496,9 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe // salaryCheckResultDetailService.deleteBySalaryAcctRecordIds(ids); // 删除线下导入结果 getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(ids); + // 删除回算前的工资单 +// getSalarySendService(user).deleteBySalaryAcctRecordIds(ids); + // 变更核算次数 List toUpdateAcctTimesRecordPOS = listBySalarySobIds(salarySobIds); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index d2672d07c..ae8f6a539 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -496,12 +496,29 @@ public class SalarySendServiceImpl extends Service implements SalarySendService acctPo.setEmployeeId(currentEmployeeId); List salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(acctPo); encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); - List> salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> { - Map map = new LinkedHashMap<>(); - map.put("salaryItemId", m.getSalaryItemId()); - map.put("resultValue", m.getResultValue()); - return map; - }).collect(Collectors.toList()); + + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salarySendInfo.getSalaryAcctRecordId()); + if(salaryAcctRecordPO == null){ + throw new SalaryRunTimeException("薪资核算记录不存在!"); + } + List> salaryAcctResultS =null; + if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(),NumberUtils.INTEGER_ONE) && !isReplenish){ + // 该记录回算过,并且获取的不是回算后的工资单 + salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> { + Map map = new LinkedHashMap<>(); + map.put("salaryItemId", m.getSalaryItemId()); + map.put("resultValue", m.getOriginResultValue()); + return map; + }).collect(Collectors.toList()); + }else{ + salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> { + Map map = new LinkedHashMap<>(); + map.put("salaryItemId", m.getSalaryItemId()); + map.put("resultValue", m.getResultValue()); + return map; + }).collect(Collectors.toList()); + } + Map map = new LinkedHashMap<>(); map.put("tenantName", ""); @@ -510,13 +527,14 @@ public class SalarySendServiceImpl extends Service implements SalarySendService Optional optionalEmployeeInformation = listDTOS.stream().filter(e -> SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).findFirst(); SalaryTemplateSalaryItemSetListDTO employeeInformation = optionalEmployeeInformation.orElse(null); List itemSetListDTOS = listDTOS.stream().filter(e -> !SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).collect(Collectors.toList()); + List> finalSalaryAcctResultS = salaryAcctResultS; itemSetListDTOS.stream().forEach(item -> { item.getItems() .forEach(e -> { - if (CollectionUtils.isEmpty(salaryAcctResultS)) { + if (CollectionUtils.isEmpty(finalSalaryAcctResultS)) { e.setSalaryItemValue(""); } else { - Object o = salaryAcctResultS.stream() + Object o = finalSalaryAcctResultS.stream() .filter(f -> f.get("salaryItemId") != null && String.valueOf(f.get("salaryItemId")).equals(e.getSalaryItemId())).findFirst() .orElse(new HashMap<>()) .get("resultValue"); @@ -1309,4 +1327,12 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } return getSalaryAcctResultService(user).sumRow(SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build()); } + + @Override + public void deleteBySalaryAcctRecordIds(Collection ids) { + if(CollectionUtils.isNotEmpty(ids)){ + getSalarySendMapper().deleteBySalaryAcctRecordIds(ids); + getSalarySendInfoMapper().deleteBySalaryAcctRecordIds(ids); + } + } } From 083916eb0c20e2343eea2525d5974c33b36c3431 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 16 May 2023 15:41:11 +0800 Subject: [PATCH 095/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BC=96=E8=BE=91=20=E5=B8=A6=E4=B8=8A=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 22 +++++++++++++++---- .../dto/SalaryAcctResultDetailDTO.java | 2 +- .../impl/SalaryAcctResultServiceImpl.java | 5 +++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 97ef9afae..9509a74a5 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeInfoDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; +import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam; import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; @@ -17,6 +18,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.util.SalaryEntityUtil; @@ -372,7 +374,8 @@ public class SalaryAcctResultBO { List salaryAcctResults, List salarySobBackItemPOS, List salaryBackItemPOS, - Map salaryBackItemFormula) { + Map salaryBackItemFormula, + Map formulaContentMap) { // 员工信息字段 Map employeeFieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(simpleEmployee); @@ -400,7 +403,7 @@ public class SalaryAcctResultBO { for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); List items = groupItems.stream() - .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) + .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap)) .collect(Collectors.toList()); itemsByGroup.add(SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO.builder() .salarySobItemGroupId(groupPO.getId()) @@ -469,13 +472,24 @@ public class SalaryAcctResultBO { */ private static SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO convert2SalaryAcctResultDetailItemDTO(SalarySobItemPO salarySobItemPO, SalaryItemPO salaryItemPO, - Map resultValueMap) { + Map resultValueMap, + Map formulaContentMap) { + + SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::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(""); + }else{ + itemFormulaContent = salaryValueTypeEnum == null ? "" : salaryValueTypeEnum.getDefaultLabel(); + } + // 薪资项目的数据类型 return SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO.builder() .salaryItemId(salarySobItemPO.getSalaryItemId()) .salaryItemName(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .resultValue(resultValueMap.getOrDefault(salarySobItemPO.getSalaryItemId(), StringUtils.EMPTY)) .dataType(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) + .itemFormulaContent(itemFormulaContent) // .canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0)) .canEdit(true) .build(); @@ -498,7 +512,7 @@ public class SalaryAcctResultBO { .salaryItemId(salarySobBackItemPO.getSalaryItemId()) .salaryItemName(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .resultValue(resultValueMap.getOrDefault(salarySobBackItemPO.getSalaryItemId(), StringUtils.EMPTY)) - .salaryBackItemFormula(salaryBackItemFormula.get(salarySobBackItemPO.getSalaryItemId())) + .itemFormulaContent(salaryBackItemFormula.get(salarySobBackItemPO.getSalaryItemId())) .dataType(Optional.ofNullable(salarySobBackItemPO).map(SalarySobBackItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) .canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0)) .build(); diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java index c8d16c683..1df7b8a14 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java @@ -61,7 +61,7 @@ public class SalaryAcctResultDetailDTO { private String resultValue; // 公式/输入 - private String salaryBackItemFormula; + private String itemFormulaContent; //数据类型:number、string") private String dataType; diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index f1ceef54e..64d73534e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -273,9 +273,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctResultPOS = listBySalaryAcctEmployeeId(salaryAcctEmployeeId); // 查询个税扣缴义务人 TaxAgentPO taxAgent = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId()); + // 查询公式 + Map formulaContentMap = getSalaryAcctResultService(user).getColumnBySalaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()); // 转换成薪资核算结果详情dto - return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemGroupPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS, salarySobBackItemPOList, salaryBackItemPOS, salaryBackItemFormula); + return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemGroupPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS, salarySobBackItemPOList, salaryBackItemPOS, salaryBackItemFormula, formulaContentMap); } @Override @@ -471,7 +473,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } Map resultMap = Maps.newHashMap(); // 查询薪资核算使用的薪资账套下的薪资项目 - List salarySobItems = Lists.newArrayList(); SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateBySalarySobId(salaryAcctRecordPO.getSalarySobId()); for (SalarySobItemIncomeCategoryDTO incomeCategoryDTO : salarySobItemAggregateDTO.getIncomeCategories()) { for (SalarySobItemGroupDTO salarySobItemGroupDTO : incomeCategoryDTO.getItemGroups()) { From a7cc99fdd359068804c0b814151cd826f3f41380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 May 2023 18:01:38 +0800 Subject: [PATCH 096/245] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 2 + .../service/SalaryAcctProgressService.java | 4 ++ .../impl/SalaryAcctCalculateServiceImpl.java | 41 +++++++++++++------ .../impl/SalaryAcctProgressServiceImpl.java | 23 +++++++++++ 4 files changed, 57 insertions(+), 13 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 96bd7353f..19b51c780 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -248,6 +248,8 @@ public class SalaryAcctResultBO { } // 主键id map.put("id", e.getId()); + //人员id + map.put("employeeId", e.getEmployeeId()); // 个税扣缴义务人 String taxAgentName = taxAgentNameMap.getOrDefault(e.getTaxAgentId(), StringUtils.EMPTY); map.put("taxAgentName", taxAgentName); diff --git a/src/com/engine/salary/service/SalaryAcctProgressService.java b/src/com/engine/salary/service/SalaryAcctProgressService.java index df8833b3c..1dab7e710 100644 --- a/src/com/engine/salary/service/SalaryAcctProgressService.java +++ b/src/com/engine/salary/service/SalaryAcctProgressService.java @@ -30,6 +30,10 @@ public interface SalaryAcctProgressService { */ void getAndAddCalculatedQty(String cacheKey, Integer calculatedQuantity); + + // + void getAndAddCalculatedQty(String cacheKey, Integer calculatedQuantity, String message); + /** * 计算失败 * diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index eff8b4e09..02c56f351 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -34,6 +34,7 @@ import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; +import weaver.wechat.util.Utils; import java.time.Month; import java.util.*; @@ -168,12 +169,14 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc Map salarySobBackItemMap = SalaryEntityUtil.convert2Map(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); List salaryAcctResultTempPOS = Lists.newArrayList(); // 开始核算 + String noticeMsg = ""; for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { Long salaryAcctEmployeePOId = salaryAcctEmployeePO.getId(); //1 获取当前薪资核算人员的公式中的变量的值 List formulaVarValues = formulaVarMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()); //2 人员信息 - formulaVarValues.addAll(formulaVarMap.get(salaryAcctEmployeePO.getEmployeeId() + "")); + List empInfo = formulaVarMap.get(salaryAcctEmployeePO.getEmployeeId() + ""); + formulaVarValues.addAll(empInfo); Map formulaVarValueMap = SalaryEntityUtil.convert2Map(formulaVarValues, CalculateFormulaVarBO.FormulaVarValue::getFieldId, CalculateFormulaVarBO.FormulaVarValue::getFieldValue); // 按照计算好的优先级计算薪资项目的值 for (List salaryItemIds : salaryAcctCalculateBO.getSalaryItemIdWithPriorityList()) { @@ -195,7 +198,14 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc } if (Objects.nonNull(expressFormula)) { // 运行公式 - resultValue = runExpressFormula(expressFormula, formulaVarValueMap, simpleEmployee); + ExcelResult result = runExpressFormula(expressFormula, formulaVarValueMap, simpleEmployee); + resultValue = Utils.null2String(result.getData()); + //公式异常 + if (!result.isStatus()) { + String username = empInfo.stream().filter(emp -> StringUtils.equals("employeeInfo_username", emp.getFieldId())).findFirst().map(CalculateFormulaVarBO.FormulaVarValue::getFieldValue).orElse(""); + String errorMsg = username + "的" + salaryItemPO.getName() + "核算异常,原因:" + result.getErrorMsg(); + noticeMsg = noticeMsg + errorMsg + "/n"; + } } else { // 处理取值类型为“输入/导入”的薪资项目 String key = SalaryFormulaReferenceEnum.SALARY_ITEM.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + salaryItemPO.getCode(); @@ -246,7 +256,9 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc getSalaryAcctResultTempService(user).batchSave(salaryAcctResultTempPOS); // 更新薪资核算进度 getSalaryAcctProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.ACCT_PROGRESS + salaryAcctCalculateBO.getSalaryAcctRecordPO().getId(), - salaryAcctCalculateBO.getSalaryAcctEmployeePOS().size()); + salaryAcctCalculateBO.getSalaryAcctEmployeePOS().size(), + noticeMsg + ); // 记录子线程执行结果 salaryAcctCalculateBO.getResults().add(new SalaryAcctCalculateBO.Result(true, StringUtils.EMPTY)); } catch (Exception e) { @@ -267,24 +279,27 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc * @param formulaVarValueMap * @return */ - private String runExpressFormula(ExpressFormula expressFormula, Map formulaVarValueMap, DataCollectionEmployee simpleEmployee) { + private ExcelResult runExpressFormula(ExpressFormula expressFormula, Map formulaVarValueMap, DataCollectionEmployee simpleEmployee) { // 给公式中的变量填入值 + ExcelResult result = new ExcelResult(); try { List formulaVars = ExpressFormulaBO.buildFormulaVar4Accounting(expressFormula, formulaVarValueMap); - ExcelResult run = getFormulaRunService(user).run(expressFormula, formulaVars, simpleEmployee); - - if (run.isStatus()) { - return run.getData().toString(); - } - + result = getFormulaRunService(user).run(expressFormula, formulaVars, simpleEmployee); } catch (Exception e) { log.error("express execute fail ", e); + result.setStatus(false); + result.setErrorMsg(e.getMessage()); } - if ("number".equals(expressFormula.getReturnType())) { - return "0"; + //核算出错,给个默认值 + if (!result.isStatus() || result.getData() == null) { + if ("number".equals(expressFormula.getReturnType())) { + result.setData("0"); + } else { + result.setData(StringUtils.EMPTY); + } } - return StringUtils.EMPTY; + return result; } /** diff --git a/src/com/engine/salary/service/impl/SalaryAcctProgressServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctProgressServiceImpl.java index c3d22e069..0cb90e377 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctProgressServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctProgressServiceImpl.java @@ -6,6 +6,7 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; import com.engine.salary.service.SalaryAcctProgressService; import com.engine.salary.util.JsonUtil; import org.apache.commons.lang3.StringUtils; +import weaver.wechat.util.Utils; import java.math.BigDecimal; import java.math.RoundingMode; @@ -44,6 +45,28 @@ public class SalaryAcctProgressServiceImpl extends Service implements SalaryAcct } } + @Override + public synchronized void getAndAddCalculatedQty(String cacheKey, Integer calculatedQuantity, String message) { + String resultStr = (String) Util_DataCache.getObjVal(cacheKey); + if (StringUtils.isNotEmpty(resultStr)) { + SalaryAcctProgressDTO salaryAcctProgress = JsonUtil.parseObject(resultStr, SalaryAcctProgressDTO.class); + if (salaryAcctProgress == null || !salaryAcctProgress.isStatus()) { + return; + } + Integer currentCalculatedQuantity = salaryAcctProgress.getCalculatedQuantity() + calculatedQuantity; + salaryAcctProgress.setCalculatedQuantity( + currentCalculatedQuantity > salaryAcctProgress.getTotalQuantity() ? salaryAcctProgress.getTotalQuantity() : currentCalculatedQuantity); + BigDecimal progress = BigDecimal.valueOf(salaryAcctProgress.getCalculatedQuantity()) + .divide(BigDecimal.valueOf(salaryAcctProgress.getTotalQuantity()), 4, RoundingMode.HALF_DOWN); + salaryAcctProgress.setProgress(progress.compareTo(BigDecimal.ONE) > 0 ? BigDecimal.ONE : progress); + + if (StringUtils.isNotBlank(message)) { + salaryAcctProgress.setMessage(Utils.null2String(salaryAcctProgress.getMessage()) + message); + } + Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryAcctProgress)); + } + } + @Override public void fail(String cacheKey, String message) { SalaryAcctProgressDTO salaryAcctProgress = new SalaryAcctProgressDTO(); From 8ad88b1e97a473bf4962a36f433b2e64b967babf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 17 May 2023 14:10:12 +0800 Subject: [PATCH 097/245] =?UTF-8?q?=E6=88=91=E7=9A=84=E5=B7=A5=E8=B5=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalarySendServiceImpl.java | 8 ++++--- .../salary/web/SalaryBillController.java | 23 +++++++++++-------- .../salary/wrapper/SalarySendWrapper.java | 7 ++++-- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index d2672d07c..8a4840abf 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -927,8 +927,10 @@ public class SalarySendServiceImpl extends Service implements SalarySendService userIdList.add(employeeId.toString()); String title = billTitle; // 标题 String context = "点击查看详情"; // 内容 - String linkUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?id=" + id; // PC端链接 - String linkMobileUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?type=phone&id=" + id; // 移动端链接 + // PC端链接 + String linkUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?id=" + id + "&recipient=" + employeeId; + // 移动端链接 + String linkMobileUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?type=phone&id=" + id + "&recipient=" + employeeId; try { MessageBean messageBean = Util_Message.createMessage(messageType, userIdList, title, context, linkUrl, linkMobileUrl); messageBean.setCreater(user.getUID());// 创建人id @@ -1304,7 +1306,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService Long salarySendId = queryParam.getSalarySendId(); // 获取薪资核算ID SalarySendPO salarySendPO = getById(salarySendId); - if(Objects.isNull(salarySendPO)){ + if (Objects.isNull(salarySendPO)) { throw new SalaryRunTimeException("工资发放记录不存在或已被删除"); } return getSalaryAcctResultService(user).sumRow(SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build()); diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index deed2d29f..f20567b57 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -14,6 +14,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.general.BaseBean; import weaver.hrm.HrmUserVarify; @@ -111,7 +112,7 @@ public class SalaryBillController { @Path("/template/getAvailableSalaryGroupSet") @Produces(MediaType.APPLICATION_JSON) public String getAvailableSalaryGroupSet(@Context HttpServletRequest request, @Context HttpServletResponse response, - @RequestBody SalaryBillSalaryGroupQueryParam param) { + @RequestBody SalaryBillSalaryGroupQueryParam param) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user) .run(getSalaryTemplateWrapper(user)::getSalaryGroupSet, param); @@ -124,7 +125,7 @@ public class SalaryBillController { @Path("/template/getAvailableSalaryItemSet") @Produces(MediaType.APPLICATION_JSON) public String getAvailableSalaryItemSet(@Context HttpServletRequest request, @Context HttpServletResponse response, - @RequestBody SalaryBillSalaryItemQueryParam param) { + @RequestBody SalaryBillSalaryItemQueryParam param) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user) .run(getSalaryTemplateWrapper(user)::getSalaryItemSetGrouped, param); @@ -528,14 +529,18 @@ public class SalaryBillController { @Path("/mySalaryBill") @Produces(MediaType.APPLICATION_JSON) public String mySalaryBill(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "salaryInfoId") Long salaryInfoId) { -// if (StringUtils.isEmpty(token)) { -// throw new SalaryRunTimeException(SalrayCheckSecondAuthConstant.CHECK_SECOND_FAIL_NO_TOKEN); -// } User user = HrmUserVarify.getUser(request, response); - String em_auth_userid = request.getParameter("em_auth_userid"); - if (user == null && StringUtils.isNotBlank(em_auth_userid)) { - user = new User(Integer.parseInt(em_auth_userid)); - log.info("no login em_auth_userid {} user{}", em_auth_userid, user); + if (user == null) { + String recipient = request.getParameter("recipient"); + String em_auth_userid = request.getParameter("em_auth_userid"); + log.info("salary recipient: {} em_auth_userid: {}", recipient, em_auth_userid); + if (StringUtils.isNotBlank(recipient) && NumberUtils.isCreatable(recipient)) { + user = new User(Integer.parseInt(recipient)); + } else { + if (StringUtils.isNotBlank(em_auth_userid) && NumberUtils.isCreatable(em_auth_userid)) { + user = new User(Integer.parseInt(em_auth_userid)); + } + } } return new ResponseResult>(user).run(getSalarySendWrapper(user)::mySalaryBill, salaryInfoId); } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 5f428694b..37896c483 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -133,7 +133,7 @@ public class SalarySendWrapper extends Service { Set backCalcSalarySobs = SalaryEntityUtil.properties(salaryAcctRecordPOS, salaryAcctRecordPO -> salaryAcctRecordPO.getSalarySobId() + "-" + sdf.format(salaryAcctRecordPO.getSalaryMonth())); // 判断是否回算过,haveBackCalc 属性 pageList.stream().forEach(salarySendDTO -> { - if(backCalcSalarySobs.contains(salarySendDTO.getSalarySobId() + "-" + sdf.format(salarySendDTO.getSalaryYearMonth()))){ + if (backCalcSalarySobs.contains(salarySendDTO.getSalarySobId() + "-" + sdf.format(salarySendDTO.getSalaryYearMonth()))) { salarySendDTO.setHaveBackCalc(NumberUtils.INTEGER_ONE); } }); @@ -624,6 +624,9 @@ public class SalarySendWrapper extends Service { * @return */ public Map mySalaryBill(Long salaryInfoId) { + if (user == null) { + throw new SalaryRunTimeException("获取人员信息失败!"); + } return getSalarySendService(user).mySalaryBill(salaryInfoId, (long) user.getUID()); } @@ -633,7 +636,7 @@ public class SalarySendWrapper extends Service { * @param queryParam * @return */ - public Map sumSendResult(SalarySendInfoQueryParam queryParam) { + public Map sumSendResult(SalarySendInfoQueryParam queryParam) { Map datas = new HashMap<>(); //合计 Map sumRow = getSalarySendService(user).sumRow(queryParam); From 72f2ca443917d13f1a6b9dae235d92feea45fc26 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 17 May 2023 14:49:53 +0800 Subject: [PATCH 098/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctResultServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 64d73534e..3bbdd584d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -532,7 +532,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe Set needLockItems = new HashSet<>(); Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); salaryAcctResultPOS.stream().forEach(PO -> { - String oldValue = oldResutMap.get(PO.getSalaryItemId()).getResultValue(); + String oldValue = Optional.ofNullable(oldResutMap.get(PO.getSalaryItemId())).map(SalaryAcctResultPO::getResultValue).orElse(""); if(!StringUtils.equals(oldValue,PO.getResultValue())){ needLockItems.add(PO.getSalaryItemId()); } From 7ccf8cf6072cfa55e68ac34ff63ceff16d0a59e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 17 May 2023 14:59:12 +0800 Subject: [PATCH 099/245] =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA=E9=BB=98=E8=AE=A4=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryitem/dto/SalaryFieldListDTO.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java index 69663545e..c392e0d62 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java @@ -36,8 +36,8 @@ public class SalaryFieldListDTO { private String name; //默认使用 - @SalaryTableColumn(text = "默认使用", width = "10%", column = "useDefault") - @TableTitle(title = "默认使用",dataIndex = "useDefault",key = "useDefault") +// @SalaryTableColumn(text = "默认使用", width = "10%", column = "useDefault") +// @TableTitle(title = "默认使用",dataIndex = "useDefault",key = "useDefault") private Integer useDefault; //进位规则 From 404db31695100be2536a5b794aa64f1451d80c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 17 May 2023 16:57:37 +0800 Subject: [PATCH 100/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E9=A1=B9=E7=9B=AE=E6=8E=92=E5=BA=8F=E9=9D=A0?= =?UTF-8?q?=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryItemServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 658f364d0..08e2eb56d 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -131,8 +131,9 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService Set userTaxAgentIds = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()) .stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); salaryItemPOS = salaryItemPOS.stream() - .filter(po -> filterInRange(userTaxAgentIds, po) - ).collect(Collectors.toList()); + .filter(po -> filterInRange(userTaxAgentIds, po)) + .sorted(Comparator.comparing(SalaryItemPO::getSystemType)) + .collect(Collectors.toList()); } else { //普通用户 salaryItemPOS = new ArrayList<>(); From ff8dcf176940bfa3d3df181d23f2e7d7433d0e4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 17 May 2023 17:38:12 +0800 Subject: [PATCH 101/245] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/formlua/entity/standard/ExcelResult.java | 9 +++++++++ .../salary/service/impl/FormulaRunServiceImpl.java | 2 +- .../service/impl/SalaryAcctCalculateServiceImpl.java | 8 ++++---- .../salary/service/impl/SalaryFormulaServiceImpl.java | 2 +- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/formlua/entity/standard/ExcelResult.java b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java index 1e1923864..b70bc9b1d 100644 --- a/src/com/engine/salary/formlua/entity/standard/ExcelResult.java +++ b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java @@ -37,6 +37,15 @@ public class ExcelResult implements Serializable { private String formulaId; private String dataType; + public ExcelResult() { + } + + public ExcelResult(boolean status, Object data, String errorMsg) { + this.status = status; + this.data = data; + this.errorMsg = errorMsg; + } + public String getExpress() { return express; } diff --git a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java index 413f3bdfa..b1d19353a 100644 --- a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java +++ b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java @@ -53,7 +53,7 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService return runSQL(expressFormula, formulaVars); } log.error("express execute fail, {} not in ReferenceTypeEnum ", expressFormula.getReferenceType()); - return new ExcelResult(); + return new ExcelResult(false, "", ""); } private ExcelResult runSQL(ExpressFormula expressFormula, List formulaVars) { diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 02c56f351..b72c81e0a 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -169,7 +169,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc Map salarySobBackItemMap = SalaryEntityUtil.convert2Map(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); List salaryAcctResultTempPOS = Lists.newArrayList(); // 开始核算 - String noticeMsg = ""; + StringBuilder noticeMsg = new StringBuilder(); for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { Long salaryAcctEmployeePOId = salaryAcctEmployeePO.getId(); //1 获取当前薪资核算人员的公式中的变量的值 @@ -203,8 +203,8 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc //公式异常 if (!result.isStatus()) { String username = empInfo.stream().filter(emp -> StringUtils.equals("employeeInfo_username", emp.getFieldId())).findFirst().map(CalculateFormulaVarBO.FormulaVarValue::getFieldValue).orElse(""); - String errorMsg = username + "的" + salaryItemPO.getName() + "核算异常,原因:" + result.getErrorMsg(); - noticeMsg = noticeMsg + errorMsg + "/n"; + String errorMsg = String.format("%s的%s核算异常,原因:%s /n ", username, salaryItemPO.getName(), result.getErrorMsg()); + noticeMsg.append(errorMsg); } } else { // 处理取值类型为“输入/导入”的薪资项目 @@ -257,7 +257,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc // 更新薪资核算进度 getSalaryAcctProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.ACCT_PROGRESS + salaryAcctCalculateBO.getSalaryAcctRecordPO().getId(), salaryAcctCalculateBO.getSalaryAcctEmployeePOS().size(), - noticeMsg + noticeMsg.toString() ); // 记录子线程执行结果 salaryAcctCalculateBO.getResults().add(new SalaryAcctCalculateBO.Result(true, StringUtils.EMPTY)); diff --git a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java index e5493758a..d1856b6c7 100644 --- a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java @@ -58,7 +58,7 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe } private FormulaRunService getFormulaRunService(User user) { - return (FormulaRunService) ServiceUtil.getService(FormulaRunServiceImpl.class, user); + return ServiceUtil.getService(FormulaRunServiceImpl.class, user); } private RemoteExcelService getRemoteExcelService(User user) { From ebf966517bca5d29e4da49f697259b051dfdfef5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 18 May 2023 14:28:31 +0800 Subject: [PATCH 102/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=8E=B7=E5=8F=96=E4=B8=8D=E5=88=B0id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/SalaryAcctRecordService.java | 3 +++ .../salary/service/impl/SalaryAcctRecordServiceImpl.java | 5 +++++ .../salary/service/impl/SalaryAcctResultServiceImpl.java | 1 + 3 files changed, 9 insertions(+) diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index ffc811ac1..c4adc2860 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -4,6 +4,7 @@ import com.engine.salary.common.LocalDateRange; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.util.page.PageInfo; @@ -199,4 +200,6 @@ public interface SalaryAcctRecordService { * @date 2022/12/19 9:05 */ List getBackCalcRecordByIds(Set salaryAcctIds); + + List listBySalaryAcctEmpId(Long salaryAcctEmpId); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index f3b6e671a..a6ac92c17 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -776,4 +776,9 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe return salaryAcctRecords; } + + @Override + public List listBySalaryAcctEmpId(Long salaryAcctEmpId) { + return getSalaryAcctResultService(user).listBySalaryAcctEmployeeId(salaryAcctEmpId); + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 43cd4a00d..f6f70d29d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -550,6 +550,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } // 存储薪资核算结果数据来源日志 + salaryAcctResultPOS = getSalaryAcctRecordService(user).listBySalaryAcctEmpId(saveParam.getSalaryAcctEmpId()); saveSalaryAcctResultLog(salaryAcctResultPOSOld,salaryAcctResultPOS); // 查询操作日志的targetName From 64be49c61c1fc5ae2316ef4d6c0074883df4d7a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 22 May 2023 10:12:23 +0800 Subject: [PATCH 103/245] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E9=80=82?= =?UTF-8?q?=E9=85=8D=E5=BE=AE=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/web/SalaryBillController.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index f20567b57..15b9311b0 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -529,18 +529,16 @@ public class SalaryBillController { @Path("/mySalaryBill") @Produces(MediaType.APPLICATION_JSON) public String mySalaryBill(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "salaryInfoId") Long salaryInfoId) { - User user = HrmUserVarify.getUser(request, response); - if (user == null) { - String recipient = request.getParameter("recipient"); - String em_auth_userid = request.getParameter("em_auth_userid"); - log.info("salary recipient: {} em_auth_userid: {}", recipient, em_auth_userid); - if (StringUtils.isNotBlank(recipient) && NumberUtils.isCreatable(recipient)) { - user = new User(Integer.parseInt(recipient)); - } else { - if (StringUtils.isNotBlank(em_auth_userid) && NumberUtils.isCreatable(em_auth_userid)) { - user = new User(Integer.parseInt(em_auth_userid)); - } - } + User user = null; + String recipient = request.getParameter("recipient"); + String em_auth_userid = request.getParameter("em_auth_userid"); + log.info("salary recipient: {} em_auth_userid: {}", recipient, em_auth_userid); + if (StringUtils.isNotBlank(recipient) && NumberUtils.isCreatable(recipient)) { + user = new User(Integer.parseInt(recipient)); + } else if(StringUtils.isNotBlank(em_auth_userid) && NumberUtils.isCreatable(em_auth_userid)){ + user = new User(Integer.parseInt(em_auth_userid)); + }else { + user = HrmUserVarify.getUser(request, response); } return new ResponseResult>(user).run(getSalarySendWrapper(user)::mySalaryBill, salaryInfoId); } From 74c4305b9de60d5f37c8bded7f102df17f3cd68c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 23 May 2023 15:15:55 +0800 Subject: [PATCH 104/245] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryStatisticsReportServiceImpl.java | 2 +- .../salary/service/impl/SalaryAcctCalculateServiceImpl.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 44e1c4561..5a5ce1842 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -360,7 +360,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); Map> map = new HashMap<>(); salaryAcctEmpResultMap.forEach((k, v) -> { - Map collect = v.stream().collect(Collectors.toMap(p -> p.getSalaryItemId().toString(), SalaryAcctResultPO::getResultValue, (key1, key2) -> key2)); + Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), SalaryAcctResultPO::getResultValue, (key1, key2) -> key2)); map.put(k, collect); }); diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index b72c81e0a..768975e43 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -169,7 +169,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc Map salarySobBackItemMap = SalaryEntityUtil.convert2Map(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); List salaryAcctResultTempPOS = Lists.newArrayList(); // 开始核算 - StringBuilder noticeMsg = new StringBuilder(); + StringBuffer noticeMsg = new StringBuffer(); for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { Long salaryAcctEmployeePOId = salaryAcctEmployeePO.getId(); //1 获取当前薪资核算人员的公式中的变量的值 @@ -203,7 +203,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc //公式异常 if (!result.isStatus()) { String username = empInfo.stream().filter(emp -> StringUtils.equals("employeeInfo_username", emp.getFieldId())).findFirst().map(CalculateFormulaVarBO.FormulaVarValue::getFieldValue).orElse(""); - String errorMsg = String.format("%s的%s核算异常,原因:%s /n ", username, salaryItemPO.getName(), result.getErrorMsg()); + String errorMsg = String.format("%s的%s核算异常,原因:%s \r\n", username, salaryItemPO.getName(), result.getErrorMsg()); noticeMsg.append(errorMsg); } } else { From a44f6bf3af78e940c880b342c60e62528436b851 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 24 May 2023 10:02:49 +0800 Subject: [PATCH 105/245] =?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=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E8=A1=A8=E5=A4=B4=E4=B8=AD=E7=9A=84=E7=A6=BB=E8=81=8C=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=94=B9=E4=B8=BA=E5=90=88=E5=90=8C=E5=88=B0=E6=9C=9F?= =?UTF-8?q?=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index a977984ca..ca60b7460 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -1074,7 +1074,7 @@ public class SIArchivesBiz { list.add(new WeaTableColumn("150px", "工号", "jobNum")); list.add(new WeaTableColumn("150px", "入职日期", "companystartdate")); - list.add(new WeaTableColumn("150px", "离职日期", "dismissdate")); + list.add(new WeaTableColumn("150px", "合同到期日期", "dismissdate")); list.add(new WeaTableColumn("150px", "社保方案名称", "socialName")); titleMap.get(WelfareTypeEnum.SOCIAL_SECURITY.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k))); From 33a8ecb4f762d3587178b61fb7257f99dfcf33fd Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 24 May 2023 14:17:31 +0800 Subject: [PATCH 106/245] =?UTF-8?q?=E7=BB=B4=E5=BA=A6=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=88=A4=E6=96=AD=E8=83=BD=E5=90=A6=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=92=8C=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/component/WeaFormOption.java | 31 +++++++++++++++++++ .../SalaryStatisticsDimensionService.java | 7 +++++ .../SalaryStatisticsDimensionServiceImpl.java | 5 +++ .../SalaryStatisticsReportWrapper.java | 20 ++++++++++++ 4 files changed, 63 insertions(+) diff --git a/src/com/engine/salary/component/WeaFormOption.java b/src/com/engine/salary/component/WeaFormOption.java index 75ec121af..ba01d7c58 100644 --- a/src/com/engine/salary/component/WeaFormOption.java +++ b/src/com/engine/salary/component/WeaFormOption.java @@ -8,16 +8,30 @@ public class WeaFormOption implements Serializable { private String content; private boolean disabled; + private boolean canEdit; + + private boolean canDelete; + public WeaFormOption() { this.disabled = Boolean.FALSE; } public WeaFormOption(String id, String content) { this.disabled = Boolean.FALSE; + this.canEdit = Boolean.TRUE; + this.canDelete = Boolean.TRUE; this.id = id; this.content = content; } + public WeaFormOption(String id, String content, boolean canEdit, boolean canDelete) { + this.disabled = Boolean.FALSE; + this.id = id; + this.content = content; + this.canEdit = canEdit; + this.canDelete = canDelete; + } + public String getId() { return this.id; } @@ -34,6 +48,7 @@ public class WeaFormOption implements Serializable { this.content = content; } + public boolean isDisabled() { return this.disabled; } @@ -41,4 +56,20 @@ public class WeaFormOption implements Serializable { public void setDisabled(boolean disabled) { this.disabled = disabled; } + + public boolean isCanEdit() { + return canEdit; + } + + public void setCanEdit(boolean canEdit) { + this.canEdit = canEdit; + } + + public boolean isCanDelete() { + return canDelete; + } + + public void setCanDelete(boolean canDelete) { + this.canDelete = canDelete; + } } diff --git a/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java b/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java index eb1619b08..7f3dd8b38 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsDimensionService.java @@ -65,4 +65,11 @@ public interface SalaryStatisticsDimensionService { * @return */ Map delete(Collection ids); + + /** + * 获取默认薪酬统计维度 + * + * @return + */ + List listAllDefaultDimension(); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java index 10008f0b1..865015758 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsDimensionServiceImpl.java @@ -243,4 +243,9 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal resultMap.put("msg", resultMsg); return resultMap; } + + @Override + public List listAllDefaultDimension() { + return getSalaryStatisticsDimensionMapper().listSome(SalaryStatisticsDimensionPO.builder().isDefault(NumberUtils.INTEGER_ONE).build()); + } } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index de401e667..c4f209b75 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -106,6 +106,26 @@ public class SalaryStatisticsReportWrapper extends Service { List salaryStatisticsDimensions = getSalaryStatisticsDimensionService(user).listAll(); List statsDimOptions = salaryStatisticsDimensions.stream().map(sd -> new WeaFormOption(sd.getId().toString(), sd.getDimName())).collect(Collectors.toList()); + + // 获取默认维度统计 + List defaultSalaryStatisticsDimensions = getSalaryStatisticsDimensionService(user).listAllDefaultDimension(); + List defaultDimensionIds = defaultSalaryStatisticsDimensions.stream().map(SalaryStatisticsDimensionPO::getId).collect(Collectors.toList()); + // 获取有薪资统计报表引用的统计维度 + Set haveUsedDimIds = new HashSet<>(); + List salaryStatisticsReports = getSalaryStatisticsReportService(user).listAll(); + salaryStatisticsReports.stream().forEach(report -> Collections.addAll(haveUsedDimIds, report.getDimension().split(","))); + statsDimOptions.stream().forEach(option -> { + if (defaultDimensionIds.contains(Long.valueOf(option.getId()))){ + // 默认维度不允许修改、删除 + option.setCanDelete(false); + option.setCanEdit(false); + }else if(haveUsedDimIds.contains(option.getId())){ + // 被薪资统计报表引用的不能删除 + option.setCanEdit(true); + option.setCanDelete(false); + } + }); + // 1.构建基础信息表单 Map weaForm = new HashMap<>(); weaForm.put("statsDimOptions", statsDimOptions); From 32e79597459cbe2ed6986fc9e8e921f5a50ca3af Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 24 May 2023 14:49:39 +0800 Subject: [PATCH 107/245] =?UTF-8?q?=E7=BB=B4=E5=BA=A6=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=88=A4=E6=96=AD=E8=83=BD=E5=90=A6=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=92=8C=E7=BC=96=E8=BE=91-2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/SalaryStatisticsDimensionListDTO.java | 6 +++ .../SalaryStatisticsDimensionWrapper.java | 46 ++++++++++++++++--- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java index 7d76e822b..f0fb237af 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsDimensionListDTO.java @@ -39,4 +39,10 @@ public class SalaryStatisticsDimensionListDTO { //是否默认") @JsonIgnore private Integer isDefault; + + // 能否删除 + private boolean canDelete; + + // 能否编辑 + private boolean canEdit; } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java index 38046076e..11619c545 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsDimensionWrapper.java @@ -12,9 +12,12 @@ import com.engine.salary.report.entity.dto.SalaryStatisticsDimensionListDTO; import com.engine.salary.report.entity.param.SalaryStatisticsDimensionQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; +import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.report.enums.SalaryStatisticsDimensionTypeEnum; import com.engine.salary.report.service.SalaryStatisticsDimensionService; +import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.report.service.impl.SalaryStatisticsDimensionServiceImpl; +import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl; import com.engine.salary.service.SalaryItemService; import com.engine.salary.service.impl.SalaryItemServiceImpl; import com.engine.salary.util.JsonUtil; @@ -47,6 +50,14 @@ public class SalaryStatisticsDimensionWrapper extends Service { return ServiceUtil.getService(SalaryItemServiceImpl.class, user); } + private SalaryStatisticsDimensionService getSalaryStatisticsDimensionService(User user) { + return ServiceUtil.getService(SalaryStatisticsDimensionServiceImpl.class, user); + } + + private SalaryStatisticsReportService getSalaryStatisticsReportService(User user) { + return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); + } + /** * 薪酬统计维度列表 * @@ -57,14 +68,35 @@ public class SalaryStatisticsDimensionWrapper extends Service { PageInfo page = salaryStatisticsDimensionService(user).listPage(queryParam); List list = page.getList(); List dtoList= new ArrayList<>(); + + // 获取默认维度统计 + List defaultSalaryStatisticsDimensions = getSalaryStatisticsDimensionService(user).listAllDefaultDimension(); + List defaultDimensionIds = defaultSalaryStatisticsDimensions.stream().map(SalaryStatisticsDimensionPO::getId).collect(Collectors.toList()); + // 获取有薪资统计报表引用的统计维度 + Set haveUsedDimIds = new HashSet<>(); + List salaryStatisticsReports = getSalaryStatisticsReportService(user).listAll(); + salaryStatisticsReports.stream().forEach(report -> Collections.addAll(haveUsedDimIds, report.getDimension().split(","))); if (CollectionUtils.isNotEmpty(list)) { - dtoList = list.stream().map(m -> SalaryStatisticsDimensionListDTO.builder() - .id(m.getId()) - .dimName(m.getDimName()) - .remark(m.getRemark()) - .dimType(SalaryStatisticsDimensionTypeEnum.getDefaultLabelByValue(m.getDimType())) - .isDefault(m.getIsDefault()) - .build()).collect(Collectors.toList()); + list.stream().forEach(m -> { + SalaryStatisticsDimensionListDTO dto = SalaryStatisticsDimensionListDTO.builder() + .id(m.getId()) + .dimName(m.getDimName()) + .remark(m.getRemark()) + .dimType(SalaryStatisticsDimensionTypeEnum.getDefaultLabelByValue(m.getDimType())) + .isDefault(m.getIsDefault()) + .canEdit(true) + .canDelete(true) + .build(); + if (defaultDimensionIds.contains(dto.getId())){ + // 默认维度不允许修改、删除 + dto.setCanEdit(false); + dto.setCanDelete(false); + }else if(haveUsedDimIds.contains(dto.getId().toString())){ + // 被薪资统计报表引用的不能删除 + dto.setCanDelete(false); + } + dtoList.add(dto); + }); } PageInfo salaryStatisticsDimensionListDTOPageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize()); From 399a615be62cc204ec056122cb97a1c5669b86e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 25 May 2023 13:51:27 +0800 Subject: [PATCH 108/245] =?UTF-8?q?=E4=BA=BA=E5=91=98=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/datacollection/DataCollectionEmployee.java | 1 + .../service/impl/SalaryStatisticsEmployeeServiceImpl.java | 2 +- .../salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java index 0ae138533..41cf3dea2 100644 --- a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java +++ b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java @@ -42,6 +42,7 @@ public class DataCollectionEmployee { //分部名 @SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "string") private String subcompanyName; + @SalaryFormulaVar(defaultLabel = "分部ID", labelId = 82465, dataType = "string") private Long subcompanyid; //所属成本中心 diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 11760702b..d73bf6637 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -205,7 +205,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala Collections.reverse(salaryAcctEmployees); // 2.获取核算结果数据 - Set salaryAcctEmployeeIds = salaryAcctEmployees.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toSet()); + List salaryAcctEmployeeIds = salaryAcctEmployees.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 3.获取薪资项目 diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 31fc2d0e5..588637ddc 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -19,6 +19,7 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; import java.math.BigDecimal; @@ -74,7 +75,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX; for (Map record : records) { if (record.containsKey(itemKey)) { - if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString())) { + if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString())&& NumberUtils.isCreatable(record.get(itemKey).toString())) { sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString())); record.put(itemKey, ReportDataUtil.thousandthConvert(record.get(itemKey).toString())); } From 25ffd06dd41448587ba3e22a0f7ef8e555cd62df Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 25 May 2023 17:06:03 +0800 Subject: [PATCH 109/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=E6=B2=A1=E6=9C=89=E6=9C=AA?= =?UTF-8?q?=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 24 +++++++++++++++---- .../impl/SalaryAcctResultServiceImpl.java | 8 +++++-- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 366eaebcc..259f213e5 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -404,16 +404,32 @@ public class SalaryAcctResultBO { List itemsByGroup = new ArrayList<>(); for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); - List items = groupItems.stream() + if(CollectionUtils.isNotEmpty(groupItems)){ + List items = groupItems.stream() + .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap)) + .collect(Collectors.toList()); + itemsByGroup.add(SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO.builder() + .salarySobItemGroupId(groupPO.getId()) + .salarySobItemGroupName(groupPO.getName()) + .salaryItems(items) + .sortedIndex(groupPO.getSortedIndex()).build() ); + } + } + // 未分类 + List noGroupItems = salarySobItemPOMap.getOrDefault(0L, Collections.emptyList()); + if(CollectionUtils.isNotEmpty(noGroupItems)){ + List items = noGroupItems.stream() .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap)) .collect(Collectors.toList()); itemsByGroup.add(SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO.builder() - .salarySobItemGroupId(groupPO.getId()) - .salarySobItemGroupName(groupPO.getName()) + .salarySobItemGroupId(0L) + .salarySobItemGroupName("未分类") .salaryItems(items) - .sortedIndex(groupPO.getSortedIndex()).build() ); + .sortedIndex(itemsByGroup.size()).build()); } + + // // 公式项的值(不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段) // List formulaItems = salarySobItemPOS.stream() // .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index a1d5c7b7e..a226e0f59 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -601,9 +601,13 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List editItems = new ArrayList<>(); Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); salaryAcctResultPOS.stream().forEach(PO -> { - String oldValue = oldResutMap.get(PO.getSalaryItemId()).getResultValue(); - if(!StringUtils.equals(oldValue,PO.getResultValue())){ + if(oldResutMap.get(PO.getSalaryItemId()) == null){ editItems.add(PO); + }else{ + String oldValue = oldResutMap.get(PO.getSalaryItemId()).getResultValue(); + if(!StringUtils.equals(oldValue,PO.getResultValue())){ + editItems.add(PO); + } } }); List needInsertList = SalaryAcctResultLogBO.buildSalaryAcctResultLog(editItems, Long.valueOf(user.getUID()), SalaryAcctResultDataSourceEnum.EDIT); From 220848e92d7a6a0790c3171ba76a18e857541683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 26 May 2023 11:15:40 +0800 Subject: [PATCH 110/245] =?UTF-8?q?=E6=A1=A3=E6=A1=88=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=AD=A3=E5=BA=8F=E6=8E=92=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/wrapper/SalaryArchiveWrapper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 10c83de05..756b37638 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -4,7 +4,6 @@ import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.EmployBiz; import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveBO; @@ -139,8 +138,10 @@ public class SalaryArchiveWrapper extends Service { .stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); salaryItems = salaryItems.stream() .filter(po -> getSalaryItemService(user).filterInRange(userTaxAgentIds, po)) + .sorted((Comparator.comparing(SalaryItemPO::getId))) .collect(Collectors.toList()); + //整合所有的显示列(固定列+薪资项目动态列) List> listMaps = getSalaryArchiveService(user).buildSalaryArchiveData(salaryArchives, taxAgentLists, salaryItems, Boolean.TRUE); From fef828ef1d098436eb8b7a2558f9ad3ed93a06aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 26 May 2023 11:17:25 +0800 Subject: [PATCH 111/245] =?UTF-8?q?=E4=BA=BA=E5=91=98=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=B1=95=E7=A4=BA=E8=B4=A6=E5=A5=97=E5=92=8C?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E8=AE=B0=E5=BD=95=E4=BF=A1=E6=81=AF=E3=80=81?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=88=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsEmployeeServiceImpl.java | 27 +++++++++++-- .../SalaryStatisticsEmployeeWrapper.java | 40 +++++++++++-------- .../service/SalaryAcctRecordService.java | 5 +++ .../salary/service/SalarySobService.java | 2 + .../impl/SalaryAcctRecordServiceImpl.java | 5 +++ .../service/impl/SalarySobServiceImpl.java | 5 +++ 6 files changed, 64 insertions(+), 20 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index d73bf6637..926faa3cb 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -4,9 +4,12 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper; import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsEmployeeBO; @@ -62,6 +65,14 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala return ServiceUtil.getService(SalaryItemServiceImpl.class, user); } + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + + private SalaryAcctRecordService getSalaryAcctRecordService(User user) { + return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); + } + // private ExtEmployeeMapper extEmployeeMapper; @@ -76,7 +87,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala @Override public PageInfo listPage(SalaryStatisticsEmployeeQueryParam queryParam) { List list = Collections.emptyList(); - PageInfo page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list); + PageInfo page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, SalaryStatisticsEmployeeListDTO.class); // 1.分权处理, 首先获取个税扣缴义务人参数 Collection taxAgentViews = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); @@ -165,7 +176,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala // .in(ExtEmployeePO::getId, extEmployeeIdList) // .list(); // Map extEmployeeMap = extEmployeeList.stream().collect(Collectors.toMap(ExtEmployeePO::getId, v -> v)); - List simpleEmployeeList = getSalaryEmployeeService(user).getEmployeeByIds(employeeIds); + List simpleEmployeeList = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); Map innerEmployeeMap = simpleEmployeeList.stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, v -> v)); salaryStatisticsEmployeeListDTOs.forEach(e -> { DataCollectionEmployee simpleEmployee = innerEmployeeMap.get(e.getId()); @@ -173,7 +184,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala e.setSubCompany(simpleEmployee.getSubcompanyName()); e.setDepartment(simpleEmployee.getDepartmentName()); e.setPosition(simpleEmployee.getJobtitleName()); - e.setStatus(simpleEmployee.getStatus()); + e.setStatus(UserStatusEnum.getDefaultLabelByValue(Integer.parseInt(simpleEmployee.getStatus()))); e.setJobNum(simpleEmployee.getWorkcode()); e.setIdNo(simpleEmployee.getIdNo()); }); @@ -229,6 +240,12 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala List taxAgentList = getTaxAgentService(user).listAll(); Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); + List salarySobPOS = getSalarySobService(user).listAll(); + Map SalarySobMap = SalaryEntityUtil.convert2Map(salarySobPOS, SalarySobPO::getId, SalarySobPO::getName); + + List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listAll(); + Map salaryAcctRecordMap = SalaryEntityUtil.convert2Map(salaryAcctRecordPOS, SalaryAcctRecordPO::getId, SalaryAcctRecordPO::getAcctTimes); + Map> acctResultValueList = SalaryEntityUtil.group2Map(salaryStatisticsEmployeeDetailResult.getSalaryAcctResultValueList(), SalaryAcctResultPO::getSalaryAcctEmpId); Map> acctResultValueMap = new HashMap<>(); acctResultValueList.forEach((k, v) -> { @@ -250,8 +267,10 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala finalMap.put(k + SalaryConstant.DYNAMIC_SUFFIX, v); }); map.put("id", se.getId().toString()); - map.put("salaryMonth", se.getSalaryMonth()); + map.put("salaryMonth", SalaryDateUtil.getFormatYearMonth(se.getSalaryMonth())); map.put("taxAgent", taxAgentMap.get(se.getTaxAgentId())); + map.put("salarySob",SalarySobMap.get(se.getSalarySobId())); + map.put("acctTimes", salaryAcctRecordMap.get(se.getSalaryAcctRecordId())); // IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(Integer.parseInt(se.getIncomeCategory())); // map.put("incomeCategory", Objects.isNull(incomeCategoryEnum) ? "" : SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel())); list.add(map); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 588637ddc..435ad5ac2 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -1,6 +1,9 @@ package com.engine.salary.report.wrapper; +import com.cloudstore.eccom.constant.WeaBoolAttr; +import com.cloudstore.eccom.pc.table.WeaTable; import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -23,10 +26,7 @@ import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** * 薪酬统计员工明细 @@ -41,6 +41,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { private SalaryStatisticsEmployeeService getSalaryStatisticsEmployeeService(User user) { return ServiceUtil.getService(SalaryStatisticsEmployeeServiceImpl.class, user); } + /** * 员工列表 * @@ -48,8 +49,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { * @return */ public PageInfo list(SalaryStatisticsEmployeeQueryParam queryParam) { - PageInfo page = getSalaryStatisticsEmployeeService(user).listPage(queryParam); - return page; + return getSalaryStatisticsEmployeeService(user).listPage(queryParam); } /** @@ -64,10 +64,6 @@ public class SalaryStatisticsEmployeeWrapper extends Service { List> records = getSalaryStatisticsEmployeeService(user).listDetailPage(salaryStatisticsEmployeeDetailResult, queryParam); Map countResultMap = Maps.newHashMap(); - countResultMap.put("id", "1000000"); - countResultMap.put("salaryMonth", "-"); - countResultMap.put("taxAgent", "-"); - countResultMap.put("incomeCategory", "-"); if (CollectionUtils.isNotEmpty(records)) { List salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList(); for (SalaryItemPO item : salaryItems) { @@ -75,7 +71,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX; for (Map record : records) { if (record.containsKey(itemKey)) { - if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString())&& NumberUtils.isCreatable(record.get(itemKey).toString())) { + if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString()) && NumberUtils.isCreatable(record.get(itemKey).toString())) { sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString())); record.put(itemKey, ReportDataUtil.thousandthConvert(record.get(itemKey).toString())); } @@ -89,21 +85,33 @@ public class SalaryStatisticsEmployeeWrapper extends Service { // 列表columns List weaTableColumns = buildDetailTableColumns(salaryStatisticsEmployeeDetailResult); + WeaTable table = new WeaTable(); + table.setPageUID(UUID.randomUUID().toString()); + table.setColumns(weaTableColumns); + + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + // 结果 Map resultMap = Maps.newHashMap(); - resultMap.put("columns", weaTableColumns); +// resultMap.put("columns", weaTableColumns); + resultMap.put("dataKey", result.getResultMap()); resultMap.put("pageInfo", pageInfo); + resultMap.put("countResult", countResultMap); return resultMap; } private List buildDetailTableColumns(SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult) { // 表格表头 List columns = new ArrayList<>(); - columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel( 87614, "薪资所属月"), "salaryMonth", "100")); - columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel( 86184, "个税扣缴义务人"), "taxAgent", "150")); - columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel( 121908, "收入所得项目"), "incomeCategory", "150")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(87614, "薪资所属月"), "salaryMonth")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "taxAgent")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "账套"), "salarySob")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "次数"), "acctTimes").setDisplay(WeaBoolAttr.FALSE)); +// columns.add(new WeaTableColumn("100px",SalaryI18nUtil.getI18nLabel( 121908, "收入所得项目"), "incomeCategory")); salaryStatisticsEmployeeDetailResult.getSalaryItemList().forEach(item -> { - columns.add(new WeaTableColumn(item.getName(), item.getId() + SalaryConstant.DYNAMIC_SUFFIX, "100")); + columns.add(new WeaTableColumn("100px", item.getName(), item.getId() + SalaryConstant.DYNAMIC_SUFFIX)); }); return columns; } diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index c4adc2860..5e1f16cbf 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -31,6 +31,8 @@ public interface SalaryAcctRecordService { */ SalaryAcctRecordPO getById(Long id); + List listAll(); + /** * 根据主键id查询薪资核算记录 * @@ -202,4 +204,7 @@ public interface SalaryAcctRecordService { List getBackCalcRecordByIds(Set salaryAcctIds); List listBySalaryAcctEmpId(Long salaryAcctEmpId); + + + } diff --git a/src/com/engine/salary/service/SalarySobService.java b/src/com/engine/salary/service/SalarySobService.java index 49846bbfc..dd39fc5ee 100644 --- a/src/com/engine/salary/service/SalarySobService.java +++ b/src/com/engine/salary/service/SalarySobService.java @@ -63,6 +63,8 @@ public interface SalarySobService { */ List listByDisable(Integer disable); + List listAll(); + /** * 获取拥有管理权限的账套 * @return diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 40387d1d2..434b74638 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -102,6 +102,11 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe return getSalaryAcctRecordMapper().getById(id); } + @Override + public List listAll() { + return getSalaryAcctRecordMapper().listAll(); + } + @Override public List listByIds(Collection ids) { if (CollectionUtils.isEmpty(ids)) { diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index da2075bd6..f10e53149 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -156,6 +156,11 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { return filterByAuthority(salarySobPOS); } + @Override + public List listAll() { + return salarySobMapper.listSome(SalarySobPO.builder().build()); + } + @Override public List listByAdmin() { List salarySobPOS = salarySobMapper.listSome(SalarySobPO.builder().build()); From 39ee8d9d355c9d79a08f1955544b1a1841a71923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 26 May 2023 14:45:04 +0800 Subject: [PATCH 112/245] =?UTF-8?q?=E4=BA=BA=E5=91=98=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=B1=95=E7=A4=BA=E8=B4=A6=E5=A5=97=E5=92=8C?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E8=AE=B0=E5=BD=95=E4=BF=A1=E6=81=AF=E3=80=81?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=88=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/web/SalaryFormulaController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/web/SalaryFormulaController.java b/src/com/engine/salary/web/SalaryFormulaController.java index f3d611dcc..38cfed67d 100644 --- a/src/com/engine/salary/web/SalaryFormulaController.java +++ b/src/com/engine/salary/web/SalaryFormulaController.java @@ -104,7 +104,7 @@ public class SalaryFormulaController { JsonNode jsonNode = mapper.readTree(this.getClass().getClassLoader().getResourceAsStream("com/engine/salary/constant/des.json")); return jsonNode.toString(); } catch (IOException e) { - e.printStackTrace(); + log.error("获取公式函数异常",e); } return "{\"data\":[{\"children\":[{\"name\":\"CONCAT\",\"chineseName\":\"链接多个文本\",\"description\":\"可用于连接多个任意类型的文本、日期、数字变量或常量。最后一个字符可使用'#分隔符#'标记为分隔符\",\"example\":\"CONCAT({总价}/10000, '万元')\",\"result\":\"100万元\",\"paramDescs\":[\"*文本1*(必选)\",\"*文本2*(可选)\",\"......\"],\"formatString\":\"CONCAT(文本1, 文本2, [文本3, …],[#分隔符#])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":true}]},{\"name\":\"TEXT\",\"chineseName\":\"将变量转为文本\",\"description\":\"将变量转为文本。\",\"example\":\"TEXT({当前数据.性别})\",\"result\":\"'男'\",\"paramDescs\":[\"*变量*(必选)\"],\"formatString\":\"TEXT(变量)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"VALUE\",\"chineseName\":\"将文本转为数字\",\"description\":\"将文本转为数字。\",\"example\":\"VALUE('23')\",\"result\":\"23\",\"paramDescs\":[\"*文本、数字、选项*(必选)\"],\"formatString\":\"VALUE([文本、数字、选项])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"LEN\",\"chineseName\":\"返回文本长度\",\"description\":\"返回文本的长度,中文、英文都算1个字符。\",\"example\":\"LEN('大家好dajiahao')\",\"result\":\"12\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"LEN(文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"SEARCH\",\"chineseName\":\"在文本中查找关键字\",\"description\":\"在指定文本中查找关键字,返回第一次出现关键字的字符位置,文本的第一个字记为1。未找到,返回0。搜索开始位置,表示从文本的第几个字符开始搜索,默认为1。\",\"example\":\"SEARCH('大家', '大家好大家好', 3)\",\"result\":\"4\",\"paramDescs\":[\"*文本关键字*(必选)\",\"*文本*(必选)\",\"*搜索开始位置*(可选)\"],\"formatString\":\"SEARCH(关键字, 文本, [搜索开始位置])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":false,\"infinite\":false}]},{\"name\":\"REPLACE\",\"chineseName\":\"替换文本中的字\",\"description\":\"在原文本中,从替换位置开始,往后数指定的替换字符数,将这段文本替换为新文本。\",\"example\":\"REPLACE('大家好大家好', 2, 3, 'dajia')\",\"result\":\"'大dajia家好'\",\"paramDescs\":[\"*文本*(必选)\"],\"formatString\":\"REPLACE(原文本, 替换开始位置, 替换字符数, 新文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"REPT\",\"chineseName\":\"将文本重复指定次数\",\"description\":\"将文本重复指定次数。\",\"example\":\"REPT('大家', 2)\",\"result\":\"'大家大家'\",\"paramDescs\":[\"*文本*(必选)\",\"*重复次数*(必选)\"],\"formatString\":\"REPT(文本, 重复次数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"PAD\",\"chineseName\":\"将文本填充至指定长度\",\"description\":\"将原文本填充到指定长度,如果文本长度大于设置的长度,则不做任何操作。填充位置可用参数:'LEFT'、'RIGHT'。\",\"example\":\"PAD('你好', 4, '你', 'LEFT')\",\"result\":\"'你你你好'\",\"paramDescs\":[\"*原文本*(必选)\",\"*长度*(必选)\",\"*填充用的文本*(必选)\",\"*填充位置*(可选)\"],\"formatString\":\"PAD(原文本, 长度, 填充用的文本, [填充位置])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"RIGHT\",\"LEFT\"],\"infinite\":false}]},{\"name\":\"TRIM\",\"chineseName\":\"清除前后空格\",\"description\":\"删除文本首尾的空格。\",\"example\":\"TRIM(' 大家好 ')\",\"result\":\"'大家好'\",\"paramDescs\":[\"*文本*(必选)\"],\"formatString\":\"TRIM(文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LEFT\",\"chineseName\":\"返回文本左侧开始的文字\",\"description\":\"从文本左侧开始,返回指定字符数的文字。\",\"example\":\"LEFT('大家好', 2)\",\"result\":\"'大家'\",\"paramDescs\":[\"*文本*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"LEFT(文本, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"RIGHT\",\"chineseName\":\"返回文本右侧开始的文字\",\"description\":\"从文本右侧开始,返回指定字符数的文字。\",\"example\":\"RIGHT('大家好', 2)\",\"result\":\"'家好'\",\"paramDescs\":[\"*文本*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"RIGHT(文本, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"MID\",\"chineseName\":\"返回文本指定位置开始的文字\",\"description\":\"从文本指定位置之后开始,返回指定字符数的文字。\",\"example\":\"MID('大家好', 2, 1)\",\"result\":\"'家'\",\"paramDescs\":[\"*文本*(必选)\",\"*指定位置*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"MID(文本, 指定位置, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"SCORE\",\"chineseName\":\"获取选项型控件分数\",\"description\":\"获取选项型控件(单选框、复选框、下拉菜单)分数。\",\"example\":\"SCORE({当前数据.单选框})\",\"result\":\"选项分数(注:未设置选项分数时,结果为0)\",\"paramDescs\":[\"*选项*(必选)\"],\"formatString\":\"SCORE({选项})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false}]},{\"name\":\"IDCARD\",\"chineseName\":\"身份证函数\",\"description\":\"从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。\",\"example\":\"IDCARD( ‘43070319980706334X’ , ‘BD’ )\",\"result\":\"'1998-07-06'\",\"paramDescs\":[\"*身份证号码*(必选)\",\"*查找类型*(必选)\"],\"formatString\":\"IDCARD({身份证号码}, {查找类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"BD\",\"NA\",\"AGE\",\"GENDER\"],\"infinite\":false}]},{\"name\":\"ISSTRING\",\"chineseName\":\"是否是字符串\",\"description\":\"判断是否是字符。\",\"example\":\"ISSTRING('泛微123456')\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"ISSTRING({任意控件})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISJSON\",\"chineseName\":\"JSON字符格式化\",\"description\":\"判断是不是JSON字符串,参数可以是数组,也可以是字符串,参数为数组时数组中必须只包含一个字符串。\",\"example\":\"假设文本控件={a:123},ISJSON({文本控件})\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"ISJSON({变量})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETJSONVALUE\",\"chineseName\":\"JSON字符取值\",\"description\":\"获取JSON值。第一个参数为json,可以是数组也可以是对象;第二个参数为json对象的键值,返回键值对应的值,json为数组时返回的多个值以逗号分隔\",\"example\":\"假设文本控件={a:123},GetJSONValue('{文本控件}','a')\",\"result\":\"123\",\"paramDescs\":[\"*变量或常量*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"GETJSONVALUE({变量1},变量2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISINT\",\"chineseName\":\"字符内容是否是整数\",\"description\":\"判断字符内容是否是整数\",\"example\":\"ISINT( 2.123 )\",\"result\":\"false\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"ISINT({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISNUMBER\",\"chineseName\":\"字符内容是否是数字\",\"description\":\"判断字符内容是否是数字。\",\"example\":\"ISNUMBER('2.123')\",\"result\":\"true\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"ISNUMBER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"SPLIT\",\"chineseName\":\"字符分割\",\"description\":\"字符分割函数,将字符以指定字符为依据分割字符为一组字符\",\"example\":\"假设文本控件=ABC#DEF,SPLIT('{文本控件}','#')\",\"result\":\"[ABC,DEF]\",\"paramDescs\":[\"*字符*(必选)\",\"*分割符*(必选)\"],\"formatString\":\"SPLIT({字符},{字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LOWER\",\"chineseName\":\"字符转小写\",\"description\":\"将字符中的字母转为小写。\",\"example\":\"LOWER('ABC')\",\"result\":\"abc\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"LOWER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"UPPER\",\"chineseName\":\"字符转大写\",\"description\":\"将字符中的字母转为大写。\",\"example\":\"UPPER('abc')\",\"result\":\"ABC\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"UPPER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"TEXTBEFORE\",\"chineseName\":\"截取N个分割符之前的字符\",\"description\":\"截取N个分割符之前的字符\",\"example\":\"TEXTBEFORE('abc-12','-',1)\",\"result\":\"abc\",\"paramDescs\":[\"*字符*(必选)\",\"*字符*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"TEXTBEFORE({目标文本},{分隔符},{索引下标})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"TEXTAFTER\",\"chineseName\":\"截取N个分隔符之后的字符\",\"description\":\"截取N个分隔符之后的字符\",\"example\":\"TEXTAFTER('abc-12','-',1)\",\"result\":\"12\",\"paramDescs\":[\"*字符*(必选)\",\"*字符*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"TEXTAFTER({目标文本},{分隔符},{索引下标})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"char\",\"name\":\"字符函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"COUNT\",\"chineseName\":\"计数\",\"description\":\"返回指定表格中满足条件的数据条数。\",\"example\":\"COUNT({员工表})\",\"result\":\"1\",\"paramDescs\":[\"*表*(必选)\"],\"formatString\":\"COUNT(表)\",\"paramArray\":[\"Form\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"SUM\",\"chineseName\":\"求和\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的总和。统计条件中不可嵌套使用统计函数。\",\"example\":\"SUM({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"SUM(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"AVG\",\"chineseName\":\"平均值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的平均值。统计条件中不可嵌套使用统计函数。\",\"example\":\"AVG({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"AVG(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"MIN\",\"chineseName\":\"最小值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的最小值。统计条件中不可嵌套使用统计函数。\",\"example\":\"MIN({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"MIN(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"MAX\",\"chineseName\":\"最大值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的最大值。统计条件中不可嵌套使用统计函数。\",\"example\":\"MAX({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"MAX(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3}],\"dataType\":\"agg\",\"name\":\"聚合函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"TODAY\",\"chineseName\":\"当前日期\",\"description\":\"返回当天日期。\",\"example\":\"TODAY()\",\"result\":\"'2020-01-01'\",\"formatString\":\"TODAY()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"NOW\",\"chineseName\":\"当前日期时间\",\"description\":\"返回当天日期+时间。\",\"example\":\"NOW()\",\"result\":\"'2016-12-24 12:05:38'\",\"formatString\":\"NOW()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"DATEADD\",\"chineseName\":\"对日期加减年、月、日\",\"description\":\"对日期加减按照单位加减。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\"example\":\"DATEADD('2016-12-21', 3)
DATEADD('2016-12-24 20:00:00', 3, 'H')\",\"result\":\"'2016-12-24'
'2016-12-24 23:00:00'\",\"paramDescs\":[\"*日期*(必选)\",\"*数值*(必选)\",\"*单位*(可选)\"],\"formatString\":\"DATEADD(日期,数值 , [单位])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"Y\",\"M\",\"D\",\"H\",\"I\",\"S\"],\"infinite\":false}]},{\"name\":\"DATEDIFF\",\"chineseName\":\"返回两个日期的差值\",\"description\":\"根据指定的单位,返回日期2减去日期1的差值。当日期2小于日期1时,差值为负值。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\"example\":\"DATEDIF('2016-12-21', '2016-12-24')
DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H')\",\"result\":\"3
24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*单位*(可选)\"],\"formatString\":\"DATEDIFF(日期1, 日期2, [单位])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"Y\",\"M\",\"D\",\"H\",\"I\",\"S\"],\"infinite\":false}]},{\"name\":\"DATEFORMAT\",\"chineseName\":\"返回指定格式的日期\",\"description\":\"将日期转为指定格式返回。
yyyy 将年份显示为1900-9999
yy 将年份显示为00-99
mm 将月份显示为 01–12
dd 将日期显示为 01–31\",\"example\":\"DATEFORMAT('2016-12-24', 'YY-MM-DD')\",\"result\":\"2016-12-24\",\"paramDescs\":[\"*日期*(必选)\",\"*日期格式*(必选)\"],\"formatString\":\"DATEFORMAT(日期, 可选格式)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"YEAR\",\"chineseName\":\"返回日期中的年\",\"description\":\"返回指定日期中的年。\",\"example\":\"YEAR('2016-12-24')\",\"result\":\"2016\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"YEAR(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"MONTH\",\"chineseName\":\"返回日期中的月\",\"description\":\"返回指定日期中的月。\",\"example\":\"MONTH('2016-12-24')\",\"result\":\"12\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"MONTH(日期)\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"DAY\",\"chineseName\":\"返回日期中的日\",\"description\":\"返回指定日期中的日。\",\"example\":\"DAY('2016-12-24')\",\"result\":\"24\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"DAY(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"HOUR\",\"chineseName\":\"返回日期中的小时\",\"description\":\"返回指定日期中的小时。\",\"example\":\"HOUR('2016-12-24 20:30:56')\",\"result\":\"20\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"HOUR(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"MINUTE\",\"chineseName\":\"返回日期中的分钟\",\"description\":\"返回指定日期中的分钟。\",\"example\":\"MINUTE('2016-12-24 20:30:56')\",\"result\":\"30\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"MINUTE(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"SECOND\",\"chineseName\":\"返回日期中的秒\",\"description\":\"返回指定日期中的秒钟。\",\"example\":\"SECOND('2016-12-24 20:30:56')\",\"result\":\"56\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"SECOND(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"WEEKNUM\",\"chineseName\":\"返回日期为第几周\",\"description\":\"返回指定日期为第几周,从每年第1天开始算第1周。\",\"example\":\"WEEKNUM('2016-12-24')\",\"result\":\"52\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"WEEKNUM(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"WEEKDAY\",\"chineseName\":\"返回日期为星期几\",\"description\":\"返回指定日期为星期几。返回值为0~6,代表周日~周六。\",\"example\":\"WEEKDAY('2016-12-24')\",\"result\":\"6\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"WEEKDAY(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"NETWORKDAYSPI\",\"chineseName\":\"返回所选时间段内包含的工作日天数\",\"description\":\"查询类型为attend时,即按考勤制度查询,将截止当前日期之前(支持选到当前日期,最大支持跨度为365天)的所选时间段内包含的工作日天数返回。
注意:此函数只能选择过去的时间(可选到当前日期)才可使用,跨度不能超过365天。查询类型为statutory时,即按法定查询,没有限制。当日期2小于日期1时,差值为负值。单位默认为日。\",\"example\":\"想知道李四在2021-11-07和2021-11-12之间的工作日天数NETWORKDAYSPI('2021-11-07', '2021-11-12','李四')\",\"result\":\"5\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*人员*(必选)\",\"*类型*(可选,attend为考勤制度,statutory为法定,默认attend)\"],\"formatString\":\"NETWORKDAYSPI(日期1, 日期2, 成员, [类型])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"employee\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":false,\"infinite\":false}]},{\"name\":\"EOMONTH\",\"chineseName\":\"返回某月最后一天日期\",\"description\":\"将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。\",\"example\":\"EOMONTH('2021-11-07', -2)\",\"result\":\"2021-09-30\",\"paramDescs\":[\"*日期*(必选)\",\"*数值*(必选)\"],\"formatString\":\"EOMONTH(日期,指定日期之前或之后的月数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"CURRYEAR\",\"chineseName\":\"返回当前年份\",\"description\":\"取当前日期的年份。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRYEAR()\",\"result\":\"2022\",\"formatString\":\"CURRYEAR()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRMONTH\",\"chineseName\":\"返回当前月份\",\"description\":\"取当前日期的月份。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRMONTH()\",\"result\":\"2\",\"formatString\":\"CURRMONTH()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRDAY\",\"chineseName\":\"返回当前第几日(当月)\",\"description\":\"取当前日期的天。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRDAY()\",\"result\":\"17\",\"formatString\":\"CURRDAY()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRWEEK\",\"chineseName\":\"返回当前是周几\",\"description\":\"取当前日期是周几。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRWEEK()\",\"result\":\"4\",\"formatString\":\"CURRWEEK()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRHOUR\",\"chineseName\":\"返回当前小时\",\"description\":\"取当前日期的小时。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRHOUR()\",\"result\":\"11\",\"formatString\":\"CURRHOUR()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRMINUTE\",\"chineseName\":\"返回当前分\",\"description\":\"取当前日期的分钟。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRMINUTE()\",\"result\":\"20\",\"formatString\":\"CURRMINUTE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRSECOND\",\"chineseName\":\"返回当前秒\",\"description\":\"取当前日期的秒钟。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRSECOND()\",\"result\":\"30\",\"formatString\":\"CURRSECOND()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"MAXDATE\",\"chineseName\":\"返回一组日期中的最大值\",\"description\":\"取一组日期中的最大值。\",\"example\":\"MAXDATE('2016-12-24', '2022-12-24')\",\"result\":\"2022-12-24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\"],\"formatString\":\"MAXDATE(日期1,日期2,……)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":true}]},{\"name\":\"MINDATE\",\"chineseName\":\"返回一组日期中的最小值\",\"description\":\"取一组日期中的最小值。\",\"example\":\"MINDATE('2016-12-24', '2022-12-24')\",\"result\":\"2016-12-24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\"],\"formatString\":\"MINDATE(日期1,日期2,……)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":true}]},{\"name\":\"COMPAREDATE\",\"chineseName\":\"返回两个日期指定时间的差值\",\"description\":\"日期比较,返回两个日期指定时间域的差值。可比较的时间域包括'Y'-比较年;'M'-比较月;'D'-比较日;'H'-比较小时;'I'-比较分钟;'S'-比较秒。\",\"example\":\"假设 日期1=2022-04-03、日期2=2022-04-04,COMPAREDATE({日期1},{日期2},'D')\",\"result\":\"1\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*比较类型*(可选)\"],\"formatString\":\"COMPAREDATE(日期1,日期2,[比较类型])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"TIMESTAMPTODATE\",\"chineseName\":\"返回时间戳转换后的日期\",\"description\":\"将时间戳按指定格式转换成日期。\",\"example\":\"TIMESTAMPTODATE('1671172579', 'yyyy-MM-dd HH:mm:ss')\",\"result\":\"2022-12-16 14:36:19\",\"paramDescs\":[\"*时间戳*(必选)\",\"*日期格式*(可选,默认yyyy-MM-dd HH:mm:ss)\"],\"formatString\":\"TIMESTAMPTODATE(时间戳,日期格式)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":false,\"infinite\":false}]},{\"name\":\"DATETOTIMESTAMP\",\"chineseName\":\"返回日期转换后的时间戳\",\"description\":\"将日期转换成时间戳。\",\"example\":\"DATETOTIMESTAMP('2022-12-16 14:36:19'\",\"result\":\"'1671172579'\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"DATETOTIMESTAMP(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"DATE\",\"chineseName\":\"拼接日期字符串\",\"description\":\"拼接日期\",\"example\":\"DATE('2022','12','16')\",\"result\":\"'2022-12-16'\",\"paramDescs\":[\"*日期字符*(必选)\"],\"formatString\":\"DATE({年},{月},{日})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"DAYS\",\"chineseName\":\"计算两个日期自建的间隔天数\",\"description\":\"计算两个日期的间隔天数\",\"example\":\"DAYS('2022-12-16','2022-12-18')\",\"result\":\"2\",\"paramDescs\":[\"*日期字符*(必选)\"],\"formatString\":\"DAYS({日期},{日期})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"date\",\"name\":\"日期函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"IF\",\"chineseName\":\"如果条件为真,则...否则...\",\"description\":\"如果条件为真,则执行表达式1,为假则执行表达式2。条件中不可嵌套使用IF函数。\",\"example\":\"IF({员工表.年龄} > 60, '退休', '在职')
IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')\",\"result\":\"'退休'
'在职'\",\"paramDescs\":[\"*条件*(必选)\",\"*表达式1*(必选)\",\"*表达式2*(必选)\"],\"formatString\":\"IF(条件, 表达式1, 表达式2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"AND\",\"chineseName\":\"且\",\"description\":\"所有条件均为真,则返回真,否则返回假。逻辑操作AND的函数模式。\",\"example\":\"AND(2 = 2, 2 < 2)\",\"result\":\"false\",\"paramDescs\":[\"*条件1*(必选)\",\"*条件2*(可选,可输入多个参数)\"],\"formatString\":\"AND(条件1, 条件2, [条件3, …])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":true}]},{\"name\":\"OR\",\"chineseName\":\"或\",\"description\":\"任意一个条件为真,则返回真,否则返回假。逻辑操作OR的函数模式。\",\"example\":\"OR(2 = 2, 2 > 3)\",\"result\":\"true\",\"paramDescs\":[\"*条件1*(必选)\",\"*条件2*(可选,可输入多个参数)\"],\"formatString\":\"OR(条件1, 条件2, [条件3, …])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":true}]},{\"name\":\"NOT\",\"chineseName\":\"反转真假结果\",\"description\":\"对逻辑结果取反。\",\"example\":\"NOT(2 > 3)\",\"result\":\"true\",\"paramDescs\":[\"*逻辑结果*(必选)\"],\"formatString\":\"NOT(逻辑结果)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false}]},{\"name\":\"IN\",\"chineseName\":\"变量是否包含在一组结果中\",\"description\":\"任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。\",\"example\":\"IN(2, [2, 3, 4])\",\"result\":\"true\",\"paramDescs\":[\"*变量*(必选)\",\"*变量数组*(必选)\"],\"formatString\":\"IN(变量, [变量1, 变量2, …])\",\"paramArray\":[],\"paramData\":[\"{}\",\"[]\"],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"LIKE\",\"chineseName\":\"文本是否包含任意一个关键字\",\"description\":\"文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个,则返回真。逻辑操作LIKE的函数模式。\",\"example\":\"LIKE('大家好', ['大家', '好'])\",\"result\":\"true\",\"paramDescs\":[\"*文本*(必选)\",\"*文本数组*(必选)\"],\"formatString\":\"LIKE(文本, [文本1, 文本2, …])\",\"paramArray\":[],\"paramData\":[\"{}\",\"[]\"],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISEMPTY\",\"chineseName\":\"是否为空\",\"description\":\"变量为空或未填写,则返回真。\",\"example\":\"ISEMPTY({员工表.电话})\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(可选)\"],\"formatString\":\"ISEMPTY(变量)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"TRUE\",\"chineseName\":\"返回真\",\"description\":\"返回真。\",\"example\":\"TRUE()\",\"result\":\"true\",\"formatString\":\"TRUE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"FALSE\",\"chineseName\":\"返回假\",\"description\":\"返回假。\",\"example\":\"FALSE()\",\"result\":\"false\",\"formatString\":\"FALSE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"IFS\",\"chineseName\":\"多条件\",\"description\":\"多个条件判断,位于单数位置的参数设置为条件,位于双数位置的参数设置为结果,最后一个参数为默认返回值,当所有条件都不满足的时候返回默认参数。\",\"example\":\"IFS(1>1,1,1=1,2,0)\",\"result\":\"2\",\"paramDescs\":[\"*条件1*(必选)\",\"*变量或常量*(必选)\",\"*条件2*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"IFS({条件1},{结果1},{条件2},{结果2}...{默认结果})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"SWITCH\",\"chineseName\":\"条件选择\",\"description\":\"条件选择。\",\"example\":\"SWITCH({字段1},1,'A',2,'B','C')\",\"result\":\"假设字段1为2,结果:'B'\",\"paramDescs\":[\"*变量或常量*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(可选)\",\"*变量或常量*(可选)\",\"*变量或常量*(必选)\"],\"formatString\":\"SWITCH({变量},{条件1},{结果1},{条件2},{结果2}...{默认结果})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"SORT\",\"chineseName\":\"条件排序\",\"description\":\"根据排序条件进行字符和数字的排序,UP为升序,DOWN为降序。\",\"example\":\"SORT(1,2,5,4,3,'UP')\",\"result\":\"[1,2,3,4,5]\",\"paramDescs\":[\"*字符或数字*(必选)\",\"*字符或数字*(可选)\",\"......\",\"*排序方式*\"],\"formatString\":\"SORT({变量1},{变量2},{变量3}...{排序方式})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"IFERROR\",\"chineseName\":\"异常处理\",\"description\":\"异常处理函数\",\"example\":\"IFERROR(10/0,'0')\",\"result\":\"0\",\"paramDescs\":[\"*公式内容*\"],\"formatString\":\"IFERROR({变量},{变量})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"logic\",\"name\":\"逻辑函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"ROUNDUP\",\"chineseName\":\"向上舍入\",\"description\":\"根据设置的小数位精确度,返回对数值向上舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向上舍入到指定的小数位。如果小数位精确度等于 0,则向上舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUNDUP(76.9,0)\",\"result\":\"77\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUNDUP(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"ROUND\",\"chineseName\":\"四舍五入\",\"description\":\"根据设置的小数位精确度,返回对数值四舍五入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,针对小数点后的数据进行四舍五入;如果小数位精确度等于 0,返回最接近数值的整数;如果小数位精确度为负整数,针对小数点前的数据进行四舍五入,被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUND(123.456,2),ROUND(123.456,0),ROUND(123.456,-2)\",\"result\":\"依次为123.46,123,100\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUND(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"ROUNDDOWN\",\"chineseName\":\"向下舍入\",\"description\":\"根据设置的小数位精确度,返回对数值向下舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向下舍入到指定的小数位。如果小数位精确度等于 0,则向下舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUNDDOWN(76.9,0)\",\"result\":\"76\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUNDDOWN(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"AGGREGATION\",\"chineseName\":\"聚合运算\",\"description\":\"将一组数据进行统计计算,支持最大值(MAX)、最小值(MIN)、平均值(AVG)。\",\"example\":\"AGGREGATION(1 , 2,3,'AVG')\",\"result\":\"2\",\"paramDescs\":[\"*数字*(必选)\",\"*聚合运算类型*(必选)\"],\"formatString\":\"AGGREGATION({数字}...,{聚合运算类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":true},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"avg\",\"max\",\"min\"],\"infinite\":false}]},{\"name\":\"MOD\",\"chineseName\":\"求余\",\"description\":\"将两个参数进行除法运算然后得出余数返回。\",\"example\":\"MOD( 7 , 3 )\",\"result\":\"1\",\"paramDescs\":[\"*数字*(必选)\",\"*数字*(必选)\"],\"formatString\":\"ROUNDDOWN({数字},{数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"TRUNC\",\"chineseName\":\"数字格式化\",\"description\":\"将小数点格式化成指定位数。\",\"example\":\"TRUNC( 2.123 , 2 )\",\"result\":\"2.12\",\"paramDescs\":[\"*数字*(必选)\",\"*精度*(必选)\"],\"formatString\":\"ROUNDDOWN({数字},{精度})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"CALDTROW\",\"chineseName\":\"明细逐行计算函数\",\"description\":\"明细逐行计算\",\"example\":\"假设:明细有金额1、金额2、金额3等三个控件,明细行数为2,第一行值分别为:5、6、10,第二行的值分别为:1、1、9。CALDTROW({金额3}==10,{金额1}+{金额2})\",\"result\":\"当金额3等于10的时候运算加法,只有第一行的金额3等于10,明细第一行的金额3赋值为11\",\"paramDescs\":[\"*字段*(必选)\",\"*公式或字段*(必选)\"],\"formatString\":\"CALDTROW({字段},{公式或字段})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"ABS\",\"chineseName\":\"绝对值\",\"description\":\"绝对值\",\"example\":\"ABS(-9)\",\"result\":\"9\",\"paramDescs\":[\"*字段*(必选)\"],\"formatString\":\"ABS({字段})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"RANDOM\",\"chineseName\":\"随机数生成\",\"description\":\"随机数生成\",\"example\":\"RANDOM(5,'NUM')\",\"result\":\"26489\",\"paramDescs\":[\"*数字*(必选)\",\"*文本*(必选)[NUM(数字)、CHAR(字符)、FIX(字符与数字混合)]\"],\"formatString\":\"RANDOM({随机数长度},{随机类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"POWER\",\"chineseName\":\"N次方\",\"description\":\"计算数值的N次方\",\"example\":\"POWER(2, 2)
POWER(4, 1/2)\",\"result\":\"4
2\",\"paramDescs\":[\"*数字*(必选)\",\"*数字*(必选,N次方的N)\"],\"formatString\":\"POWER({数字}, {数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"SQRT\",\"chineseName\":\"根号\",\"description\":\"将数值开根号\",\"example\":\"SQRT(4)\",\"result\":\"2\",\"paramDescs\":[\"*数字*(必选)\"],\"formatString\":\"SQRT({数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"math\",\"name\":\"数学函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"GETMONEY\",\"chineseName\":\"获取所给定数字的金额大写\",\"description\":\"将金额转换成中文金额大写。\",\"example\":\"GETMONEY({1234})\",\"result\":\"壹仟贰佰叁拾肆元整\",\"paramDescs\":[\"*数字*(必选)\"],\"formatString\":\"GETMONEY({数字})\",\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"finance\",\"name\":\"财务函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"default\",\"chineseName\":\"default\",\"description\":\"暂无\",\"formatString\":\"default()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"text\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"extend\",\"name\":\"自定义拓展函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"CHOOSE\",\"chineseName\":\"返回索引范围内指定的值\",\"description\":\"根据索引位置获取数据。\",\"example\":\"假设:数字输入框1为0,数字输入框2为2,数字输入框3为3,数字输入框4为4。数字输入框1为检索位置的变量,后面3个为检索目标。 示例:CHOOSE({表A.数字输入框1}, {表A.数字输入框2}, {表A.数字输入框3}, {表A.数字输入框4})\",\"result\":\"2,从数字输入框2开始进行检索,数字输入框2的检索位置为0,后续数据位置依次累加1可以得出。\",\"paramDescs\":[\"*索引位置*(必选)\",\"*索引目标1*(必选)\",\"......\"],\"formatString\":\"CHOOSE(索引位置,索引目标1...索引目标N)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"VLOOKUPS\",\"chineseName\":\"按列查找,返回所需值\",\"description\":\"按列查找,返回所需值。常用于薪酬模块。根据条件获取查询参数所在列的返回参数的值。返回参数可填写多个,用英文逗号隔开。若查询不到返回null。\",\"example\":\"VLOOKUPS({税表},{税表.收入},AND({税表.收入}>{税表.应纳税所得额下限},{税表.收入}<{税表.应纳税所得额上限}),[{税表.税率},{税表.速算扣除数}]) \",\"result\":\"按列查找返回税表中收入所在的收入区间所对应的税率和速算扣除数的数值\",\"paramDescs\":[\"*表*(必选)\",\"*条件*(必选)\",\"*返回参数*(必选)\"],\"formatString\":\"VLOOKUPS(表,[条件],[返回参数])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"MATCH\",\"chineseName\":\"返回指定数值在指定数组区域中的位置\",\"description\":\"将指定数值在指定数组区域中的位置返回。若数组中无指定值,返回null。\",\"example\":\"MATCH(15000, [1000, 15000, 2000])\",\"result\":\"1\",\"paramDescs\":[\"*值*(必选)\",\"*数组*(必选)\"],\"formatString\":\"MATCH(值,[数组])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"FIND\",\"chineseName\":\"查找\",\"description\":\"用指定参数去另一个参数列表中查找匹配项,指定参数时,填写1则去第一个参数列表中查找,2则是第二个参数列表里匹配查找第一个参数,成功则返回true,失败返回false。\",\"example\":\"FIND([1,2,3],[1,2,3,4],1)\",\"result\":\"true\",\"paramDescs\":[\"*查找值1*(必选)\",\"......\",\"*查找值N*(可选)\",\"*查找目标1*(必选)\",\"......\",\"*查找目标N*(可选)\"],\"formatString\":\"FIND([{查找值1},{查找值2}...{查找值N}],[{查找目标1},{查找目标2}...{查找目标N}])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"INDEX\",\"chineseName\":\"数据索引\",\"description\":\"数据索引函数,根据索引位置返回一组数据中对应位置的数据。注意:索引位置是从0开始的。\",\"example\":\"假设:数字控件1=2,金额控件1=3,金额控件3=5,INDEX(1,[{数字控件1},{金额控件1},{金额控件2}]\",\"result\":\"3(索引下标为1,返回数组中第二个参数)\",\"paramDescs\":[\"*索引位置*(必选)\",\"*数组*(必选)\"],\"formatString\":\"INDEX({查找值},[{查找目标1},{查找目标2}...{查找目标N}])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"UNIQUE\",\"chineseName\":\"唯一值过滤\",\"description\":\"唯一值过滤函数,得到一组数据,然后去掉重复的值,返回所有去重后的一组数据。\",\"example\":\"假设:文本控件1='A',文本控件2='B',文本控件3='B',UNIQUE({文本控件1},{文本控件2},{文本控件3})\",\"result\":\"[{文本控件1},{文本控件2}]\",\"paramDescs\":[\"*数组*(必选)\"],\"formatString\":\"UNIQUE({过滤目标1},{过滤目标2}...{过滤目标N})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"FILTER\",\"chineseName\":\"条件过滤\",\"description\":\"过滤函数,通过一个或多个条件过滤参数中的数据,返回所有符合条件的一组数据。\",\"example\":\"假设:文本控件1='A',文本控件2='B',文本控件3='B',FILTER([{文本控件1},{文本控件2},{文本控件3}],'B')\",\"result\":\"[{文本控件2},{文本控件3}]\",\"paramDescs\":[\"*数组*(必选)\",\"*过滤字段*(必选)\"],\"formatString\":\"FILTER([{过滤目标1},{过滤目标2}...{过滤目标N}],{过滤字段}={过滤依据})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"find\",\"name\":\"查找函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"GETHRMLOGINID\",\"chineseName\":\"返回指定人员系统账号\",\"description\":\"获取指定人员系统账号。\",\"example\":\"GETHRMLOGINID({表单.张三})\",\"result\":\"'zhangsan@qq.com'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMLOGINID({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMWORKCODE\",\"chineseName\":\"返回指定人员编号\",\"description\":\"获取指定人员编号。\",\"example\":\"GETHRMWORKCODE({表单.张三})\",\"result\":\"'A001'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMWORKCODE({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMMANAGER\",\"chineseName\":\"返回指定人员直接上级\",\"description\":\"获取指定人员直接上级。返回值为对应人员直接上级的ID。\",\"example\":\"GETHRMMANAGER({表单.张三})\",\"result\":\"'1559563038252396708'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMMANAGER({人员}})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMEMAIL\",\"chineseName\":\"获取指定人员邮箱\",\"description\":\"获取指定人员邮箱。\",\"example\":\"GETHRMEMAIL({表单.张三})\",\"result\":\"'2345@163.com'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMEMAIL({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMSECLEVEL\",\"chineseName\":\"获取指定人员安全级别\",\"description\":\"获取指定人员安全级别。\",\"example\":\"张三安全级别为1;GETHRMSECLEVEL({表单.张三})\",\"result\":\"'1'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMSECLEVEL({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMALLMANAGER\",\"chineseName\":\"返回指定人员所有上级\",\"description\":\"获取指定人员所有上级。存在多个上级时,返回所有上级形成的数组。\",\"example\":\"GETHRMALLMANAGER({表单.张三})\",\"result\":\"返回张三的所有上级形成的数组\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMALLMANAGER({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMDEPARTMENT\",\"chineseName\":\"返回指定人员部门\",\"description\":\"获取指定人员部门。返回值为部门ID。\",\"example\":\"GETHRMDEPARTMENT({表单.张三})\",\"result\":\"'1560052731319352218'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMDEPARTMENT({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMSUBCOMPANY\",\"chineseName\":\"返回指定人员分部\",\"description\":\"取指定人员分部,返回值为分部ID。\",\"example\":\"GETHRMSUBCOMPANY({表单.张三})\",\"result\":\"'1560052731319352218'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMSUBCOMPANY({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDEPARTMENTNAME\",\"chineseName\":\"返回指定部门名称\",\"description\":\"获取指定部门名称。\",\"example\":\"GETDEPARTMENTNAME({表单.A部门})\",\"result\":\"'A部门'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETDEPARTMENTNAME({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDEPARTMENTCODE\",\"chineseName\":\"返回指定部门编号\",\"description\":\"获取指定部门编号。\",\"example\":\"GETDEPARTMENTCODE({表单.A部门})\",\"result\":\"'A001'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETDEPARTMENTCODE({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUPERDEPARTMENT\",\"chineseName\":\"返回指定部门直接上级部门\",\"description\":\"获取指定部门直接上级部门。返回值为对应部门直接上级部门的ID。\",\"example\":\"GETSUPERDEPARTMENT({表单.A部门})\",\"result\":\"'1559563038252396709'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETSUPERDEPARTMENT({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETALLSUPERDEPARTMENT\",\"chineseName\":\"返回指定部门所有上级部门\",\"description\":\"获取指定部门所有上级部门。存在多个上级部门时,返回所有上级部门形成的数组。\",\"example\":\"GETALLSUPERDEPARTMENT({表单.A部门})\",\"result\":\"返回A部门的所有上级部门形成的数组\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETALLSUPERDEPARTMENT({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUBCOMPANYNAME\",\"chineseName\":\"返回指定分部名称\",\"description\":\"获取指定分部名称。\",\"example\":\"GETSUBCOMPANYNAME({表单.A分部})\",\"result\":\"'A分部'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUBCOMPANYNAME({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUBCOMPANYCODE\",\"chineseName\":\"返回指定分部编号\",\"description\":\"获取指定分部编号。\",\"example\":\"GETSUBCOMPANYCODE({表单.A分部})\",\"result\":\"'B001'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUBCOMPANYCODE({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUPERSUBCOMPANY\",\"chineseName\":\"返回指定分部直接上级分部\",\"description\":\"获取指定分部直接上级分部。返回值为对应部门直接上级分部的ID。\",\"example\":\"GETSUPERSUBCOMPANY({表单.A分部})\",\"result\":\"'1559563038252396705'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUPERSUBCOMPANY({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETALLSUPERSUBCOMPANY\",\"chineseName\":\"返回指定分部所有上级分部\",\"description\":\"获取指定分部所有上级分部。存在多个上级分部时,返回所有上级分部形成的数组。\",\"example\":\"GETALLSUPERSUBCOMPANY({表单.A分部})\",\"result\":\"A分部的所有上级分部形成的数组\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETALLSUPERSUBCOMPANY({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMNAME\",\"chineseName\":\"获取人员名称\",\"description\":\"获取指定人员的姓名。\",\"example\":\"GETHRMNAME({U:张三})\",\"result\":\"'张三'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMNAME({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMMOBILE\",\"chineseName\":\"获取人员手机号码\",\"description\":\"获取指定人员的手机号码。\",\"example\":\"GETHRMMOBILE({U:张三})\",\"result\":\"13123232323\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMMOBILE({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETREQUESTMARK\",\"chineseName\":\"获取指定流程编号\",\"description\":\"获取指定流程编号\",\"example\":\"假设关联流程=流程数据A,编号为:2332323,GETREQUESTMARK({关联流程})\",\"result\":\"'2332323'\",\"paramDescs\":[\"*关联流程*(必选)\"],\"formatString\":\"GETREQUESTMARK({关联流程})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDOCCODE\",\"chineseName\":\"获取指定文档编号\",\"description\":\"获取指定文档编号。\",\"example\":\"假设关联文档=文档A,文档A编号为:234567,GETDOCCODE({关联文档})\",\"result\":\"'234567'\",\"paramDescs\":[\"*关联文档*(必选)\"],\"formatString\":\"GETDOCCODE({关联文档})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETPRJCODE\",\"chineseName\":\"获取指定项目编号\",\"description\":\"获取指定项目编号。\",\"example\":\"假设关联项目=项目A,项目A编号为:2838383,GETPRJCODE({关联项目})\",\"result\":\"'2838383'\",\"paramDescs\":[\"*关联项目*(必选)\"],\"formatString\":\"GETPRJCODE({关联项目})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETCRMCODE\",\"chineseName\":\"获取指定客户编号\",\"description\":\"获取指定客户编号。\",\"example\":\"假设关联客户=客户A,客户A编号为:2838383,GETCRMCODE({关联客户})\",\"result\":\"'2838383'\",\"paramDescs\":[\"*关联客户*(必选)\"],\"formatString\":\"GETCRMCODE({关联客户})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LANGUAGE\",\"chineseName\":\"当前语言\",\"description\":\"获取当前语言。\",\"example\":\"LANGUAGE()\",\"result\":\"简体中文\",\"formatString\":\"LANGUAGE()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETREQUESTSTATUS\",\"chineseName\":\"流程状态\",\"description\":\"获取流程状态。示例:假设关联流程所选中的数据正在审批中;GETREQUESTSTATUS({表单.关联流程})
结果:'审批中'\",\"example\":\"假设关联流程所选中的数据正在审批中;GETREQUESTSTATUS({表单.关联流程})\",\"result\":\"'审批中'\",\"paramDescs\":[\"*关联流程*(必选)\"],\"formatString\":\"GETREQUESTSTATUS()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETEMPIDBYMOBILE\",\"chineseName\":\"人员手机获取人员ID\",\"description\":\"人员手机获取人员ID\",\"example\":\"人员手机号码获取人员ID;GETEMPIDBYMOBILE({手机号})\",\"result\":\"'342143214234213'\",\"paramDescs\":[\"*手机号*(必选)\"],\"formatString\":\"GETEMPIDBYMOBILE()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"database\",\"name\":\"数据库函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"DISTANCE\",\"chineseName\":\"返回两个位置间的直线距离\",\"description\":\"返回两个位置间的直线距离,单位m(米)。\",\"example\":\"DISTANCE({表A.地理位置1}, {表A.地理位置2})\",\"result\":\"23000\",\"paramDescs\":[\"*地理位置1*(必选)\",\"*地理位置2*(必选)\"],\"formatString\":\"DISTANCE({地理位置1}, {地理位置2})\",\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false},{\"dataType\":\"option\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETUSER\",\"chineseName\":\"返回用户的个人资料\",\"description\":\"返回用户的指定资料项:name、phone、mobile、email。\",\"example\":\"GETUSER({表A.人员选择}, 'mobile')\",\"result\":\"'18692108017'\",\"paramDescs\":[\"*人员选择*(必选)\",\"*文本*(必选,资料项)\"],\"formatString\":\"GETUSER({人员选择}, 文本)\",\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"FIELDS\",\"chineseName\":\"根据条件和排序获取指定表格中的全部数据(最多50条)或指定条数的数据的指定字段值的集合。\",\"description\":\"根据条件和排序获取指定表格中的全部数据(最多50条)或指定条数的数据的指定字段值的集合。\",\"example\":\"FIELDS({表A.负责人}, {表A.销售状态} = {C:已签约}, {表A.创建时间-倒序}, 'desc', 50})\",\"result\":\"返回销售状态为已签约的最新发布的50条数据中负责人的集合\",\"paramDescs\":[\"*字段*(必选)\",\"*条件*(可选)\",\"*排序字段*(可选)\",\"*排序类型*(可选,asc为升序,desc为降序。默认值asc)\",\"*返回条数*(可选)\"],\"formatString\":\"FIELDS({字段}, [条件], [排序字段], [排序类型], [返回条数])\",\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0}],\"dataType\":\"special\",\"name\":\"特殊函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"monthNumber\",\"chineseName\":\"月份差 +1\",\"description\":\" 计算两个日期相差的月份数 +1\",\"formatString\":\"monthNumber(date1,date2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"getEndDate\",\"chineseName\":\"根据合同期限计算合同结束日期\",\"description\":\"需传入两个参数\\n参数1、合同开始日期\\n参数2、整年(如:1、2、3)\",\"formatString\":\"getEndDate(startDate,expirationDate)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0}],\"dataType\":\"custom\",\"name\":\"自定义JS脚本函数\",\"action\":\"DataSource\",\"type\":\"functions\"}]}"; } From 7e841f6fd319853badfc12fd7ff53acaa89a24b6 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 26 May 2023 15:13:56 +0800 Subject: [PATCH 113/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=9E=E7=AE=97?= =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=90=88=E8=AE=A1=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SalarySendServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 80505f6c0..ed37f7374 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1346,7 +1346,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); // 查询薪资核算结果 - Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId, Collectors.toList()); List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 是否是补发工资单 List salarySendInfoPOS = getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).build()); From 0734b5ce010c74054498fed51d4444363e4f34e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 26 May 2023 15:40:08 +0800 Subject: [PATCH 114/245] =?UTF-8?q?=E5=85=AC=E5=BC=8Fdes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formlua/constant/FormluaConstant.java | 1534 +++++++++++++++++ .../SalaryStatisticsEmployeeWrapper.java | 1 + .../salary/web/SalaryFormulaController.java | 13 +- 3 files changed, 1537 insertions(+), 11 deletions(-) create mode 100644 src/com/engine/salary/formlua/constant/FormluaConstant.java diff --git a/src/com/engine/salary/formlua/constant/FormluaConstant.java b/src/com/engine/salary/formlua/constant/FormluaConstant.java new file mode 100644 index 000000000..df616310e --- /dev/null +++ b/src/com/engine/salary/formlua/constant/FormluaConstant.java @@ -0,0 +1,1534 @@ +package com.engine.salary.formlua.constant; + + +public class FormluaConstant { + + public static final String DES = "{\n" + + " \"data\": [\n" + + " {\n" + + " \"children\": [\n" + + " {\n" + + " \"name\": \"CONCAT\",\n" + + " \"chineseName\": \"链接多个文本\",\n" + + " \"description\": \"可用于连接多个任意类型的文本、日期、数字变量或常量。最后一个字符可使用'#分隔符#'标记为分隔符\",\n" + + " \"example\": \"CONCAT({总价}/10000, '万元')\",\n" + + " \"result\": \"100万元\",\n" + + " \"paramDescs\": [\n" + + " \"*文本1*(必选)\",\n" + + " \"*文本2*(可选)\",\n" + + " \"......\"\n" + + " ],\n" + + " \"formatString\": \"CONCAT(文本1, 文本2, [文本3, …],[#分隔符#])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": -1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": true\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"TEXT\",\n" + + " \"chineseName\": \"将变量转为文本\",\n" + + " \"description\": \"将变量转为文本。\",\n" + + " \"example\": \"TEXT({当前数据.性别})\",\n" + + " \"result\": \"'男'\",\n" + + " \"paramDescs\": [\n" + + " \"*变量*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"TEXT(变量)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"VALUE\",\n" + + " \"chineseName\": \"将文本转为数字\",\n" + + " \"description\": \"将文本转为数字。\",\n" + + " \"example\": \"VALUE('23')\",\n" + + " \"result\": \"23\",\n" + + " \"paramDescs\": [\n" + + " \"*文本、数字、选项*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"VALUE([文本、数字、选项])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"LEN\",\n" + + " \"chineseName\": \"返回文本长度\",\n" + + " \"description\": \"返回文本的长度,中文、英文都算1个字符。\",\n" + + " \"example\": \"LEN('大家好dajiahao')\",\n" + + " \"result\": \"12\",\n" + + " \"paramDescs\": [\n" + + " \"*变量或常量*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"LEN(文本)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"SEARCH\",\n" + + " \"chineseName\": \"在文本中查找关键字\",\n" + + " \"description\": \"在指定文本中查找关键字,返回第一次出现关键字的字符位置,文本的第一个字记为1。未找到,返回0。搜索开始位置,表示从文本的第几个字符开始搜索,默认为1。\",\n" + + " \"example\": \"SEARCH('大家', '大家好大家好', 3)\",\n" + + " \"result\": \"4\",\n" + + " \"paramDescs\": [\n" + + " \"*文本关键字*(必选)\",\n" + + " \"*文本*(必选)\",\n" + + " \"*搜索开始位置*(可选)\"\n" + + " ],\n" + + " \"formatString\": \"SEARCH(关键字, 文本, [搜索开始位置])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 3,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": false,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"REPLACE\",\n" + + " \"chineseName\": \"替换文本中的字\",\n" + + " \"description\": \"在原文本中,从替换位置开始,往后数指定的替换字符数,将这段文本替换为新文本。\",\n" + + " \"example\": \"REPLACE('大家好大家好', 2, 3, 'dajia')\",\n" + + " \"result\": \"'大dajia家好'\",\n" + + " \"paramDescs\": [\n" + + " \"*文本*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"REPLACE(原文本, 替换开始位置, 替换字符数, 新文本)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 4,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"REPT\",\n" + + " \"chineseName\": \"将文本重复指定次数\",\n" + + " \"description\": \"将文本重复指定次数。\",\n" + + " \"example\": \"REPT('大家', 2)\",\n" + + " \"result\": \"'大家大家'\",\n" + + " \"paramDescs\": [\n" + + " \"*文本*(必选)\",\n" + + " \"*重复次数*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"REPT(文本, 重复次数)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"PAD\",\n" + + " \"chineseName\": \"将文本填充至指定长度\",\n" + + " \"description\": \"将原文本填充到指定长度,如果文本长度大于设置的长度,则不做任何操作。填充位置可用参数:'LEFT'、'RIGHT'。\",\n" + + " \"example\": \"PAD('你好', 4, '你', 'LEFT')\",\n" + + " \"result\": \"'你你你好'\",\n" + + " \"paramDescs\": [\n" + + " \"*原文本*(必选)\",\n" + + " \"*长度*(必选)\",\n" + + " \"*填充用的文本*(必选)\",\n" + + " \"*填充位置*(可选)\"\n" + + " ],\n" + + " \"formatString\": \"PAD(原文本, 长度, 填充用的文本, [填充位置])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 4,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"constType\": [\n" + + " \"RIGHT\",\n" + + " \"LEFT\"\n" + + " ],\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"TRIM\",\n" + + " \"chineseName\": \"清除前后空格\",\n" + + " \"description\": \"删除文本首尾的空格。\",\n" + + " \"example\": \"TRIM(' 大家好 ')\",\n" + + " \"result\": \"'大家好'\",\n" + + " \"paramDescs\": [\n" + + " \"*文本*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"TRIM(文本)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"LEFT\",\n" + + " \"chineseName\": \"返回文本左侧开始的文字\",\n" + + " \"description\": \"从文本左侧开始,返回指定字符数的文字。\",\n" + + " \"example\": \"LEFT('大家好', 2)\",\n" + + " \"result\": \"'大家'\",\n" + + " \"paramDescs\": [\n" + + " \"*文本*(必选)\",\n" + + " \"*截取字符数*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"LEFT(文本, 截取字符数)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"RIGHT\",\n" + + " \"chineseName\": \"返回文本右侧开始的文字\",\n" + + " \"description\": \"从文本右侧开始,返回指定字符数的文字。\",\n" + + " \"example\": \"RIGHT('大家好', 2)\",\n" + + " \"result\": \"'家好'\",\n" + + " \"paramDescs\": [\n" + + " \"*文本*(必选)\",\n" + + " \"*截取字符数*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"RIGHT(文本, 截取字符数)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"MID\",\n" + + " \"chineseName\": \"返回文本指定位置开始的文字\",\n" + + " \"description\": \"从文本指定位置之后开始,返回指定字符数的文字。\",\n" + + " \"example\": \"MID('大家好', 2, 1)\",\n" + + " \"result\": \"'家'\",\n" + + " \"paramDescs\": [\n" + + " \"*文本*(必选)\",\n" + + " \"*指定位置*(必选)\",\n" + + " \"*截取字符数*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"MID(文本, 指定位置, 截取字符数)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 3,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"SCORE\",\n" + + " \"chineseName\": \"获取选项型控件分数\",\n" + + " \"description\": \"获取选项型控件(单选框、复选框、下拉菜单)分数。\",\n" + + " \"example\": \"SCORE({当前数据.单选框})\",\n" + + " \"result\": \"选项分数(注:未设置选项分数时,结果为0)\",\n" + + " \"paramDescs\": [\n" + + " \"*选项*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"SCORE({选项})\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"option\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"IDCARD\",\n" + + " \"chineseName\": \"身份证函数\",\n" + + " \"description\": \"从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。\",\n" + + " \"example\": \"IDCARD( ‘43070319980706334X’ , ‘BD’ )\",\n" + + " \"result\": \"'1998-07-06'\",\n" + + " \"paramDescs\": [\n" + + " \"*身份证号码*(必选)\",\n" + + " \"*查找类型*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"IDCARD({身份证号码}, {查找类型})\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"constType\": [\n" + + " \"BD\",\n" + + " \"NA\",\n" + + " \"AGE\",\n" + + " \"GENDER\"\n" + + " ],\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"ISSTRING\",\n" + + " \"chineseName\": \"是否是字符串\",\n" + + " \"description\": \"判断是否是字符。\",\n" + + " \"example\": \"ISSTRING('泛微123456')\",\n" + + " \"result\": \"true\",\n" + + " \"paramDescs\": [\n" + + " \"*变量或常量*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"ISSTRING({任意控件})\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"boolean\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"dataType\": \"char\",\n" + + " \"name\": \"字符函数\",\n" + + " \"action\": \"DataSource\",\n" + + " \"type\": \"functions\"\n" + + " },\n" + + " {\n" + + " \"children\": [\n" + + " {\n" + + " \"name\": \"TODAY\",\n" + + " \"chineseName\": \"当前日期\",\n" + + " \"description\": \"返回当天日期。\",\n" + + " \"example\": \"TODAY()\",\n" + + " \"result\": \"'2020-01-01'\",\n" + + " \"formatString\": \"TODAY()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"date\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"NOW\",\n" + + " \"chineseName\": \"当前日期时间\",\n" + + " \"description\": \"返回当天日期+时间。\",\n" + + " \"example\": \"NOW()\",\n" + + " \"result\": \"'2016-12-24 12:05:38'\",\n" + + " \"formatString\": \"NOW()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"date\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"DATEADD\",\n" + + " \"chineseName\": \"对日期加减年、月、日\",\n" + + " \"description\": \"对日期加减按照单位加减。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\n" + + " \"example\": \"DATEADD('2016-12-21', 3)
DATEADD('2016-12-24 20:00:00', 3, 'H')\",\n" + + " \"result\": \"'2016-12-24'
'2016-12-24 23:00:00'\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\",\n" + + " \"*数值*(必选)\",\n" + + " \"*单位*(可选)\"\n" + + " ],\n" + + " \"formatString\": \"DATEADD(日期,数值 , [单位])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"date\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 3,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"constType\": [\n" + + " \"Y\",\n" + + " \"M\",\n" + + " \"D\",\n" + + " \"H\",\n" + + " \"I\",\n" + + " \"S\"\n" + + " ],\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"DATEDIFF\",\n" + + " \"chineseName\": \"返回两个日期的差值\",\n" + + " \"description\": \"根据指定的单位,返回日期2减去日期1的差值。当日期2小于日期1时,差值为负值。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\n" + + " \"example\": \"DATEDIF('2016-12-21', '2016-12-24')
DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H')\",\n" + + " \"result\": \"3
24\",\n" + + " \"paramDescs\": [\n" + + " \"*日期1*(必选)\",\n" + + " \"*日期2*(必选)\",\n" + + " \"*单位*(可选)\"\n" + + " ],\n" + + " \"formatString\": \"DATEDIFF(日期1, 日期2, [单位])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 3,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"constType\": [\n" + + " \"Y\",\n" + + " \"M\",\n" + + " \"D\",\n" + + " \"H\",\n" + + " \"I\",\n" + + " \"S\"\n" + + " ],\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"DATEFORMAT\",\n" + + " \"chineseName\": \"返回指定格式的日期\",\n" + + " \"description\": \"将日期转为指定格式返回。
yyyy 将年份显示为1900-9999
yy 将年份显示为00-99
mm 将月份显示为 01–12
dd 将日期显示为 01–31\",\n" + + " \"example\": \"DATEFORMAT('2016-12-24', 'YY-MM-DD')\",\n" + + " \"result\": \"2016-12-24\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\",\n" + + " \"*日期格式*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"DATEFORMAT(日期, 可选格式)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"date\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"YEAR\",\n" + + " \"chineseName\": \"返回日期中的年\",\n" + + " \"description\": \"返回指定日期中的年。\",\n" + + " \"example\": \"YEAR('2016-12-24')\",\n" + + " \"result\": \"2016\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"YEAR(日期)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"MONTH\",\n" + + " \"chineseName\": \"返回日期中的月\",\n" + + " \"description\": \"返回指定日期中的月。\",\n" + + " \"example\": \"MONTH('2016-12-24')\",\n" + + " \"result\": \"12\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"MONTH(日期)\",\n" + + " \"paramArray\": [\n" + + " \"String\"\n" + + " ],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"DAY\",\n" + + " \"chineseName\": \"返回日期中的日\",\n" + + " \"description\": \"返回指定日期中的日。\",\n" + + " \"example\": \"DAY('2016-12-24')\",\n" + + " \"result\": \"24\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"DAY(日期)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"HOUR\",\n" + + " \"chineseName\": \"返回日期中的小时\",\n" + + " \"description\": \"返回指定日期中的小时。\",\n" + + " \"example\": \"HOUR('2016-12-24 20:30:56')\",\n" + + " \"result\": \"20\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"HOUR(日期)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"MINUTE\",\n" + + " \"chineseName\": \"返回日期中的分钟\",\n" + + " \"description\": \"返回指定日期中的分钟。\",\n" + + " \"example\": \"MINUTE('2016-12-24 20:30:56')\",\n" + + " \"result\": \"30\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"MINUTE(日期)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"SECOND\",\n" + + " \"chineseName\": \"返回日期中的秒\",\n" + + " \"description\": \"返回指定日期中的秒钟。\",\n" + + " \"example\": \"SECOND('2016-12-24 20:30:56')\",\n" + + " \"result\": \"56\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"SECOND(日期)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"WEEKNUM\",\n" + + " \"chineseName\": \"返回日期为第几周\",\n" + + " \"description\": \"返回指定日期为第几周,从每年第1天开始算第1周。\",\n" + + " \"example\": \"WEEKNUM('2016-12-24')\",\n" + + " \"result\": \"52\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"WEEKNUM(日期)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"WEEKDAY\",\n" + + " \"chineseName\": \"返回日期为星期几\",\n" + + " \"description\": \"返回指定日期为星期几。返回值为0~6,代表周日~周六。\",\n" + + " \"example\": \"WEEKDAY('2016-12-24')\",\n" + + " \"result\": \"6\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"WEEKDAY(日期)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"EOMONTH\",\n" + + " \"chineseName\": \"返回某月最后一天日期\",\n" + + " \"description\": \"将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。\",\n" + + " \"example\": \"EOMONTH('2021-11-07', -2)\",\n" + + " \"result\": \"2021-09-30\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\",\n" + + " \"*数值*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"EOMONTH(日期,指定日期之前或之后的月数)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"string\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"CURRYEAR\",\n" + + " \"chineseName\": \"返回当前年份\",\n" + + " \"description\": \"取当前日期的年份。\",\n" + + " \"example\": \"假设当前时间为:2022年2月17日 11:20:30 ,CURRYEAR()\",\n" + + " \"result\": \"2022\",\n" + + " \"formatString\": \"CURRYEAR()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"CURRMONTH\",\n" + + " \"chineseName\": \"返回当前月份\",\n" + + " \"description\": \"取当前日期的月份。\",\n" + + " \"example\": \"假设当前时间为:2022年2月17日 11:20:30 ,CURRMONTH()\",\n" + + " \"result\": \"2\",\n" + + " \"formatString\": \"CURRMONTH()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"CURRDAY\",\n" + + " \"chineseName\": \"返回当前第几日(当月)\",\n" + + " \"description\": \"取当前日期的天。\",\n" + + " \"example\": \"假设当前时间为:2022年2月17日 11:20:30 ,CURRDAY()\",\n" + + " \"result\": \"17\",\n" + + " \"formatString\": \"CURRDAY()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"CURRWEEK\",\n" + + " \"chineseName\": \"返回当前是周几\",\n" + + " \"description\": \"取当前日期是周几。\",\n" + + " \"example\": \"假设当前时间为:2022年2月17日 11:20:30 ,CURRWEEK()\",\n" + + " \"result\": \"4\",\n" + + " \"formatString\": \"CURRWEEK()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"CURRHOUR\",\n" + + " \"chineseName\": \"返回当前小时\",\n" + + " \"description\": \"取当前日期的小时。\",\n" + + " \"example\": \"假设当前时间为:2022年2月17日 11:20:30 ,CURRHOUR()\",\n" + + " \"result\": \"11\",\n" + + " \"formatString\": \"CURRHOUR()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"CURRMINUTE\",\n" + + " \"chineseName\": \"返回当前分\",\n" + + " \"description\": \"取当前日期的分钟。\",\n" + + " \"example\": \"假设当前时间为:2022年2月17日 11:20:30 ,CURRMINUTE()\",\n" + + " \"result\": \"20\",\n" + + " \"formatString\": \"CURRMINUTE()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"CURRSECOND\",\n" + + " \"chineseName\": \"返回当前秒\",\n" + + " \"description\": \"取当前日期的秒钟。\",\n" + + " \"example\": \"假设当前时间为:2022年2月17日 11:20:30 ,CURRSECOND()\",\n" + + " \"result\": \"30\",\n" + + " \"formatString\": \"CURRSECOND()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"MAXDATE\",\n" + + " \"chineseName\": \"返回一组日期中的最大值\",\n" + + " \"description\": \"取一组日期中的最大值。\",\n" + + " \"example\": \"MAXDATE('2016-12-24', '2022-12-24')\",\n" + + " \"result\": \"2022-12-24\",\n" + + " \"paramDescs\": [\n" + + " \"*日期1*(必选)\",\n" + + " \"*日期2*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"MAXDATE(日期1,日期2,……)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"date\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": -1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": true\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"MINDATE\",\n" + + " \"chineseName\": \"返回一组日期中的最小值\",\n" + + " \"description\": \"取一组日期中的最小值。\",\n" + + " \"example\": \"MINDATE('2016-12-24', '2022-12-24')\",\n" + + " \"result\": \"2016-12-24\",\n" + + " \"paramDescs\": [\n" + + " \"*日期1*(必选)\",\n" + + " \"*日期2*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"MINDATE(日期1,日期2,……)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"date\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": -1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": true\n" + + " }\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"dataType\": \"date\",\n" + + " \"name\": \"日期函数\",\n" + + " \"action\": \"DataSource\",\n" + + " \"type\": \"functions\"\n" + + " },\n" + + " {\n" + + " \"children\": [\n" + + " {\n" + + " \"name\": \"IF\",\n" + + " \"chineseName\": \"如果条件为真,则...否则...\",\n" + + " \"description\": \"如果条件为真,则执行表达式1,为假则执行表达式2。条件中不可嵌套使用IF函数。\",\n" + + " \"example\": \"IF({员工表.年龄} > 60, '退休', '在职')
IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')\",\n" + + " \"result\": \"'退休'
'在职'\",\n" + + " \"paramDescs\": [\n" + + " \"*条件*(必选)\",\n" + + " \"*表达式1*(必选)\",\n" + + " \"*表达式2*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"IF(条件, 表达式1, 表达式2)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"all\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 3,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"boolean\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"AND\",\n" + + " \"chineseName\": \"且\",\n" + + " \"description\": \"所有条件均为真,则返回真,否则返回假。逻辑操作AND的函数模式。\",\n" + + " \"example\": \"AND(2 = 2, 2 < 2)\",\n" + + " \"result\": \"false\",\n" + + " \"paramDescs\": [\n" + + " \"*条件1*(必选)\",\n" + + " \"*条件2*(可选,可输入多个参数)\"\n" + + " ],\n" + + " \"formatString\": \"AND(条件1, 条件2, [条件3, …])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"boolean\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": -1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"boolean\",\n" + + " \"must\": true,\n" + + " \"infinite\": true\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"OR\",\n" + + " \"chineseName\": \"或\",\n" + + " \"description\": \"任意一个条件为真,则返回真,否则返回假。逻辑操作OR的函数模式。\",\n" + + " \"example\": \"OR(2 = 2, 2 > 3)\",\n" + + " \"result\": \"true\",\n" + + " \"paramDescs\": [\n" + + " \"*条件1*(必选)\",\n" + + " \"*条件2*(可选,可输入多个参数)\"\n" + + " ],\n" + + " \"formatString\": \"OR(条件1, 条件2, [条件3, …])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"boolean\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": -1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"boolean\",\n" + + " \"must\": true,\n" + + " \"infinite\": true\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"NOT\",\n" + + " \"chineseName\": \"反转真假结果\",\n" + + " \"description\": \"对逻辑结果取反。\",\n" + + " \"example\": \"NOT(2 > 3)\",\n" + + " \"result\": \"true\",\n" + + " \"paramDescs\": [\n" + + " \"*逻辑结果*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"NOT(逻辑结果)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"boolean\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"boolean\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"IN\",\n" + + " \"chineseName\": \"变量是否包含在一组结果中\",\n" + + " \"description\": \"任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。\",\n" + + " \"example\": \"IN(2, [2, 3, 4])\",\n" + + " \"result\": \"true\",\n" + + " \"paramDescs\": [\n" + + " \"*变量*(必选)\",\n" + + " \"*变量数组*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"IN(变量, [变量1, 变量2, …])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [\n" + + " \"{}\",\n" + + " \"[]\"\n" + + " ],\n" + + " \"returnType\": \"boolean\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"array\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"LIKE\",\n" + + " \"chineseName\": \"文本是否包含任意一个关键字\",\n" + + " \"description\": \"文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个,则返回真。逻辑操作LIKE的函数模式。\",\n" + + " \"example\": \"LIKE('大家好', ['大家', '好'])\",\n" + + " \"result\": \"true\",\n" + + " \"paramDescs\": [\n" + + " \"*文本*(必选)\",\n" + + " \"*文本数组*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"LIKE(文本, [文本1, 文本2, …])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [\n" + + " \"{}\",\n" + + " \"[]\"\n" + + " ],\n" + + " \"returnType\": \"boolean\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"array\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"ISEMPTY\",\n" + + " \"chineseName\": \"是否为空\",\n" + + " \"description\": \"变量为空或未填写,则返回真。\",\n" + + " \"example\": \"ISEMPTY({员工表.电话})\",\n" + + " \"result\": \"true\",\n" + + " \"paramDescs\": [\n" + + " \"*变量或常量*(可选)\"\n" + + " ],\n" + + " \"formatString\": \"ISEMPTY(变量)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"boolean\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"TRUE\",\n" + + " \"chineseName\": \"返回真\",\n" + + " \"description\": \"返回真。\",\n" + + " \"example\": \"TRUE()\",\n" + + " \"result\": \"true\",\n" + + " \"formatString\": \"TRUE()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"boolean\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"FALSE\",\n" + + " \"chineseName\": \"返回假\",\n" + + " \"description\": \"返回假。\",\n" + + " \"example\": \"FALSE()\",\n" + + " \"result\": \"false\",\n" + + " \"formatString\": \"FALSE()\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"boolean\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 0\n" + + " },\n" + + " {\n" + + " \"name\": \"IFS\",\n" + + " \"chineseName\": \"多条件\",\n" + + " \"description\": \"多个条件判断,位于单数位置的参数设置为条件,位于双数位置的参数设置为结果,最后一个参数为默认返回值,当所有条件都不满足的时候返回默认参数。\",\n" + + " \"example\": \"IFS(1>1,1,1=1,2,0)\",\n" + + " \"result\": \"2\",\n" + + " \"paramDescs\": [\n" + + " \"*条件1*(必选)\",\n" + + " \"*变量或常量*(必选)\",\n" + + " \"*条件2*(必选)\",\n" + + " \"*变量或常量*(必选)\",\n" + + " \"*变量或常量*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"IFS({条件1},{结果1},{条件2},{结果2}...{默认结果})\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"all\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": -1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"boolean\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"SWITCH\",\n" + + " \"chineseName\": \"条件选择\",\n" + + " \"description\": \"条件选择。\",\n" + + " \"example\": \"SWITCH({字段1},1,'A',2,'B','C')\",\n" + + " \"result\": \"假设字段1为2,结果:'B'\",\n" + + " \"paramDescs\": [\n" + + " \"*变量或常量*(必选)\",\n" + + " \"*变量或常量*(必选)\",\n" + + " \"*变量或常量*(必选)\",\n" + + " \"*变量或常量*(可选)\",\n" + + " \"*变量或常量*(可选)\",\n" + + " \"*变量或常量*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"SWITCH({变量},{条件1},{结果1},{条件2},{结果2}...{默认结果})\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"all\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": -1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"all\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"dataType\": \"logic\",\n" + + " \"name\": \"逻辑函数\",\n" + + " \"action\": \"DataSource\",\n" + + " \"type\": \"functions\"\n" + + " },\n" + + " {\n" + + " \"children\": [\n" + + " {\n" + + " \"name\": \"ROUNDUP\",\n" + + " \"chineseName\": \"向上舍入\",\n" + + " \"description\": \"根据设置的小数位精确度,返回对数值向上舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向上舍入到指定的小数位。如果小数位精确度等于 0,则向上舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\n" + + " \"example\": \"ROUNDUP(76.9,0)\",\n" + + " \"result\": \"77\",\n" + + " \"paramDescs\": [\n" + + " \"*数字*(必选)\",\n" + + " \"*小数位精确度*(可选)\"\n" + + " ],\n" + + " \"formatString\": \"ROUNDUP(数字, [小数位精确度])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"ROUND\",\n" + + " \"chineseName\": \"四舍五入\",\n" + + " \"description\": \"根据设置的小数位精确度,返回对数值四舍五入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,针对小数点后的数据进行四舍五入;如果小数位精确度等于 0,返回最接近数值的整数;如果小数位精确度为负整数,针对小数点前的数据进行四舍五入,被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\n" + + " \"example\": \"ROUND(123.456,2),ROUND(123.456,0),ROUND(123.456,-2)\",\n" + + " \"result\": \"依次为123.46,123,100\",\n" + + " \"paramDescs\": [\n" + + " \"*数字*(必选)\",\n" + + " \"*小数位精确度*(可选)\"\n" + + " ],\n" + + " \"formatString\": \"ROUND(数字, [小数位精确度])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"ROUNDDOWN\",\n" + + " \"chineseName\": \"向下舍入\",\n" + + " \"description\": \"根据设置的小数位精确度,返回对数值向下舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向下舍入到指定的小数位。如果小数位精确度等于 0,则向下舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\n" + + " \"example\": \"ROUNDDOWN(76.9,0)\",\n" + + " \"result\": \"76\",\n" + + " \"paramDescs\": [\n" + + " \"*数字*(必选)\",\n" + + " \"*小数位精确度*(可选)\"\n" + + " ],\n" + + " \"formatString\": \"ROUNDDOWN(数字, [小数位精确度])\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"AGGREGATION\",\n" + + " \"chineseName\": \"聚合运算\",\n" + + " \"description\": \"将一组数据进行统计计算,支持最大值(MAX)、最小值(MIN)、平均值(AVG)。\",\n" + + " \"example\": \"AGGREGATION(1 , 2,3,'AVG')\",\n" + + " \"result\": \"2\",\n" + + " \"paramDescs\": [\n" + + " \"*数字*(必选)\",\n" + + " \"*聚合运算类型*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"AGGREGATION({数字}...,{聚合运算类型})\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": -1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": true\n" + + " },\n" + + " {\n" + + " \"dataType\": \"string\",\n" + + " \"must\": true,\n" + + " \"constType\": [\n" + + " \"avg\",\n" + + " \"max\",\n" + + " \"min\"\n" + + " ],\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"MOD\",\n" + + " \"chineseName\": \"求余\",\n" + + " \"description\": \"将两个参数进行除法运算然后得出余数返回。\",\n" + + " \"example\": \"MOD( 7 , 3 )\",\n" + + " \"result\": \"1\",\n" + + " \"paramDescs\": [\n" + + " \"*数字*(必选)\",\n" + + " \"*数字*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"ROUNDDOWN({数字},{数字})\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"name\": \"TRUNC\",\n" + + " \"chineseName\": \"数字格式化\",\n" + + " \"description\": \"将小数点格式化成指定位数。\",\n" + + " \"example\": \"TRUNC( 2.123 , 2 )\",\n" + + " \"result\": \"2.12\",\n" + + " \"paramDescs\": [\n" + + " \"*数字*(必选)\",\n" + + " \"*精度*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"ROUNDDOWN({数字},{精度})\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 2,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " },\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"dataType\": \"math\",\n" + + " \"name\": \"数学函数\",\n" + + " \"action\": \"DataSource\",\n" + + " \"type\": \"functions\"\n" + + " },\n" + + " {\n" + + " \"children\": [\n" + + " {\n" + + " \"name\": \"GETMONEY\",\n" + + " \"chineseName\": \"获取所给定数字的金额大写\",\n" + + " \"description\": \"将金额转换成中文金额大写。\",\n" + + " \"example\": \"GETMONEY({1234})\",\n" + + " \"result\": \"壹仟贰佰叁拾肆元整\",\n" + + " \"paramDescs\": [\n" + + " \"*数字*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"GETMONEY({数字})\",\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"current_data\",\n" + + " \"paramCount\": 1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"number\",\n" + + " \"must\": true,\n" + + " \"infinite\": false\n" + + " }\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"dataType\": \"finance\",\n" + + " \"name\": \"财务函数\",\n" + + " \"action\": \"DataSource\",\n" + + " \"type\": \"functions\"\n" + + " }\n" + + " ]\n" + + "}"; +} diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 435ad5ac2..8fab42cfd 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -87,6 +87,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { WeaTable table = new WeaTable(); table.setPageUID(UUID.randomUUID().toString()); + table.setPageID("a4f85287-e3f9-4275-adn9-7d06e54y6700"); table.setColumns(weaTableColumns); WeaResultMsg result = new WeaResultMsg(false); diff --git a/src/com/engine/salary/web/SalaryFormulaController.java b/src/com/engine/salary/web/SalaryFormulaController.java index 38cfed67d..1addfc397 100644 --- a/src/com/engine/salary/web/SalaryFormulaController.java +++ b/src/com/engine/salary/web/SalaryFormulaController.java @@ -7,10 +7,9 @@ import com.engine.salary.entity.salaryformula.param.SalaryFormulaMockParam; import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; +import com.engine.salary.formlua.constant.FormluaConstant; import com.engine.salary.util.ResponseResult; import com.engine.salary.wrapper.SalaryFormulaWrapper; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; import weaver.hrm.HrmUserVarify; @@ -21,7 +20,6 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; -import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -99,14 +97,7 @@ public class SalaryFormulaController { @Path("/des") @Produces(MediaType.APPLICATION_JSON) public String des(@Context HttpServletRequest request, @Context HttpServletResponse response) { - ObjectMapper mapper = new ObjectMapper(); - try { - JsonNode jsonNode = mapper.readTree(this.getClass().getClassLoader().getResourceAsStream("com/engine/salary/constant/des.json")); - return jsonNode.toString(); - } catch (IOException e) { - log.error("获取公式函数异常",e); - } - return "{\"data\":[{\"children\":[{\"name\":\"CONCAT\",\"chineseName\":\"链接多个文本\",\"description\":\"可用于连接多个任意类型的文本、日期、数字变量或常量。最后一个字符可使用'#分隔符#'标记为分隔符\",\"example\":\"CONCAT({总价}/10000, '万元')\",\"result\":\"100万元\",\"paramDescs\":[\"*文本1*(必选)\",\"*文本2*(可选)\",\"......\"],\"formatString\":\"CONCAT(文本1, 文本2, [文本3, …],[#分隔符#])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":true}]},{\"name\":\"TEXT\",\"chineseName\":\"将变量转为文本\",\"description\":\"将变量转为文本。\",\"example\":\"TEXT({当前数据.性别})\",\"result\":\"'男'\",\"paramDescs\":[\"*变量*(必选)\"],\"formatString\":\"TEXT(变量)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"VALUE\",\"chineseName\":\"将文本转为数字\",\"description\":\"将文本转为数字。\",\"example\":\"VALUE('23')\",\"result\":\"23\",\"paramDescs\":[\"*文本、数字、选项*(必选)\"],\"formatString\":\"VALUE([文本、数字、选项])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"LEN\",\"chineseName\":\"返回文本长度\",\"description\":\"返回文本的长度,中文、英文都算1个字符。\",\"example\":\"LEN('大家好dajiahao')\",\"result\":\"12\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"LEN(文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"SEARCH\",\"chineseName\":\"在文本中查找关键字\",\"description\":\"在指定文本中查找关键字,返回第一次出现关键字的字符位置,文本的第一个字记为1。未找到,返回0。搜索开始位置,表示从文本的第几个字符开始搜索,默认为1。\",\"example\":\"SEARCH('大家', '大家好大家好', 3)\",\"result\":\"4\",\"paramDescs\":[\"*文本关键字*(必选)\",\"*文本*(必选)\",\"*搜索开始位置*(可选)\"],\"formatString\":\"SEARCH(关键字, 文本, [搜索开始位置])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":false,\"infinite\":false}]},{\"name\":\"REPLACE\",\"chineseName\":\"替换文本中的字\",\"description\":\"在原文本中,从替换位置开始,往后数指定的替换字符数,将这段文本替换为新文本。\",\"example\":\"REPLACE('大家好大家好', 2, 3, 'dajia')\",\"result\":\"'大dajia家好'\",\"paramDescs\":[\"*文本*(必选)\"],\"formatString\":\"REPLACE(原文本, 替换开始位置, 替换字符数, 新文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"REPT\",\"chineseName\":\"将文本重复指定次数\",\"description\":\"将文本重复指定次数。\",\"example\":\"REPT('大家', 2)\",\"result\":\"'大家大家'\",\"paramDescs\":[\"*文本*(必选)\",\"*重复次数*(必选)\"],\"formatString\":\"REPT(文本, 重复次数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"PAD\",\"chineseName\":\"将文本填充至指定长度\",\"description\":\"将原文本填充到指定长度,如果文本长度大于设置的长度,则不做任何操作。填充位置可用参数:'LEFT'、'RIGHT'。\",\"example\":\"PAD('你好', 4, '你', 'LEFT')\",\"result\":\"'你你你好'\",\"paramDescs\":[\"*原文本*(必选)\",\"*长度*(必选)\",\"*填充用的文本*(必选)\",\"*填充位置*(可选)\"],\"formatString\":\"PAD(原文本, 长度, 填充用的文本, [填充位置])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"RIGHT\",\"LEFT\"],\"infinite\":false}]},{\"name\":\"TRIM\",\"chineseName\":\"清除前后空格\",\"description\":\"删除文本首尾的空格。\",\"example\":\"TRIM(' 大家好 ')\",\"result\":\"'大家好'\",\"paramDescs\":[\"*文本*(必选)\"],\"formatString\":\"TRIM(文本)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LEFT\",\"chineseName\":\"返回文本左侧开始的文字\",\"description\":\"从文本左侧开始,返回指定字符数的文字。\",\"example\":\"LEFT('大家好', 2)\",\"result\":\"'大家'\",\"paramDescs\":[\"*文本*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"LEFT(文本, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"RIGHT\",\"chineseName\":\"返回文本右侧开始的文字\",\"description\":\"从文本右侧开始,返回指定字符数的文字。\",\"example\":\"RIGHT('大家好', 2)\",\"result\":\"'家好'\",\"paramDescs\":[\"*文本*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"RIGHT(文本, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"MID\",\"chineseName\":\"返回文本指定位置开始的文字\",\"description\":\"从文本指定位置之后开始,返回指定字符数的文字。\",\"example\":\"MID('大家好', 2, 1)\",\"result\":\"'家'\",\"paramDescs\":[\"*文本*(必选)\",\"*指定位置*(必选)\",\"*截取字符数*(必选)\"],\"formatString\":\"MID(文本, 指定位置, 截取字符数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"SCORE\",\"chineseName\":\"获取选项型控件分数\",\"description\":\"获取选项型控件(单选框、复选框、下拉菜单)分数。\",\"example\":\"SCORE({当前数据.单选框})\",\"result\":\"选项分数(注:未设置选项分数时,结果为0)\",\"paramDescs\":[\"*选项*(必选)\"],\"formatString\":\"SCORE({选项})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false}]},{\"name\":\"IDCARD\",\"chineseName\":\"身份证函数\",\"description\":\"从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。\",\"example\":\"IDCARD( ‘43070319980706334X’ , ‘BD’ )\",\"result\":\"'1998-07-06'\",\"paramDescs\":[\"*身份证号码*(必选)\",\"*查找类型*(必选)\"],\"formatString\":\"IDCARD({身份证号码}, {查找类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"BD\",\"NA\",\"AGE\",\"GENDER\"],\"infinite\":false}]},{\"name\":\"ISSTRING\",\"chineseName\":\"是否是字符串\",\"description\":\"判断是否是字符。\",\"example\":\"ISSTRING('泛微123456')\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"ISSTRING({任意控件})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISJSON\",\"chineseName\":\"JSON字符格式化\",\"description\":\"判断是不是JSON字符串,参数可以是数组,也可以是字符串,参数为数组时数组中必须只包含一个字符串。\",\"example\":\"假设文本控件={a:123},ISJSON({文本控件})\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(必选)\"],\"formatString\":\"ISJSON({变量})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETJSONVALUE\",\"chineseName\":\"JSON字符取值\",\"description\":\"获取JSON值。第一个参数为json,可以是数组也可以是对象;第二个参数为json对象的键值,返回键值对应的值,json为数组时返回的多个值以逗号分隔\",\"example\":\"假设文本控件={a:123},GetJSONValue('{文本控件}','a')\",\"result\":\"123\",\"paramDescs\":[\"*变量或常量*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"GETJSONVALUE({变量1},变量2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISINT\",\"chineseName\":\"字符内容是否是整数\",\"description\":\"判断字符内容是否是整数\",\"example\":\"ISINT( 2.123 )\",\"result\":\"false\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"ISINT({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISNUMBER\",\"chineseName\":\"字符内容是否是数字\",\"description\":\"判断字符内容是否是数字。\",\"example\":\"ISNUMBER('2.123')\",\"result\":\"true\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"ISNUMBER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"SPLIT\",\"chineseName\":\"字符分割\",\"description\":\"字符分割函数,将字符以指定字符为依据分割字符为一组字符\",\"example\":\"假设文本控件=ABC#DEF,SPLIT('{文本控件}','#')\",\"result\":\"[ABC,DEF]\",\"paramDescs\":[\"*字符*(必选)\",\"*分割符*(必选)\"],\"formatString\":\"SPLIT({字符},{字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LOWER\",\"chineseName\":\"字符转小写\",\"description\":\"将字符中的字母转为小写。\",\"example\":\"LOWER('ABC')\",\"result\":\"abc\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"LOWER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"UPPER\",\"chineseName\":\"字符转大写\",\"description\":\"将字符中的字母转为大写。\",\"example\":\"UPPER('abc')\",\"result\":\"ABC\",\"paramDescs\":[\"*字符*(必选)\"],\"formatString\":\"UPPER({字符})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"TEXTBEFORE\",\"chineseName\":\"截取N个分割符之前的字符\",\"description\":\"截取N个分割符之前的字符\",\"example\":\"TEXTBEFORE('abc-12','-',1)\",\"result\":\"abc\",\"paramDescs\":[\"*字符*(必选)\",\"*字符*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"TEXTBEFORE({目标文本},{分隔符},{索引下标})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"TEXTAFTER\",\"chineseName\":\"截取N个分隔符之后的字符\",\"description\":\"截取N个分隔符之后的字符\",\"example\":\"TEXTAFTER('abc-12','-',1)\",\"result\":\"12\",\"paramDescs\":[\"*字符*(必选)\",\"*字符*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"TEXTAFTER({目标文本},{分隔符},{索引下标})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"String\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"char\",\"name\":\"字符函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"COUNT\",\"chineseName\":\"计数\",\"description\":\"返回指定表格中满足条件的数据条数。\",\"example\":\"COUNT({员工表})\",\"result\":\"1\",\"paramDescs\":[\"*表*(必选)\"],\"formatString\":\"COUNT(表)\",\"paramArray\":[\"Form\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"SUM\",\"chineseName\":\"求和\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的总和。统计条件中不可嵌套使用统计函数。\",\"example\":\"SUM({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"SUM(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"AVG\",\"chineseName\":\"平均值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的平均值。统计条件中不可嵌套使用统计函数。\",\"example\":\"AVG({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"AVG(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"MIN\",\"chineseName\":\"最小值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的最小值。统计条件中不可嵌套使用统计函数。\",\"example\":\"MIN({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"MIN(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3},{\"name\":\"MAX\",\"chineseName\":\"最大值\",\"description\":\"返回指定表格中满足条件的数据,其指定数字字段值的最大值。统计条件中不可嵌套使用统计函数。\",\"example\":\"MAX({员工表.工资})\",\"result\":\"10000\",\"paramDescs\":[\"*表或字段*(必选)\"],\"formatString\":\"MAX(数字)\",\"paramArray\":[\"Number\",\"Number\",\"Boolean\"],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"all\",\"paramCount\":3}],\"dataType\":\"agg\",\"name\":\"聚合函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"TODAY\",\"chineseName\":\"当前日期\",\"description\":\"返回当天日期。\",\"example\":\"TODAY()\",\"result\":\"'2020-01-01'\",\"formatString\":\"TODAY()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"NOW\",\"chineseName\":\"当前日期时间\",\"description\":\"返回当天日期+时间。\",\"example\":\"NOW()\",\"result\":\"'2016-12-24 12:05:38'\",\"formatString\":\"NOW()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"DATEADD\",\"chineseName\":\"对日期加减年、月、日\",\"description\":\"对日期加减按照单位加减。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\"example\":\"DATEADD('2016-12-21', 3)
DATEADD('2016-12-24 20:00:00', 3, 'H')\",\"result\":\"'2016-12-24'
'2016-12-24 23:00:00'\",\"paramDescs\":[\"*日期*(必选)\",\"*数值*(必选)\",\"*单位*(可选)\"],\"formatString\":\"DATEADD(日期,数值 , [单位])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"Y\",\"M\",\"D\",\"H\",\"I\",\"S\"],\"infinite\":false}]},{\"name\":\"DATEDIFF\",\"chineseName\":\"返回两个日期的差值\",\"description\":\"根据指定的单位,返回日期2减去日期1的差值。当日期2小于日期1时,差值为负值。单位默认为日,可选单位:年Y、月M、日D、时H、分I、秒S。\",\"example\":\"DATEDIF('2016-12-21', '2016-12-24')
DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H')\",\"result\":\"3
24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*单位*(可选)\"],\"formatString\":\"DATEDIFF(日期1, 日期2, [单位])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"Y\",\"M\",\"D\",\"H\",\"I\",\"S\"],\"infinite\":false}]},{\"name\":\"DATEFORMAT\",\"chineseName\":\"返回指定格式的日期\",\"description\":\"将日期转为指定格式返回。
yyyy 将年份显示为1900-9999
yy 将年份显示为00-99
mm 将月份显示为 01–12
dd 将日期显示为 01–31\",\"example\":\"DATEFORMAT('2016-12-24', 'YY-MM-DD')\",\"result\":\"2016-12-24\",\"paramDescs\":[\"*日期*(必选)\",\"*日期格式*(必选)\"],\"formatString\":\"DATEFORMAT(日期, 可选格式)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"YEAR\",\"chineseName\":\"返回日期中的年\",\"description\":\"返回指定日期中的年。\",\"example\":\"YEAR('2016-12-24')\",\"result\":\"2016\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"YEAR(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"MONTH\",\"chineseName\":\"返回日期中的月\",\"description\":\"返回指定日期中的月。\",\"example\":\"MONTH('2016-12-24')\",\"result\":\"12\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"MONTH(日期)\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"DAY\",\"chineseName\":\"返回日期中的日\",\"description\":\"返回指定日期中的日。\",\"example\":\"DAY('2016-12-24')\",\"result\":\"24\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"DAY(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"HOUR\",\"chineseName\":\"返回日期中的小时\",\"description\":\"返回指定日期中的小时。\",\"example\":\"HOUR('2016-12-24 20:30:56')\",\"result\":\"20\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"HOUR(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"MINUTE\",\"chineseName\":\"返回日期中的分钟\",\"description\":\"返回指定日期中的分钟。\",\"example\":\"MINUTE('2016-12-24 20:30:56')\",\"result\":\"30\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"MINUTE(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"SECOND\",\"chineseName\":\"返回日期中的秒\",\"description\":\"返回指定日期中的秒钟。\",\"example\":\"SECOND('2016-12-24 20:30:56')\",\"result\":\"56\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"SECOND(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"WEEKNUM\",\"chineseName\":\"返回日期为第几周\",\"description\":\"返回指定日期为第几周,从每年第1天开始算第1周。\",\"example\":\"WEEKNUM('2016-12-24')\",\"result\":\"52\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"WEEKNUM(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"WEEKDAY\",\"chineseName\":\"返回日期为星期几\",\"description\":\"返回指定日期为星期几。返回值为0~6,代表周日~周六。\",\"example\":\"WEEKDAY('2016-12-24')\",\"result\":\"6\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"WEEKDAY(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"NETWORKDAYSPI\",\"chineseName\":\"返回所选时间段内包含的工作日天数\",\"description\":\"查询类型为attend时,即按考勤制度查询,将截止当前日期之前(支持选到当前日期,最大支持跨度为365天)的所选时间段内包含的工作日天数返回。
注意:此函数只能选择过去的时间(可选到当前日期)才可使用,跨度不能超过365天。查询类型为statutory时,即按法定查询,没有限制。当日期2小于日期1时,差值为负值。单位默认为日。\",\"example\":\"想知道李四在2021-11-07和2021-11-12之间的工作日天数NETWORKDAYSPI('2021-11-07', '2021-11-12','李四')\",\"result\":\"5\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*人员*(必选)\",\"*类型*(可选,attend为考勤制度,statutory为法定,默认attend)\"],\"formatString\":\"NETWORKDAYSPI(日期1, 日期2, 成员, [类型])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":4,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"employee\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":false,\"infinite\":false}]},{\"name\":\"EOMONTH\",\"chineseName\":\"返回某月最后一天日期\",\"description\":\"将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。\",\"example\":\"EOMONTH('2021-11-07', -2)\",\"result\":\"2021-09-30\",\"paramDescs\":[\"*日期*(必选)\",\"*数值*(必选)\"],\"formatString\":\"EOMONTH(日期,指定日期之前或之后的月数)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"CURRYEAR\",\"chineseName\":\"返回当前年份\",\"description\":\"取当前日期的年份。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRYEAR()\",\"result\":\"2022\",\"formatString\":\"CURRYEAR()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRMONTH\",\"chineseName\":\"返回当前月份\",\"description\":\"取当前日期的月份。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRMONTH()\",\"result\":\"2\",\"formatString\":\"CURRMONTH()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRDAY\",\"chineseName\":\"返回当前第几日(当月)\",\"description\":\"取当前日期的天。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRDAY()\",\"result\":\"17\",\"formatString\":\"CURRDAY()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRWEEK\",\"chineseName\":\"返回当前是周几\",\"description\":\"取当前日期是周几。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRWEEK()\",\"result\":\"4\",\"formatString\":\"CURRWEEK()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRHOUR\",\"chineseName\":\"返回当前小时\",\"description\":\"取当前日期的小时。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRHOUR()\",\"result\":\"11\",\"formatString\":\"CURRHOUR()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRMINUTE\",\"chineseName\":\"返回当前分\",\"description\":\"取当前日期的分钟。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRMINUTE()\",\"result\":\"20\",\"formatString\":\"CURRMINUTE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"CURRSECOND\",\"chineseName\":\"返回当前秒\",\"description\":\"取当前日期的秒钟。\",\"example\":\"假设当前时间为:2022年2月17日 11:20:30 ,CURRSECOND()\",\"result\":\"30\",\"formatString\":\"CURRSECOND()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"MAXDATE\",\"chineseName\":\"返回一组日期中的最大值\",\"description\":\"取一组日期中的最大值。\",\"example\":\"MAXDATE('2016-12-24', '2022-12-24')\",\"result\":\"2022-12-24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\"],\"formatString\":\"MAXDATE(日期1,日期2,……)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":true}]},{\"name\":\"MINDATE\",\"chineseName\":\"返回一组日期中的最小值\",\"description\":\"取一组日期中的最小值。\",\"example\":\"MINDATE('2016-12-24', '2022-12-24')\",\"result\":\"2016-12-24\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\"],\"formatString\":\"MINDATE(日期1,日期2,……)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":true}]},{\"name\":\"COMPAREDATE\",\"chineseName\":\"返回两个日期指定时间的差值\",\"description\":\"日期比较,返回两个日期指定时间域的差值。可比较的时间域包括'Y'-比较年;'M'-比较月;'D'-比较日;'H'-比较小时;'I'-比较分钟;'S'-比较秒。\",\"example\":\"假设 日期1=2022-04-03、日期2=2022-04-04,COMPAREDATE({日期1},{日期2},'D')\",\"result\":\"1\",\"paramDescs\":[\"*日期1*(必选)\",\"*日期2*(必选)\",\"*比较类型*(可选)\"],\"formatString\":\"COMPAREDATE(日期1,日期2,[比较类型])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"date\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"TIMESTAMPTODATE\",\"chineseName\":\"返回时间戳转换后的日期\",\"description\":\"将时间戳按指定格式转换成日期。\",\"example\":\"TIMESTAMPTODATE('1671172579', 'yyyy-MM-dd HH:mm:ss')\",\"result\":\"2022-12-16 14:36:19\",\"paramDescs\":[\"*时间戳*(必选)\",\"*日期格式*(可选,默认yyyy-MM-dd HH:mm:ss)\"],\"formatString\":\"TIMESTAMPTODATE(时间戳,日期格式)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":false,\"infinite\":false}]},{\"name\":\"DATETOTIMESTAMP\",\"chineseName\":\"返回日期转换后的时间戳\",\"description\":\"将日期转换成时间戳。\",\"example\":\"DATETOTIMESTAMP('2022-12-16 14:36:19'\",\"result\":\"'1671172579'\",\"paramDescs\":[\"*日期*(必选)\"],\"formatString\":\"DATETOTIMESTAMP(日期)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"date\",\"must\":true,\"infinite\":false}]},{\"name\":\"DATE\",\"chineseName\":\"拼接日期字符串\",\"description\":\"拼接日期\",\"example\":\"DATE('2022','12','16')\",\"result\":\"'2022-12-16'\",\"paramDescs\":[\"*日期字符*(必选)\"],\"formatString\":\"DATE({年},{月},{日})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"DAYS\",\"chineseName\":\"计算两个日期自建的间隔天数\",\"description\":\"计算两个日期的间隔天数\",\"example\":\"DAYS('2022-12-16','2022-12-18')\",\"result\":\"2\",\"paramDescs\":[\"*日期字符*(必选)\"],\"formatString\":\"DAYS({日期},{日期})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"date\",\"name\":\"日期函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"IF\",\"chineseName\":\"如果条件为真,则...否则...\",\"description\":\"如果条件为真,则执行表达式1,为假则执行表达式2。条件中不可嵌套使用IF函数。\",\"example\":\"IF({员工表.年龄} > 60, '退休', '在职')
IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')\",\"result\":\"'退休'
'在职'\",\"paramDescs\":[\"*条件*(必选)\",\"*表达式1*(必选)\",\"*表达式2*(必选)\"],\"formatString\":\"IF(条件, 表达式1, 表达式2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":3,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"AND\",\"chineseName\":\"且\",\"description\":\"所有条件均为真,则返回真,否则返回假。逻辑操作AND的函数模式。\",\"example\":\"AND(2 = 2, 2 < 2)\",\"result\":\"false\",\"paramDescs\":[\"*条件1*(必选)\",\"*条件2*(可选,可输入多个参数)\"],\"formatString\":\"AND(条件1, 条件2, [条件3, …])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":true}]},{\"name\":\"OR\",\"chineseName\":\"或\",\"description\":\"任意一个条件为真,则返回真,否则返回假。逻辑操作OR的函数模式。\",\"example\":\"OR(2 = 2, 2 > 3)\",\"result\":\"true\",\"paramDescs\":[\"*条件1*(必选)\",\"*条件2*(可选,可输入多个参数)\"],\"formatString\":\"OR(条件1, 条件2, [条件3, …])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":true}]},{\"name\":\"NOT\",\"chineseName\":\"反转真假结果\",\"description\":\"对逻辑结果取反。\",\"example\":\"NOT(2 > 3)\",\"result\":\"true\",\"paramDescs\":[\"*逻辑结果*(必选)\"],\"formatString\":\"NOT(逻辑结果)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false}]},{\"name\":\"IN\",\"chineseName\":\"变量是否包含在一组结果中\",\"description\":\"任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。\",\"example\":\"IN(2, [2, 3, 4])\",\"result\":\"true\",\"paramDescs\":[\"*变量*(必选)\",\"*变量数组*(必选)\"],\"formatString\":\"IN(变量, [变量1, 变量2, …])\",\"paramArray\":[],\"paramData\":[\"{}\",\"[]\"],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"LIKE\",\"chineseName\":\"文本是否包含任意一个关键字\",\"description\":\"文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个,则返回真。逻辑操作LIKE的函数模式。\",\"example\":\"LIKE('大家好', ['大家', '好'])\",\"result\":\"true\",\"paramDescs\":[\"*文本*(必选)\",\"*文本数组*(必选)\"],\"formatString\":\"LIKE(文本, [文本1, 文本2, …])\",\"paramArray\":[],\"paramData\":[\"{}\",\"[]\"],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"ISEMPTY\",\"chineseName\":\"是否为空\",\"description\":\"变量为空或未填写,则返回真。\",\"example\":\"ISEMPTY({员工表.电话})\",\"result\":\"true\",\"paramDescs\":[\"*变量或常量*(可选)\"],\"formatString\":\"ISEMPTY(变量)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"TRUE\",\"chineseName\":\"返回真\",\"description\":\"返回真。\",\"example\":\"TRUE()\",\"result\":\"true\",\"formatString\":\"TRUE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"FALSE\",\"chineseName\":\"返回假\",\"description\":\"返回假。\",\"example\":\"FALSE()\",\"result\":\"false\",\"formatString\":\"FALSE()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"IFS\",\"chineseName\":\"多条件\",\"description\":\"多个条件判断,位于单数位置的参数设置为条件,位于双数位置的参数设置为结果,最后一个参数为默认返回值,当所有条件都不满足的时候返回默认参数。\",\"example\":\"IFS(1>1,1,1=1,2,0)\",\"result\":\"2\",\"paramDescs\":[\"*条件1*(必选)\",\"*变量或常量*(必选)\",\"*条件2*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(必选)\"],\"formatString\":\"IFS({条件1},{结果1},{条件2},{结果2}...{默认结果})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"SWITCH\",\"chineseName\":\"条件选择\",\"description\":\"条件选择。\",\"example\":\"SWITCH({字段1},1,'A',2,'B','C')\",\"result\":\"假设字段1为2,结果:'B'\",\"paramDescs\":[\"*变量或常量*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(必选)\",\"*变量或常量*(可选)\",\"*变量或常量*(可选)\",\"*变量或常量*(必选)\"],\"formatString\":\"SWITCH({变量},{条件1},{结果1},{条件2},{结果2}...{默认结果})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"SORT\",\"chineseName\":\"条件排序\",\"description\":\"根据排序条件进行字符和数字的排序,UP为升序,DOWN为降序。\",\"example\":\"SORT(1,2,5,4,3,'UP')\",\"result\":\"[1,2,3,4,5]\",\"paramDescs\":[\"*字符或数字*(必选)\",\"*字符或数字*(可选)\",\"......\",\"*排序方式*\"],\"formatString\":\"SORT({变量1},{变量2},{变量3}...{排序方式})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"IFERROR\",\"chineseName\":\"异常处理\",\"description\":\"异常处理函数\",\"example\":\"IFERROR(10/0,'0')\",\"result\":\"0\",\"paramDescs\":[\"*公式内容*\"],\"formatString\":\"IFERROR({变量},{变量})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"logic\",\"name\":\"逻辑函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"ROUNDUP\",\"chineseName\":\"向上舍入\",\"description\":\"根据设置的小数位精确度,返回对数值向上舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向上舍入到指定的小数位。如果小数位精确度等于 0,则向上舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUNDUP(76.9,0)\",\"result\":\"77\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUNDUP(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"ROUND\",\"chineseName\":\"四舍五入\",\"description\":\"根据设置的小数位精确度,返回对数值四舍五入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,针对小数点后的数据进行四舍五入;如果小数位精确度等于 0,返回最接近数值的整数;如果小数位精确度为负整数,针对小数点前的数据进行四舍五入,被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUND(123.456,2),ROUND(123.456,0),ROUND(123.456,-2)\",\"result\":\"依次为123.46,123,100\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUND(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"ROUNDDOWN\",\"chineseName\":\"向下舍入\",\"description\":\"根据设置的小数位精确度,返回对数值向下舍入后的值。小数位精确度取值可为正整数,0,负整数。如果小数位精确度为正整数,则向下舍入到指定的小数位。如果小数位精确度等于 0,则向下舍入到最接近的整数。如果小数位精确度为负整数,则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0,即只保留整数。\",\"example\":\"ROUNDDOWN(76.9,0)\",\"result\":\"76\",\"paramDescs\":[\"*数字*(必选)\",\"*小数位精确度*(可选)\"],\"formatString\":\"ROUNDDOWN(数字, [小数位精确度])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"AGGREGATION\",\"chineseName\":\"聚合运算\",\"description\":\"将一组数据进行统计计算,支持最大值(MAX)、最小值(MIN)、平均值(AVG)。\",\"example\":\"AGGREGATION(1 , 2,3,'AVG')\",\"result\":\"2\",\"paramDescs\":[\"*数字*(必选)\",\"*聚合运算类型*(必选)\"],\"formatString\":\"AGGREGATION({数字}...,{聚合运算类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":true},{\"dataType\":\"string\",\"must\":true,\"constType\":[\"avg\",\"max\",\"min\"],\"infinite\":false}]},{\"name\":\"MOD\",\"chineseName\":\"求余\",\"description\":\"将两个参数进行除法运算然后得出余数返回。\",\"example\":\"MOD( 7 , 3 )\",\"result\":\"1\",\"paramDescs\":[\"*数字*(必选)\",\"*数字*(必选)\"],\"formatString\":\"ROUNDDOWN({数字},{数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"TRUNC\",\"chineseName\":\"数字格式化\",\"description\":\"将小数点格式化成指定位数。\",\"example\":\"TRUNC( 2.123 , 2 )\",\"result\":\"2.12\",\"paramDescs\":[\"*数字*(必选)\",\"*精度*(必选)\"],\"formatString\":\"ROUNDDOWN({数字},{精度})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"CALDTROW\",\"chineseName\":\"明细逐行计算函数\",\"description\":\"明细逐行计算\",\"example\":\"假设:明细有金额1、金额2、金额3等三个控件,明细行数为2,第一行值分别为:5、6、10,第二行的值分别为:1、1、9。CALDTROW({金额3}==10,{金额1}+{金额2})\",\"result\":\"当金额3等于10的时候运算加法,只有第一行的金额3等于10,明细第一行的金额3赋值为11\",\"paramDescs\":[\"*字段*(必选)\",\"*公式或字段*(必选)\"],\"formatString\":\"CALDTROW({字段},{公式或字段})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"ABS\",\"chineseName\":\"绝对值\",\"description\":\"绝对值\",\"example\":\"ABS(-9)\",\"result\":\"9\",\"paramDescs\":[\"*字段*(必选)\"],\"formatString\":\"ABS({字段})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"RANDOM\",\"chineseName\":\"随机数生成\",\"description\":\"随机数生成\",\"example\":\"RANDOM(5,'NUM')\",\"result\":\"26489\",\"paramDescs\":[\"*数字*(必选)\",\"*文本*(必选)[NUM(数字)、CHAR(字符)、FIX(字符与数字混合)]\"],\"formatString\":\"RANDOM({随机数长度},{随机类型})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false},{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]},{\"name\":\"POWER\",\"chineseName\":\"N次方\",\"description\":\"计算数值的N次方\",\"example\":\"POWER(2, 2)
POWER(4, 1/2)\",\"result\":\"4
2\",\"paramDescs\":[\"*数字*(必选)\",\"*数字*(必选,N次方的N)\"],\"formatString\":\"POWER({数字}, {数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]},{\"name\":\"SQRT\",\"chineseName\":\"根号\",\"description\":\"将数值开根号\",\"example\":\"SQRT(4)\",\"result\":\"2\",\"paramDescs\":[\"*数字*(必选)\"],\"formatString\":\"SQRT({数字})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"math\",\"name\":\"数学函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"GETMONEY\",\"chineseName\":\"获取所给定数字的金额大写\",\"description\":\"将金额转换成中文金额大写。\",\"example\":\"GETMONEY({1234})\",\"result\":\"壹仟贰佰叁拾肆元整\",\"paramDescs\":[\"*数字*(必选)\"],\"formatString\":\"GETMONEY({数字})\",\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"finance\",\"name\":\"财务函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"default\",\"chineseName\":\"default\",\"description\":\"暂无\",\"formatString\":\"default()\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"text\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"all\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"extend\",\"name\":\"自定义拓展函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"CHOOSE\",\"chineseName\":\"返回索引范围内指定的值\",\"description\":\"根据索引位置获取数据。\",\"example\":\"假设:数字输入框1为0,数字输入框2为2,数字输入框3为3,数字输入框4为4。数字输入框1为检索位置的变量,后面3个为检索目标。 示例:CHOOSE({表A.数字输入框1}, {表A.数字输入框2}, {表A.数字输入框3}, {表A.数字输入框4})\",\"result\":\"2,从数字输入框2开始进行检索,数字输入框2的检索位置为0,后续数据位置依次累加1可以得出。\",\"paramDescs\":[\"*索引位置*(必选)\",\"*索引目标1*(必选)\",\"......\"],\"formatString\":\"CHOOSE(索引位置,索引目标1...索引目标N)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"VLOOKUPS\",\"chineseName\":\"按列查找,返回所需值\",\"description\":\"按列查找,返回所需值。常用于薪酬模块。根据条件获取查询参数所在列的返回参数的值。返回参数可填写多个,用英文逗号隔开。若查询不到返回null。\",\"example\":\"VLOOKUPS({税表},{税表.收入},AND({税表.收入}>{税表.应纳税所得额下限},{税表.收入}<{税表.应纳税所得额上限}),[{税表.税率},{税表.速算扣除数}]) \",\"result\":\"按列查找返回税表中收入所在的收入区间所对应的税率和速算扣除数的数值\",\"paramDescs\":[\"*表*(必选)\",\"*条件*(必选)\",\"*返回参数*(必选)\"],\"formatString\":\"VLOOKUPS(表,[条件],[返回参数])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"MATCH\",\"chineseName\":\"返回指定数值在指定数组区域中的位置\",\"description\":\"将指定数值在指定数组区域中的位置返回。若数组中无指定值,返回null。\",\"example\":\"MATCH(15000, [1000, 15000, 2000])\",\"result\":\"1\",\"paramDescs\":[\"*值*(必选)\",\"*数组*(必选)\"],\"formatString\":\"MATCH(值,[数组])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"Number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"FIND\",\"chineseName\":\"查找\",\"description\":\"用指定参数去另一个参数列表中查找匹配项,指定参数时,填写1则去第一个参数列表中查找,2则是第二个参数列表里匹配查找第一个参数,成功则返回true,失败返回false。\",\"example\":\"FIND([1,2,3],[1,2,3,4],1)\",\"result\":\"true\",\"paramDescs\":[\"*查找值1*(必选)\",\"......\",\"*查找值N*(可选)\",\"*查找目标1*(必选)\",\"......\",\"*查找目标N*(可选)\"],\"formatString\":\"FIND([{查找值1},{查找值2}...{查找值N}],[{查找目标1},{查找目标2}...{查找目标N}])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"boolean\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"INDEX\",\"chineseName\":\"数据索引\",\"description\":\"数据索引函数,根据索引位置返回一组数据中对应位置的数据。注意:索引位置是从0开始的。\",\"example\":\"假设:数字控件1=2,金额控件1=3,金额控件3=5,INDEX(1,[{数字控件1},{金额控件1},{金额控件2}]\",\"result\":\"3(索引下标为1,返回数组中第二个参数)\",\"paramDescs\":[\"*索引位置*(必选)\",\"*数组*(必选)\"],\"formatString\":\"INDEX({查找值},[{查找目标1},{查找目标2}...{查找目标N}])\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"number\",\"must\":true,\"infinite\":false},{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"UNIQUE\",\"chineseName\":\"唯一值过滤\",\"description\":\"唯一值过滤函数,得到一组数据,然后去掉重复的值,返回所有去重后的一组数据。\",\"example\":\"假设:文本控件1='A',文本控件2='B',文本控件3='B',UNIQUE({文本控件1},{文本控件2},{文本控件3})\",\"result\":\"[{文本控件1},{文本控件2}]\",\"paramDescs\":[\"*数组*(必选)\"],\"formatString\":\"UNIQUE({过滤目标1},{过滤目标2}...{过滤目标N})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":-1,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false}]},{\"name\":\"FILTER\",\"chineseName\":\"条件过滤\",\"description\":\"过滤函数,通过一个或多个条件过滤参数中的数据,返回所有符合条件的一组数据。\",\"example\":\"假设:文本控件1='A',文本控件2='B',文本控件3='B',FILTER([{文本控件1},{文本控件2},{文本控件3}],'B')\",\"result\":\"[{文本控件2},{文本控件3}]\",\"paramDescs\":[\"*数组*(必选)\",\"*过滤字段*(必选)\"],\"formatString\":\"FILTER([{过滤目标1},{过滤目标2}...{过滤目标N}],{过滤字段}={过滤依据})\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"all\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"array\",\"must\":true,\"infinite\":false},{\"dataType\":\"boolean\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"find\",\"name\":\"查找函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"GETHRMLOGINID\",\"chineseName\":\"返回指定人员系统账号\",\"description\":\"获取指定人员系统账号。\",\"example\":\"GETHRMLOGINID({表单.张三})\",\"result\":\"'zhangsan@qq.com'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMLOGINID({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMWORKCODE\",\"chineseName\":\"返回指定人员编号\",\"description\":\"获取指定人员编号。\",\"example\":\"GETHRMWORKCODE({表单.张三})\",\"result\":\"'A001'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMWORKCODE({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMMANAGER\",\"chineseName\":\"返回指定人员直接上级\",\"description\":\"获取指定人员直接上级。返回值为对应人员直接上级的ID。\",\"example\":\"GETHRMMANAGER({表单.张三})\",\"result\":\"'1559563038252396708'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMMANAGER({人员}})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMEMAIL\",\"chineseName\":\"获取指定人员邮箱\",\"description\":\"获取指定人员邮箱。\",\"example\":\"GETHRMEMAIL({表单.张三})\",\"result\":\"'2345@163.com'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMEMAIL({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMSECLEVEL\",\"chineseName\":\"获取指定人员安全级别\",\"description\":\"获取指定人员安全级别。\",\"example\":\"张三安全级别为1;GETHRMSECLEVEL({表单.张三})\",\"result\":\"'1'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMSECLEVEL({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMALLMANAGER\",\"chineseName\":\"返回指定人员所有上级\",\"description\":\"获取指定人员所有上级。存在多个上级时,返回所有上级形成的数组。\",\"example\":\"GETHRMALLMANAGER({表单.张三})\",\"result\":\"返回张三的所有上级形成的数组\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMALLMANAGER({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMDEPARTMENT\",\"chineseName\":\"返回指定人员部门\",\"description\":\"获取指定人员部门。返回值为部门ID。\",\"example\":\"GETHRMDEPARTMENT({表单.张三})\",\"result\":\"'1560052731319352218'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMDEPARTMENT({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMSUBCOMPANY\",\"chineseName\":\"返回指定人员分部\",\"description\":\"取指定人员分部,返回值为分部ID。\",\"example\":\"GETHRMSUBCOMPANY({表单.张三})\",\"result\":\"'1560052731319352218'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMSUBCOMPANY({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDEPARTMENTNAME\",\"chineseName\":\"返回指定部门名称\",\"description\":\"获取指定部门名称。\",\"example\":\"GETDEPARTMENTNAME({表单.A部门})\",\"result\":\"'A部门'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETDEPARTMENTNAME({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDEPARTMENTCODE\",\"chineseName\":\"返回指定部门编号\",\"description\":\"获取指定部门编号。\",\"example\":\"GETDEPARTMENTCODE({表单.A部门})\",\"result\":\"'A001'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETDEPARTMENTCODE({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUPERDEPARTMENT\",\"chineseName\":\"返回指定部门直接上级部门\",\"description\":\"获取指定部门直接上级部门。返回值为对应部门直接上级部门的ID。\",\"example\":\"GETSUPERDEPARTMENT({表单.A部门})\",\"result\":\"'1559563038252396709'\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETSUPERDEPARTMENT({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETALLSUPERDEPARTMENT\",\"chineseName\":\"返回指定部门所有上级部门\",\"description\":\"获取指定部门所有上级部门。存在多个上级部门时,返回所有上级部门形成的数组。\",\"example\":\"GETALLSUPERDEPARTMENT({表单.A部门})\",\"result\":\"返回A部门的所有上级部门形成的数组\",\"paramDescs\":[\"*部门*(必选)\"],\"formatString\":\"GETALLSUPERDEPARTMENT({部门})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUBCOMPANYNAME\",\"chineseName\":\"返回指定分部名称\",\"description\":\"获取指定分部名称。\",\"example\":\"GETSUBCOMPANYNAME({表单.A分部})\",\"result\":\"'A分部'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUBCOMPANYNAME({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUBCOMPANYCODE\",\"chineseName\":\"返回指定分部编号\",\"description\":\"获取指定分部编号。\",\"example\":\"GETSUBCOMPANYCODE({表单.A分部})\",\"result\":\"'B001'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUBCOMPANYCODE({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETSUPERSUBCOMPANY\",\"chineseName\":\"返回指定分部直接上级分部\",\"description\":\"获取指定分部直接上级分部。返回值为对应部门直接上级分部的ID。\",\"example\":\"GETSUPERSUBCOMPANY({表单.A分部})\",\"result\":\"'1559563038252396705'\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETSUPERSUBCOMPANY({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETALLSUPERSUBCOMPANY\",\"chineseName\":\"返回指定分部所有上级分部\",\"description\":\"获取指定分部所有上级分部。存在多个上级分部时,返回所有上级分部形成的数组。\",\"example\":\"GETALLSUPERSUBCOMPANY({表单.A分部})\",\"result\":\"A分部的所有上级分部形成的数组\",\"paramDescs\":[\"*分部*(必选)\"],\"formatString\":\"GETALLSUPERSUBCOMPANY({分部})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMNAME\",\"chineseName\":\"获取人员名称\",\"description\":\"获取指定人员的姓名。\",\"example\":\"GETHRMNAME({U:张三})\",\"result\":\"'张三'\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMNAME({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETHRMMOBILE\",\"chineseName\":\"获取人员手机号码\",\"description\":\"获取指定人员的手机号码。\",\"example\":\"GETHRMMOBILE({U:张三})\",\"result\":\"13123232323\",\"paramDescs\":[\"*人员*(必选)\"],\"formatString\":\"GETHRMMOBILE({人员})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETREQUESTMARK\",\"chineseName\":\"获取指定流程编号\",\"description\":\"获取指定流程编号\",\"example\":\"假设关联流程=流程数据A,编号为:2332323,GETREQUESTMARK({关联流程})\",\"result\":\"'2332323'\",\"paramDescs\":[\"*关联流程*(必选)\"],\"formatString\":\"GETREQUESTMARK({关联流程})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETDOCCODE\",\"chineseName\":\"获取指定文档编号\",\"description\":\"获取指定文档编号。\",\"example\":\"假设关联文档=文档A,文档A编号为:234567,GETDOCCODE({关联文档})\",\"result\":\"'234567'\",\"paramDescs\":[\"*关联文档*(必选)\"],\"formatString\":\"GETDOCCODE({关联文档})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETPRJCODE\",\"chineseName\":\"获取指定项目编号\",\"description\":\"获取指定项目编号。\",\"example\":\"假设关联项目=项目A,项目A编号为:2838383,GETPRJCODE({关联项目})\",\"result\":\"'2838383'\",\"paramDescs\":[\"*关联项目*(必选)\"],\"formatString\":\"GETPRJCODE({关联项目})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETCRMCODE\",\"chineseName\":\"获取指定客户编号\",\"description\":\"获取指定客户编号。\",\"example\":\"假设关联客户=客户A,客户A编号为:2838383,GETCRMCODE({关联客户})\",\"result\":\"'2838383'\",\"paramDescs\":[\"*关联客户*(必选)\"],\"formatString\":\"GETCRMCODE({关联客户})\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"LANGUAGE\",\"chineseName\":\"当前语言\",\"description\":\"获取当前语言。\",\"example\":\"LANGUAGE()\",\"result\":\"简体中文\",\"formatString\":\"LANGUAGE()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETREQUESTSTATUS\",\"chineseName\":\"流程状态\",\"description\":\"获取流程状态。示例:假设关联流程所选中的数据正在审批中;GETREQUESTSTATUS({表单.关联流程})
结果:'审批中'\",\"example\":\"假设关联流程所选中的数据正在审批中;GETREQUESTSTATUS({表单.关联流程})\",\"result\":\"'审批中'\",\"paramDescs\":[\"*关联流程*(必选)\"],\"formatString\":\"GETREQUESTSTATUS()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETEMPIDBYMOBILE\",\"chineseName\":\"人员手机获取人员ID\",\"description\":\"人员手机获取人员ID\",\"example\":\"人员手机号码获取人员ID;GETEMPIDBYMOBILE({手机号})\",\"result\":\"'342143214234213'\",\"paramDescs\":[\"*手机号*(必选)\"],\"formatString\":\"GETEMPIDBYMOBILE()\",\"paramArray\":[\"String\"],\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":1,\"paramStatuses\":[{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]}],\"dataType\":\"database\",\"name\":\"数据库函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"DISTANCE\",\"chineseName\":\"返回两个位置间的直线距离\",\"description\":\"返回两个位置间的直线距离,单位m(米)。\",\"example\":\"DISTANCE({表A.地理位置1}, {表A.地理位置2})\",\"result\":\"23000\",\"paramDescs\":[\"*地理位置1*(必选)\",\"*地理位置2*(必选)\"],\"formatString\":\"DISTANCE({地理位置1}, {地理位置2})\",\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false},{\"dataType\":\"option\",\"must\":true,\"infinite\":false}]},{\"name\":\"GETUSER\",\"chineseName\":\"返回用户的个人资料\",\"description\":\"返回用户的指定资料项:name、phone、mobile、email。\",\"example\":\"GETUSER({表A.人员选择}, 'mobile')\",\"result\":\"'18692108017'\",\"paramDescs\":[\"*人员选择*(必选)\",\"*文本*(必选,资料项)\"],\"formatString\":\"GETUSER({人员选择}, 文本)\",\"paramData\":[],\"returnType\":\"string\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":2,\"paramStatuses\":[{\"dataType\":\"option\",\"must\":true,\"infinite\":false},{\"dataType\":\"string\",\"must\":true,\"infinite\":false}]},{\"name\":\"FIELDS\",\"chineseName\":\"根据条件和排序获取指定表格中的全部数据(最多50条)或指定条数的数据的指定字段值的集合。\",\"description\":\"根据条件和排序获取指定表格中的全部数据(最多50条)或指定条数的数据的指定字段值的集合。\",\"example\":\"FIELDS({表A.负责人}, {表A.销售状态} = {C:已签约}, {表A.创建时间-倒序}, 'desc', 50})\",\"result\":\"返回销售状态为已签约的最新发布的50条数据中负责人的集合\",\"paramDescs\":[\"*字段*(必选)\",\"*条件*(可选)\",\"*排序字段*(可选)\",\"*排序类型*(可选,asc为升序,desc为降序。默认值asc)\",\"*返回条数*(可选)\"],\"formatString\":\"FIELDS({字段}, [条件], [排序字段], [排序类型], [返回条数])\",\"paramData\":[],\"returnType\":\"Array\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0}],\"dataType\":\"special\",\"name\":\"特殊函数\",\"action\":\"DataSource\",\"type\":\"functions\"},{\"children\":[{\"name\":\"monthNumber\",\"chineseName\":\"月份差 +1\",\"description\":\" 计算两个日期相差的月份数 +1\",\"formatString\":\"monthNumber(date1,date2)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0},{\"name\":\"getEndDate\",\"chineseName\":\"根据合同期限计算合同结束日期\",\"description\":\"需传入两个参数\\n参数1、合同开始日期\\n参数2、整年(如:1、2、3)\",\"formatString\":\"getEndDate(startDate,expirationDate)\",\"paramArray\":[],\"paramData\":[],\"returnType\":\"number\",\"type\":\"function\",\"validForm\":\"current_data\",\"paramCount\":0}],\"dataType\":\"custom\",\"name\":\"自定义JS脚本函数\",\"action\":\"DataSource\",\"type\":\"functions\"}]}"; + return FormluaConstant.DES; } } From 65849f99b14015547855e865113edc13e940306e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 26 May 2023 16:45:05 +0800 Subject: [PATCH 115/245] =?UTF-8?q?=E4=BA=BA=E5=91=98=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/SalaryStatisticsEmployeeDetailResultDTO.java | 7 +++++++ .../wrapper/SalaryStatisticsEmployeeWrapper.java | 12 +++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java index f89c61d76..1023b6c4b 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeDetailResultDTO.java @@ -1,5 +1,8 @@ package com.engine.salary.report.entity.dto; +import com.cloudstore.eccom.pc.table.WeaTableType; +import com.engine.salary.annotation.SalaryTable; +import com.engine.salary.annotation.SalaryTableOperate; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -18,6 +21,10 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor //"薪酬统计员工明细核算结果") +@SalaryTable(pageId = "a4f85287-9876-4d11-adn9-7d06e54y6672", tableType = WeaTableType.CHECKBOX, operates = { + @SalaryTableOperate(index = "0", text = "编辑"), + @SalaryTableOperate(index = "1", text = "删除") +}) public class SalaryStatisticsEmployeeDetailResultDTO { //核算人员") diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 8fab42cfd..6ba44dc79 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -1,11 +1,12 @@ package com.engine.salary.report.wrapper; import com.cloudstore.eccom.constant.WeaBoolAttr; -import com.cloudstore.eccom.pc.table.WeaTable; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.component.SalaryWeaTable; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; @@ -26,7 +27,10 @@ import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; import java.math.BigDecimal; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; /** * 薪酬统计员工明细 @@ -85,9 +89,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { // 列表columns List weaTableColumns = buildDetailTableColumns(salaryStatisticsEmployeeDetailResult); - WeaTable table = new WeaTable(); - table.setPageUID(UUID.randomUUID().toString()); - table.setPageID("a4f85287-e3f9-4275-adn9-7d06e54y6700"); + SalaryWeaTable table = new SalaryWeaTable(user, SalaryStatisticsEmployeeDetailResultDTO.class); table.setColumns(weaTableColumns); WeaResultMsg result = new WeaResultMsg(false); From a2f465341150c7d5f300ff90c3b28146b0832a46 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 29 May 2023 16:17:13 +0800 Subject: [PATCH 116/245] =?UTF-8?q?=E5=BD=93=E8=96=AA=E8=B5=84=E6=A1=A3?= =?UTF-8?q?=E6=A1=88=E5=88=97=E8=A1=A8=E4=B8=BA0=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E7=94=B1=E4=BA=8E=E6=9F=A5=E8=AF=A2=E4=BA=86=E5=85=A8=E9=87=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=AF=BC=E8=87=B4=E9=80=9F=E5=BA=A6?= =?UTF-8?q?=E6=85=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryArchiveServiceImpl.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 4e93bfb3a..1dcf84c18 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -37,7 +37,6 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; -import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -390,12 +389,16 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe List salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); // 1.获取薪资档案所对应的当前生效的薪资项目数据 - List salaryArchiveItemList = getCurrentEffectiveItemList(ids, salaryItemIds); + List salaryArchiveItemList = Collections.emptyList(); + if(CollectionUtils.isNotEmpty(ids) && CollectionUtils.isNotEmpty(salaryItemIds)){ + salaryArchiveItemList = getCurrentEffectiveItemList(ids, salaryItemIds); + } + List finalSalaryArchiveItemList = salaryArchiveItemList; List> salaryArchiveItemData = salaryArchives.stream().map(m -> { Map map = Maps.newHashMap(); map.put("salaryArchiveId", m.getId()); map.put("archiveStatus", m.getArchiveStatus()); - List salaryArchiveItemValuelList = salaryArchiveItemList.stream().filter(i -> i.getSalaryArchiveId().equals(m.getId())).collect(Collectors.toList()); + List salaryArchiveItemValuelList = finalSalaryArchiveItemList.stream().filter(i -> i.getSalaryArchiveId().equals(m.getId())).collect(Collectors.toList()); salaryArchiveItemValuelList.forEach(i -> { map.put(i.getSalaryItemId() + SalaryItemConstant.DYNAMIC_SUFFIX, i.getItemValue()); }); From 601b90d188d790d5bb5cc093b025312949420ce0 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 31 May 2023 09:55:24 +0800 Subject: [PATCH 117/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SalaryItemBiz.java | 37 +++++++++++++++ .../entity/salaryitem/bo/SalaryItemBO.java | 2 + .../salaryitem/dto/SalaryItemListDTO.java | 3 ++ .../salaryitem/param/SalaryItemSaveParam.java | 5 ++ .../entity/salaryitem/po/SalaryItemPO.java | 5 ++ .../mapper/salaryitem/SalaryItemMapper.java | 12 +++++ .../mapper/salaryitem/SalaryItemMapper.xml | 47 ++++++++++++++++++- .../salary/service/SalaryItemService.java | 10 ++++ .../service/impl/SalaryItemServiceImpl.java | 13 +++++ .../salary/web/SalaryFieldController.java | 14 ++++++ .../wrapper/SalaryAcctRecordWrapper.java | 39 ++++++++++++++- .../salary/wrapper/SalaryArchiveWrapper.java | 2 +- .../salary/wrapper/SalaryFieldWrapper.java | 8 ++++ 13 files changed, 193 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/biz/SalaryItemBiz.java b/src/com/engine/salary/biz/SalaryItemBiz.java index 3309bf874..b96f49665 100644 --- a/src/com/engine/salary/biz/SalaryItemBiz.java +++ b/src/com/engine/salary/biz/SalaryItemBiz.java @@ -127,4 +127,41 @@ public class SalaryItemBiz { } } + + + public void batchUpdateSortedIndex(List list) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryItemMapper mapper = sqlSession.getMapper(SalaryItemMapper.class); + List> partition = (List>)Lists.partition(list, 100); + partition.forEach(mapper::batchUpdateSortedIndex); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } + + + public List listByParamOrderById(SalaryItemSearchParam searchParam) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryItemMapper mapper = sqlSession.getMapper(SalaryItemMapper.class); + return mapper.listByParamOrderById(searchParam); + } finally { + sqlSession.close(); + } + } + + public Integer getMaxItemSortedIndex(Integer useInEmployeeSalary) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryItemMapper mapper = sqlSession.getMapper(SalaryItemMapper.class); + return mapper.getMaxItemSortedIndex(useInEmployeeSalary); + } finally { + sqlSession.close(); + } + + } + + } diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index f3b0048fd..06307b3c6 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -111,6 +111,7 @@ public class SalaryItemBO { .formulaId(salaryItemPO.getFormulaId()) .formulaContent(formulaMap.getOrDefault(salaryItemPO.getFormulaId(), "")) .taxDeclarationColumn(buildTaxDeclarationColumn(salaryItemPO.getCode())) + .sortedIndex(salaryItemPO.getSortedIndex()) .description(salaryItemPO.getDescription()) .canDelete(true) .canEdit(openFormulaForcedEditing ||Objects.equals(salaryItemPO.getCanEdit(), NumberUtils.INTEGER_ONE)) @@ -219,6 +220,7 @@ public class SalaryItemBO { .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .sharedType(Optional.ofNullable(saveParam.getSharedType()).orElse(0)) .taxAgentIds(saveParam.getTaxAgentIds()) + .sortedIndex(saveParam.getSortedIndex()) .build(); // 开启了"薪资档案引用",取值方式固定为输入 // if (Objects.equals(saveParam.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)) { diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java index 24b0904f0..458985cdd 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java @@ -95,6 +95,9 @@ public class SalaryItemListDTO { //是否可以删除 private Boolean canDelete; + //排序 + private Integer sortedIndex; + @SalaryTableColumn(text = "操作", width = "20%", column = "operate") private String operate; } diff --git a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java index 99e73eebc..00325afc1 100644 --- a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java +++ b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java @@ -93,4 +93,9 @@ public class SalaryItemSaveParam { * 绑定人员范围,','分隔 */ private String taxAgentIds; + + /** + * 排序 + */ + private Integer sortedIndex; } diff --git a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java index d93280bb4..f54afc630 100644 --- a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java +++ b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java @@ -149,4 +149,9 @@ public class SalaryItemPO { * 0不可删除,1可删除 */ private Integer canDelete; + + /** + * 排序 + */ + private Integer sortedIndex; } diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java index ead10c919..46b7bb83c 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java @@ -62,4 +62,16 @@ public interface SalaryItemMapper { void deleteByIds(@Param("ids") Collection ids); List listByParam(@Param("param") SalaryItemSearchParam param); + + List listByParamOrderById(@Param("param") SalaryItemSearchParam param); + + void batchUpdateSortedIndex(@Param("collection")List salaryItemPOS); + + /** + * 获取薪资项目的最大sortedIndex + * @param useInEmployeeSalary + * @return + */ + Integer getMaxItemSortedIndex(Integer useInEmployeeSalary); + } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index 94ed8b7ec..9bac11881 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -23,6 +23,7 @@ + @@ -48,7 +49,8 @@ t.update_time, t.data_type, t.shared_type, - t.tax_agent_ids + t.tax_agent_ids, + t.sorted_index @@ -57,6 +59,7 @@ FROM hrsa_salary_item t WHERE delete_type = 0 + ORDER BY sorted_index DESC @@ -136,7 +139,7 @@ #{id} - ORDER BY id DESC + ORDER BY sorted_index DESC @@ -207,6 +210,9 @@ tax_agent_ids, + + sorted_index, + @@ -272,6 +278,9 @@ #{taxAgentIds}, + + #{sortedIndex}, + @@ -426,8 +435,36 @@ #{id} + + update hrsa_salary_item + + + + + when id=#{item.id} then #{item.sortedIndex} + + + + + where + id in + + #{item.id} + + + + + + AND name like CONCAT('%',#{param.name},'%') diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index 24cde13d8..fbf123363 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -85,6 +85,8 @@ public interface SalaryItemService { */ List listByParam(SalaryItemSearchParam searchParam); + List listByParamOrderById(SalaryItemSearchParam searchParam); + PageInfo listPageByParam(SalaryItemSearchParam searchParam); @@ -124,4 +126,12 @@ public interface SalaryItemService { * @return */ SalaryItemServiceImpl.UsingItem getUsingItem(); + + /** + * 批量保存薪资项目顺序 + * @param values + */ + void batchUpdateSortedIndex(List values); + + } diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 08e2eb56d..cf5e89b4d 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -120,6 +120,11 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return salaryItemBiz.listByParam(searchParam); } + @Override + public List listByParamOrderById(SalaryItemSearchParam searchParam) { + return salaryItemBiz.listByParamOrderById(searchParam); + } + @Override public PageInfo listPageByParam(SalaryItemSearchParam searchParam) { Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); @@ -142,6 +147,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return SalaryPageUtil.buildPage(searchParam.getCurrent(), searchParam.getPageSize(), salaryItemPOS); } + @Override public boolean filterInRange(Set userTaxAgentIds, SalaryItemPO po) { return null == po.getSharedType() @@ -175,6 +181,8 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98328, "自定义薪资项目的名称不能和系统薪资项目的名称重名")); } // 保存薪资项目 + Integer maxItemSortedIndex = salaryItemBiz.getMaxItemSortedIndex(saveParam.getUseInEmployeeSalary()); + saveParam.setSortedIndex(maxItemSortedIndex+1); SalaryItemPO salaryItemPO = SalaryItemBO.convert2SalaryItemPO(saveParam, (long) user.getUID()); salaryItemBiz.insert(salaryItemPO); // todo 记录日志 @@ -366,6 +374,11 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return UsingItem.builder().usingFormulaIds(usingFormulaIds).usingItemIds(usingItemIds).usingCodes(itemCode).build(); } + @Override + public void batchUpdateSortedIndex(List values) { + salaryItemBiz.batchUpdateSortedIndex(values); + } + @Data @Builder diff --git a/src/com/engine/salary/web/SalaryFieldController.java b/src/com/engine/salary/web/SalaryFieldController.java index 9d093a40c..43c8bfbed 100644 --- a/src/com/engine/salary/web/SalaryFieldController.java +++ b/src/com/engine/salary/web/SalaryFieldController.java @@ -5,6 +5,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.po.SalaryItemPO; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.SalaryFieldWrapper; @@ -18,6 +19,7 @@ import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import java.util.Collection; +import java.util.List; /** * 薪资字段管理 @@ -45,6 +47,18 @@ public class SalaryFieldController { return new ResponseResult>(user).run(getSalaryFieldWrapper(user)::listPage, searchParam); } + /** + * 字段管理列表保存顺序 + * @see + */ + @POST + @Path("/saveSortedIndex") + @Produces(MediaType.APPLICATION_JSON) + public String saveSortedIndex(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody List saveList) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>(user).run(getSalaryFieldWrapper(user)::saveSortedIndex, saveList); + } + /** * 字段管理详情 diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index 1d4e98899..893c95dd2 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -2,7 +2,6 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.EmployBiz; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.dto.SalarySendCheckDTO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; @@ -12,6 +11,8 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.exception.SalaryRunTimeException; @@ -28,6 +29,7 @@ import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -60,6 +62,10 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + // private ComInfoCache comInfoCache; public PageInfo listPage(SalaryAcctRecordQueryParam queryParam) { @@ -68,6 +74,8 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord SalarySobUtil.handleEmployeeStatusHistory(); // 处理工资单发放历史数据 getSalarySendService(user).handleHistory(); + // 处理历史数据给薪资项目都增加个默认排序 + generateSalaryItemSortedIndex(); // 查询薪资核算记录(分页) PageInfo page = getSalaryAcctRecordService(user).listPageByParam(queryParam); PageInfo dtoPage = new PageInfo(SalaryAcctRecordListDTO.class); @@ -113,6 +121,35 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord return dtoPage; } + /** + * @description 处理历史数据给薪资项目都增加个默认排序 + * @return null + * @author Harryxzy + * @date 2023/5/29 14:37 + */ + private void generateSalaryItemSortedIndex() { + // 查询所有薪资项目 + List salaryItemList = getSalaryItemService(user).listByParamOrderById(SalaryItemSearchParam.builder().build()); + Optional needGenerate = salaryItemList.stream().filter(item -> item.getSortedIndex() == null).findFirst(); + if(needGenerate.isPresent()){ + Map> salaryItemMap = SalaryEntityUtil.group2Map(salaryItemList, SalaryItemPO::getUseInEmployeeSalary); + for(Map.Entry> entry : salaryItemMap.entrySet()){ + List values = entry.getValue(); + if(CollectionUtils.isNotEmpty(values)){ + // 将系统薪资项目放到最后 + values = values.stream() + .sorted(Comparator.comparing(SalaryItemPO::getSystemType)) + .collect(Collectors.toList()); + // 添加默认sortedIndex + AtomicInteger index = new AtomicInteger(values.size()); + values.stream().forEach(value -> value.setSortedIndex(index.getAndDecrement())); + // 保存排序 + getSalaryItemService(user).batchUpdateSortedIndex(values); + } + } + } + } + /** * 薪资核算记录详情 * diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 756b37638..e03ec72bd 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -138,7 +138,7 @@ public class SalaryArchiveWrapper extends Service { .stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); salaryItems = salaryItems.stream() .filter(po -> getSalaryItemService(user).filterInRange(userTaxAgentIds, po)) - .sorted((Comparator.comparing(SalaryItemPO::getId))) + .sorted((Comparator.comparing(SalaryItemPO::getSortedIndex))) .collect(Collectors.toList()); diff --git a/src/com/engine/salary/wrapper/SalaryFieldWrapper.java b/src/com/engine/salary/wrapper/SalaryFieldWrapper.java index ee0880e74..00ec26ebf 100644 --- a/src/com/engine/salary/wrapper/SalaryFieldWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryFieldWrapper.java @@ -204,4 +204,12 @@ public class SalaryFieldWrapper extends Service { public void delete(Collection ids) { getSalaryItemService(user).deleteByIds(ids); } + + /** + * 保存字段排序信息 + * @param salaryItemPOS + */ + public void saveSortedIndex(List salaryItemPOS) { + getSalaryItemService(user).batchUpdateSortedIndex(salaryItemPOS); + } } From fb03cf98a739b4f9360e72b9fffc32223481d45f Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 31 May 2023 11:49:40 +0800 Subject: [PATCH 118/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=EF=BC=8C=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=E3=80=81=E8=96=AA?= =?UTF-8?q?=E8=B5=84=E6=A1=A3=E6=A1=88=E3=80=81=E8=96=AA=E8=B5=84=E6=A0=B8?= =?UTF-8?q?=E7=AE=97=E5=A2=9E=E5=8A=A0=E5=B7=A5=E5=8F=B7=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/param/SalaryAcctEmployeeQueryParam.java | 2 ++ .../salaryacct/param/SalaryAcctResultQueryParam.java | 2 ++ .../salaryarchive/param/SalaryArchiveQueryParam.java | 1 + .../siaccount/param/InsuranceAccountDetailParam.java | 2 ++ .../engine/salary/mapper/archive/SalaryArchiveMapper.xml | 9 +++++++++ .../mapper/salaryacct/SalaryAcctEmployeeMapper.xml | 9 +++++++++ .../mapper/siaccount/InsuranceAccountDetailMapper.xml | 9 +++++++++ .../salary/service/impl/ColumnBuildServiceImpl.java | 1 + .../salary/service/impl/RecordsBuildServiceImpl.java | 1 + 9 files changed, 36 insertions(+) diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java index f3832a537..8320ff6bf 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java @@ -56,4 +56,6 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam { //薪资核算人员列表主键id") private Collection ids; + + private String workcode; } diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java index dd49ccb6c..21221a4b3 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java @@ -55,4 +55,6 @@ public class SalaryAcctResultQueryParam extends BaseQueryParam { //列表主键id private Collection ids; + + private String workcode; } diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java index 80f8d6368..c975e8283 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java @@ -80,4 +80,5 @@ public class SalaryArchiveQueryParam extends BaseQueryParam { //列表类型:PENDING:待定薪;FIXED:发薪;SUSPEND:待停薪;STOP:停薪" private SalaryArchiveListTypeEnum listType; + private String workcode; } diff --git a/src/com/engine/salary/entity/siaccount/param/InsuranceAccountDetailParam.java b/src/com/engine/salary/entity/siaccount/param/InsuranceAccountDetailParam.java index 747f6455b..2492513cd 100644 --- a/src/com/engine/salary/entity/siaccount/param/InsuranceAccountDetailParam.java +++ b/src/com/engine/salary/entity/siaccount/param/InsuranceAccountDetailParam.java @@ -40,4 +40,6 @@ public class InsuranceAccountDetailParam extends BaseQueryParam { * 核算创建人 */ private Long creator; + + private String workcode; } diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index 4a9208e7a..35524924f 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -126,6 +126,9 @@ AND e.lastname like CONCAT('%',#{param.username},'%') + + AND e.workcode like CONCAT('%',#{param.workcode},'%') + AND c.id IN @@ -200,6 +203,9 @@ AND e.lastname like '%'||#{param.username}||'%' + + AND e.workcode like '%'||#{param.workcode}||'%' + AND c.id IN @@ -273,6 +279,9 @@ AND e.lastname like '%'+#{param.username}+'%' + + AND e.workcode like '%'+#{param.workcode}+'%' + AND c.id IN diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 19febf3b5..cc1ad66c2 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -496,6 +496,9 @@ AND em.lastname LIKE CONCAT('%',#{param.employeeName},'%') + + AND em.workcode like CONCAT('%',#{param.workcode},'%') + -- 分部 AND em.subcompanyid1 IN @@ -576,6 +579,9 @@ AND em.lastname LIKE '%'||#{param.employeeName}||'%' + + AND em.workcode like '%'||#{param.workcode}||'%' + AND em.departmentid IN @@ -648,6 +654,9 @@ AND em.lastname LIKE '%'+#{param.employeeName}+'%' + + AND em.workcode like '%'+#{param.workcode}+'%' + AND em.departmentid IN diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index 6ec6e1bb1..7b3378480 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -173,6 +173,9 @@ e.lastname like CONCAT('%',#{param.userName},'%') ) + + AND e.workcode like CONCAT('%',#{param.workcode},'%') + AND t.employee_id IN @@ -199,6 +202,9 @@ e.lastname like '%'||#{param.userName}||'%' ) + + AND e.workcode like '%'||#{param.workcode}||'%' + AND t.employee_id IN @@ -225,6 +231,9 @@ e.lastname like '%'+#{param.userName}+'%' ) + + AND e.workcode like '%'+#{param.workcode}+'%' + AND t.employee_id IN diff --git a/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java b/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java index 5e868d42b..34a3d99f6 100644 --- a/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java @@ -53,6 +53,7 @@ public class ColumnBuildServiceImpl extends Service implements ColumnBuildServic list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 86185, "部门"), "department")); list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 86186, "手机号"), "mobile")); list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 86187, "员工状态"), "employeeStatus")); + list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 1933, "工号"), "workcode")); list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 100377, "数据来源"), "sourceFrom")); if (paymentStatus.equals(PaymentStatusEnum.REPAIR.getValue())) { list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 100379, "补缴月份"), "supplementaryMonth")); diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index bdea7d744..c8d71f2bd 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -83,6 +83,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("mobile", simpleEmployee.getMobile()); record.put("employeeStatus", simpleEmployee.getStatus() != null ? UserStatusEnum.getDefaultLabelByValue(Integer.parseInt(simpleEmployee.getStatus())) : ""); ResourceFromEnum from = SalaryEnumUtil.enumMatchByValue(item.getResourceFrom(), ResourceFromEnum.values(), ResourceFromEnum.class); + record.put("workcode", StringUtils.isBlank(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()); record.put("sourceFrom", SalaryI18nUtil.getI18nLabel(from.getLabelId(), from.getDefaultLabel())); record.put("socialPayOrg", paymentMap.get(item.getSocialPayOrg()) == null ? "" : paymentMap.get(item.getSocialPayOrg()).getName()); record.put("socialAccount", item.getSocialAccount()); From 4e04b6e268fd70916a6fdba8743fb42b2cfd8108 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 1 Jun 2023 10:30:33 +0800 Subject: [PATCH 119/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=8C=E9=80=89=E6=8B=A9=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E8=8E=B7=E5=8F=96=E6=9C=AA=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryAcctExcelServiceImpl.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 89bf9af92..2600bb01d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -410,6 +410,22 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc .salaryItems(items) .sortedIndex(groupPO.getSortedIndex()).build() ); } + // 未分类 + List noGroupItems = salarySobItemPOMap.getOrDefault(0L, Collections.emptyList()); + if(CollectionUtils.isNotEmpty(noGroupItems)){ + List items = noGroupItems.stream() + .map(salarySobItemPO ->SalaryAcctImportFieldDTO.ImportFieldDTO.builder() + .salaryItemId(salarySobItemPO.getSalaryItemId()) + .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) + .build()) + .collect(Collectors.toList()); + + itemsByGroup.add(SalaryAcctImportFieldDTO.ImportFieldByGroupDTO.builder() + .salarySobItemGroupId(0L) + .salarySobItemGroupName("未分类") + .salaryItems(items) + .sortedIndex(itemsByGroup.size()).build()); + } // // 薪资项目中的公式项 // List formulaItems = salaryItems.stream() From 0472c7b7575faccf2cbb0895866be7b4a6f78b6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 1 Jun 2023 11:05:15 +0800 Subject: [PATCH 120/245] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=BB=98=E8=AE=A4=E4=BD=BF=E7=94=A8=E5=88=97?= =?UTF-8?q?=20=E6=8A=A5=E8=A1=A8=E7=A9=BA=E6=95=B0=E6=8D=AE=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryitem/dto/SalaryFieldListDTO.java | 4 ++-- .../salary/formlua/core/QlExpressTest.java | 19 +++++++++++++++---- .../formlua/entity/standard/ExcelResult.java | 16 ++++++++++++++++ .../SalaryStatisticsReportServiceImpl.java | 4 ++-- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java index c392e0d62..69663545e 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java @@ -36,8 +36,8 @@ public class SalaryFieldListDTO { private String name; //默认使用 -// @SalaryTableColumn(text = "默认使用", width = "10%", column = "useDefault") -// @TableTitle(title = "默认使用",dataIndex = "useDefault",key = "useDefault") + @SalaryTableColumn(text = "默认使用", width = "10%", column = "useDefault") + @TableTitle(title = "默认使用",dataIndex = "useDefault",key = "useDefault") private Integer useDefault; //进位规则 diff --git a/src/com/engine/salary/formlua/core/QlExpressTest.java b/src/com/engine/salary/formlua/core/QlExpressTest.java index 3c76ceff3..fd94569ca 100644 --- a/src/com/engine/salary/formlua/core/QlExpressTest.java +++ b/src/com/engine/salary/formlua/core/QlExpressTest.java @@ -1,5 +1,9 @@ package com.engine.salary.formlua.core; +import com.engine.salary.formlua.entity.standard.ExcelResult; +import com.ql.util.express.DefaultContext; +import com.ql.util.express.ExpressRunner; + import java.util.HashMap; import java.util.Map; @@ -7,16 +11,23 @@ import java.util.Map; * 执行业务类 */ public class QlExpressTest { + private static ExpressRunner runner = new ExpressRunner(true, false); - public static void main(String[] args) { + public static void main(String[] args) throws Exception { QlExpress express = new QlExpress(); Map context = new HashMap<>(); context.put("a", 1); context.put("b", 2); - context.put("c", 3); - String formula = "IF(1=1,1,2)"; + String formula = "IF(a>b,a,b)"; + ExcelResult execute = express.execute(formula, context); + System.out.println(execute.getData()); - Object execute = express.execute(formula, context); + + DefaultContext context2 = new DefaultContext(); + context2.put("a", 1); + context2.put("b", 2); + Object data = runner.execute("if(a>b){a}else{b}", context2, null, true, false); + System.out.println(data.toString()); } } diff --git a/src/com/engine/salary/formlua/entity/standard/ExcelResult.java b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java index b70bc9b1d..c91dc89f5 100644 --- a/src/com/engine/salary/formlua/entity/standard/ExcelResult.java +++ b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java @@ -130,4 +130,20 @@ public class ExcelResult implements Serializable { public void setStatus(boolean status) { this.status = status; } + + @Override + public String toString() { + return "ExcelResult{" + + "express='" + express + '\'' + + ", expressContext=" + expressContext + + ", data=" + data + + ", boolData=" + boolData + + ", stringData='" + stringData + '\'' + + ", numberData=" + numberData + + ", status=" + status + + ", errorMsg='" + errorMsg + '\'' + + ", formulaId='" + formulaId + '\'' + + ", dataType='" + dataType + '\'' + + '}'; + } } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 5a5ce1842..b01c8d79c 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -360,7 +360,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); Map> map = new HashMap<>(); salaryAcctEmpResultMap.forEach((k, v) -> { - Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), SalaryAcctResultPO::getResultValue, (key1, key2) -> key2)); + Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), p -> Util.null2o(p.getResultValue()), (key1, key2) -> key2)); map.put(k, collect); }); @@ -814,7 +814,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); - Map employeeByIdMap = getSalaryEmployeeService(user).getEmployeeByIds(accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList())).stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername)); + Map employeeByIdMap = getSalaryEmployeeService(user).getEmployeeByIds(accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList())).stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, o -> Util.null2String(o.getUsername()))); // List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); // Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); From 007328476a13eff6febc819279bc4dbfd53c2f94 Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 1 Jun 2023 11:17:06 +0800 Subject: [PATCH 121/245] =?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=96=AA=E8=B5=84?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E5=88=97=E8=A1=A8=E5=B7=A5=E5=8F=B7=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/salaryacct/SalaryAcctEmployeeMapper.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index cc1ad66c2..f141c8728 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -174,6 +174,7 @@ AND tax_agent_id = #{param.taxAgentId} @@ -184,6 +185,9 @@ AND em.lastname LIKE '%'||#{param.employeeName}||'%' + + AND em.workcode like '%'||#{param.workcode}||'%' + AND em.departmentid IN @@ -251,6 +255,7 @@ AND tax_agent_id = #{param.taxAgentId} @@ -261,6 +266,9 @@ AND em.lastname LIKE '%'+#{param.employeeName}+'%' + + AND em.workcode like '%'+#{param.workcode}+'%' + AND em.departmentid IN @@ -485,6 +493,7 @@ AND t.tax_agent_id = #{param.taxAgentId} 0) or (param.positionIds != null and param.positionIds.size()>0) or (param.status != null and param.status.toString != 'ALL')"> @@ -644,6 +654,7 @@ AND t.tax_agent_id = #{param.taxAgentId} From 74c5b4f19f7dab1e0b8a06d52a1678621dea6715 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 1 Jun 2023 17:52:31 +0800 Subject: [PATCH 122/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE=20?= =?UTF-8?q?=E5=92=8C=20=E5=AD=97=E6=AE=B5=E7=AE=A1=E7=90=86=E7=9A=84?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SalaryItemBiz.java | 10 -- .../entity/salaryitem/bo/SalaryItemBO.java | 48 +++++++- .../salaryitem/dto/SalaryFieldListDTO.java | 4 + .../salaryitem/dto/SalaryItemFormDTO.java | 2 + .../salaryitem/dto/SalaryItemListDTO.java | 2 + .../salaryitem/dto/SalaryItemSobListDTO.java | 103 ++++++++++++++++++ .../mapper/salaryitem/SalaryItemMapper.java | 6 - .../mapper/salaryitem/SalaryItemMapper.xml | 12 +- .../service/impl/SalaryItemServiceImpl.java | 33 +++++- .../salary/web/SalarySobController.java | 4 +- .../wrapper/SalaryAcctRecordWrapper.java | 49 ++++----- .../salary/wrapper/SalaryArchiveWrapper.java | 1 - .../salary/wrapper/SalarySobItemWrapper.java | 30 +++-- 13 files changed, 238 insertions(+), 66 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java diff --git a/src/com/engine/salary/biz/SalaryItemBiz.java b/src/com/engine/salary/biz/SalaryItemBiz.java index b96f49665..f18611ff2 100644 --- a/src/com/engine/salary/biz/SalaryItemBiz.java +++ b/src/com/engine/salary/biz/SalaryItemBiz.java @@ -152,16 +152,6 @@ public class SalaryItemBiz { } } - public Integer getMaxItemSortedIndex(Integer useInEmployeeSalary) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - SalaryItemMapper mapper = sqlSession.getMapper(SalaryItemMapper.class); - return mapper.getMaxItemSortedIndex(useInEmployeeSalary); - } finally { - sqlSession.close(); - } - - } } diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index 06307b3c6..7066c4664 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -5,6 +5,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO; import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; +import com.engine.salary.entity.salaryitem.dto.SalaryItemSobListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; @@ -120,6 +121,50 @@ public class SalaryItemBO { ).collect(Collectors.toList()); } + /** + * 薪资项目po转换成薪资账套中薪资项目列表dto + * + * @param salaryItems 薪资项目po + * @param expressFormulas 公式详情 + * @return + */ + public static List convert2itemSobListDTO(Collection salaryItems, List expressFormulas, List sysSalaryItemPOS) { + if (CollectionUtils.isEmpty(salaryItems)) { + return Collections.emptyList(); + } + Map formulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula); + Map sysSalaryItemNameMap = SalaryEntityUtil.convert2Map(sysSalaryItemPOS, SysSalaryItemPO::getId, SysSalaryItemPO::getName); + return salaryItems.stream().map(salaryItemPO -> { + SalaryRoundingModeEnum salaryRoundingModeEnum = SalaryRoundingModeEnum.parseByValue(salaryItemPO.getRoundingMode()); + SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(salaryItemPO.getValueType()); + SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(salaryItemPO.getDataType()); + return SalaryItemSobListDTO.builder() + .id(salaryItemPO.getId()) + .code(salaryItemPO.getCode()) + .name(salaryItemPO.getName()) + .systemName(sysSalaryItemNameMap.getOrDefault(salaryItemPO.getSysSalaryItemId(), StringUtils.EMPTY)) + .useInEmployeeSalary(salaryItemPO.getUseInEmployeeSalary()) + .useDefault(salaryItemPO.getUseDefault()) + .roundingMode(Optional.ofNullable(salaryRoundingModeEnum) + .map(e -> SalaryI18nUtil.getI18nLabel(e.getLabelId(), e.getDefaultLabel())) + .orElse(StringUtils.EMPTY)) + .pattern(salaryItemPO.getPattern()) + .valueType(Optional.ofNullable(salaryValueTypeEnum) + .map(e -> SalaryI18nUtil.getI18nLabel(e.getLabelId(), e.getDefaultLabel())) + .orElse(StringUtils.EMPTY)) + .dataType(Optional.ofNullable(salaryDataTypeEnum) + .map(e -> SalaryI18nUtil.getI18nLabel(e.getLabelId(), e.getDefaultLabel())) + .orElse(StringUtils.EMPTY)) + .taxDeclarationColumn(buildTaxDeclarationColumn(salaryItemPO.getCode())) + .sortedIndex(salaryItemPO.getSortedIndex()) + .description(salaryItemPO.getDescription()) + .salaryItemType(salaryItemPO.getUseInEmployeeSalary() == 0 ? "薪资项目" : "档案字段") + .build(); + } + ).collect(Collectors.toList()); + } + + /** * 转换成薪资项目详情dto * @@ -142,7 +187,8 @@ public class SalaryItemBO { .setDescription(salaryItemPO.getDescription()) .setCanEdit(salaryItemPO.getCanEdit()) .setTaxAgentIds(salaryItemPO.getTaxAgentIds()) - .setSharedType(salaryItemPO.getSharedType()); + .setSharedType(salaryItemPO.getSharedType()) + .setSortedIndex(salaryItemPO.getSortedIndex()); } /** diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java index c392e0d62..96c00924a 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java @@ -73,6 +73,10 @@ public class SalaryFieldListDTO { //是否可以删除 private Boolean canDelete; + @SalaryTableColumn(text = "显示顺序", width = "10%", column = "sortedIndex") + @TableTitle(title = "显示顺序",dataIndex = "sortedIndex",key = "sortedIndex") + private String sortedIndex; + @SalaryTableColumn(text = "操作", width = "20%", column = "operate") private String operate; } diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java index 107d9266f..95903867d 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java @@ -85,4 +85,6 @@ public class SalaryItemFormDTO { private Integer sharedType; private String taxAgentIds; + + private Integer sortedIndex; } diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java index 458985cdd..510a75f18 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java @@ -96,6 +96,8 @@ public class SalaryItemListDTO { private Boolean canDelete; //排序 + @SalaryTableColumn(text = "显示顺序", width = "10%", column = "sortedIndex") + @TableTitle(title = "显示顺序",dataIndex = "sortedIndex",key = "sortedIndex") private Integer sortedIndex; @SalaryTableColumn(text = "操作", width = "20%", column = "operate") diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java new file mode 100644 index 000000000..ef88c307a --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java @@ -0,0 +1,103 @@ +package com.engine.salary.entity.salaryitem.dto; + +import com.engine.salary.annotation.SalaryTableColumn; +import com.engine.salary.annotation.TableTitle; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +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; + +/** + * @author Harryxzy + * @date 2023/06/01 17:05 + * @description 薪资账套薪资项目列表 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryItemSobListDTO { + + @JsonSerialize(using = ToStringSerializer.class) + @SalaryTableColumn(column = "id", display = false) + private Long id; + + @SalaryTableColumn(text = "名称", width = "10%", column = "name") + @TableTitle(title = "名称",dataIndex = "name",key = "name") + private String name; + private String code; + + @SalaryTableColumn(text = "系统名", width = "10%", column = "systemName") + @TableTitle(title = "系统名",dataIndex = "systemName",key = "systemName") + private String systemName; + + //薪资档案引用 +// @SalaryTableColumn(text = "薪资档案引用", width = "10%", column = "useInEmployeeSalary") +// @TableTitle(title = "薪资档案引用",dataIndex = "useInEmployeeSalary",key = "useInEmployeeSalary") + private Integer useInEmployeeSalary; + + // 薪资项目类型 + @SalaryTableColumn(text = "项目类型", width = "10%", column = "salaryItemType") + @TableTitle(title = "项目类型",dataIndex = "salaryItemType",key = "salaryItemType") + private String salaryItemType; + + //默认使用 + @SalaryTableColumn(text = "默认使用", width = "10%", column = "useDefault") + @TableTitle(title = "默认使用",dataIndex = "useDefault",key = "useDefault") + private Integer useDefault; + + //进位规则 + @SalaryTableColumn(text = "进位规则", width = "10%", column = "roundingMode",transmethod = "com.engine.salary.transmethod.TransMethod.roundingMode") + @TableTitle(title = "进位规则",dataIndex = "roundingMode",key = "roundingMode") + private String roundingMode; + + //保留小数位 + @SalaryTableColumn(text = "保留小数位", width = "10%", column = "pattern") + @TableTitle(title = "保留小数位",dataIndex = "pattern",key = "pattern") + private Integer pattern; + + //取值方式 + @SalaryTableColumn(text = "取值方式", width = "10%", column = "valueType",transmethod = "com.engine.salary.transmethod.TransMethod.datasource") + @TableTitle(title = "取值方式",dataIndex = "valueType",key = "valueType") + private String valueType; + + /** + * @see SalaryDataTypeEnum + */ + @SalaryTableColumn(text = "字段类型", width = "10%", column = "dataType",transmethod = "com.engine.salary.transmethod.TransMethod.dataType") + @TableTitle(title = "字段类型",dataIndex = "dataType",key = "dataType") + private String dataType; + + //公式id + private Long formulaId; + + //公式内容 + private String formulaContent; + + @SalaryTableColumn(text = "个税申报表对应字段", width = "10%", column = "taxDeclarationColumn") + @TableTitle(title = "个税申报表对应字段",dataIndex = "taxDeclarationColumn",key = "taxDeclarationColumn") + private String taxDeclarationColumn; + + //备注 + @SalaryTableColumn(text = "备注", width = "10%", column = "description") + @TableTitle(title = "备注",dataIndex = "description",key = "description") + private String description; + + + //是否可以编辑 + private Boolean canEdit; + + //是否可以删除 + private Boolean canDelete; + + //排序 + private Integer sortedIndex; + + + @SalaryTableColumn(text = "操作", width = "20%", column = "operate") + private String operate; + +} diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java index 46b7bb83c..52ee57b51 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java @@ -67,11 +67,5 @@ public interface SalaryItemMapper { void batchUpdateSortedIndex(@Param("collection")List salaryItemPOS); - /** - * 获取薪资项目的最大sortedIndex - * @param useInEmployeeSalary - * @return - */ - Integer getMaxItemSortedIndex(Integer useInEmployeeSalary); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index 9bac11881..59e4d3e1b 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -59,7 +59,7 @@ FROM hrsa_salary_item t WHERE delete_type = 0 - ORDER BY sorted_index DESC + ORDER BY sorted_index DESC, id DESC @@ -139,7 +139,7 @@ #{id} - ORDER BY sorted_index DESC + ORDER BY sorted_index DESC, id DESC @@ -349,6 +349,7 @@ tax_agent_ids=#{taxAgentIds}, + sorted_index=#{sortedIndex}, WHERE id = #{id} AND delete_type = 0 @@ -461,7 +462,7 @@ WHERE delete_type = 0 - ORDER BY sorted_index DESC + ORDER BY sorted_index DESC, id DESC - diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index cf5e89b4d..c2c89f31b 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -137,7 +137,34 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService .stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); salaryItemPOS = salaryItemPOS.stream() .filter(po -> filterInRange(userTaxAgentIds, po)) - .sorted(Comparator.comparing(SalaryItemPO::getSystemType)) + .sorted(new Comparator() { + @Override + public int compare(SalaryItemPO o1, SalaryItemPO o2) { + if(o1 == null) + return 1; + if(o2 == null) + return -1; + if(o1 == null && o2 == null) + return 0; + if(o1.getSortedIndex() == null && o2.getSortedIndex() == null){ + Integer systemType1=o1.getSystemType(); + Integer systemType2=o2.getSystemType(); + if(systemType1 == null) + systemType1=0; + if(systemType2 == null) + systemType2=0; + return systemType1.compareTo(systemType2); + }else{ + Integer sortedIndex1=o1.getSortedIndex(); + Integer sortedIndex2=o2.getSortedIndex(); + if(sortedIndex1 == null) + sortedIndex1=0; + if(sortedIndex2 == null) + sortedIndex2=0; + return sortedIndex2.compareTo(sortedIndex1); + } + } + }) .collect(Collectors.toList()); } else { //普通用户 @@ -180,9 +207,6 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService if (CollectionUtils.isNotEmpty(sysSalaryItemPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98328, "自定义薪资项目的名称不能和系统薪资项目的名称重名")); } - // 保存薪资项目 - Integer maxItemSortedIndex = salaryItemBiz.getMaxItemSortedIndex(saveParam.getUseInEmployeeSalary()); - saveParam.setSortedIndex(maxItemSortedIndex+1); SalaryItemPO salaryItemPO = SalaryItemBO.convert2SalaryItemPO(saveParam, (long) user.getUID()); salaryItemBiz.insert(salaryItemPO); // todo 记录日志 @@ -235,6 +259,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService newSalaryItemPO.setUpdateTime(new Date()); newSalaryItemPO.setSharedType(saveParam.getSharedType()); newSalaryItemPO.setTaxAgentIds(saveParam.getTaxAgentIds()); + newSalaryItemPO.setSortedIndex(saveParam.getSortedIndex()); salaryItemBiz.updateById(newSalaryItemPO); //改名后更新公式 diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index ad3bd6423..403406ef3 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -1,7 +1,7 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; -import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; +import com.engine.salary.entity.salaryitem.dto.SalaryItemSobListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salarysob.dto.*; import com.engine.salary.entity.salarysob.param.*; @@ -281,7 +281,7 @@ public class SalarySobController { @Produces(MediaType.APPLICATION_JSON) public String listSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemSearchParam queryParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult >(user).run(getSalarySobItemWrapper(user)::listPage4SalaryItem, queryParam); + return new ResponseResult >(user).run(getSalarySobItemWrapper(user)::listPage4SalaryItem, queryParam); } diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index 893c95dd2..9c17eaf78 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -11,8 +11,6 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; -import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; -import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.exception.SalaryRunTimeException; @@ -29,7 +27,6 @@ import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -74,8 +71,6 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord SalarySobUtil.handleEmployeeStatusHistory(); // 处理工资单发放历史数据 getSalarySendService(user).handleHistory(); - // 处理历史数据给薪资项目都增加个默认排序 - generateSalaryItemSortedIndex(); // 查询薪资核算记录(分页) PageInfo page = getSalaryAcctRecordService(user).listPageByParam(queryParam); PageInfo dtoPage = new PageInfo(SalaryAcctRecordListDTO.class); @@ -127,28 +122,28 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord * @author Harryxzy * @date 2023/5/29 14:37 */ - private void generateSalaryItemSortedIndex() { - // 查询所有薪资项目 - List salaryItemList = getSalaryItemService(user).listByParamOrderById(SalaryItemSearchParam.builder().build()); - Optional needGenerate = salaryItemList.stream().filter(item -> item.getSortedIndex() == null).findFirst(); - if(needGenerate.isPresent()){ - Map> salaryItemMap = SalaryEntityUtil.group2Map(salaryItemList, SalaryItemPO::getUseInEmployeeSalary); - for(Map.Entry> entry : salaryItemMap.entrySet()){ - List values = entry.getValue(); - if(CollectionUtils.isNotEmpty(values)){ - // 将系统薪资项目放到最后 - values = values.stream() - .sorted(Comparator.comparing(SalaryItemPO::getSystemType)) - .collect(Collectors.toList()); - // 添加默认sortedIndex - AtomicInteger index = new AtomicInteger(values.size()); - values.stream().forEach(value -> value.setSortedIndex(index.getAndDecrement())); - // 保存排序 - getSalaryItemService(user).batchUpdateSortedIndex(values); - } - } - } - } +// private void generateSalaryItemSortedIndex() { +// // 查询所有薪资项目 +// List salaryItemList = getSalaryItemService(user).listByParamOrderById(SalaryItemSearchParam.builder().build()); +// Optional needGenerate = salaryItemList.stream().filter(item -> item.getSortedIndex() == null).findFirst(); +// if(needGenerate.isPresent()){ +// Map> salaryItemMap = SalaryEntityUtil.group2Map(salaryItemList, SalaryItemPO::getUseInEmployeeSalary); +// for(Map.Entry> entry : salaryItemMap.entrySet()){ +// List values = entry.getValue(); +// if(CollectionUtils.isNotEmpty(values)){ +// // 将系统薪资项目放到最后 +// values = values.stream() +// .sorted(Comparator.comparing(SalaryItemPO::getSystemType)) +// .collect(Collectors.toList()); +// // 添加默认sortedIndex +// AtomicInteger index = new AtomicInteger(values.size()); +// values.stream().forEach(value -> value.setSortedIndex(index.getAndDecrement())); +// // 保存排序 +// getSalaryItemService(user).batchUpdateSortedIndex(values); +// } +// } +// } +// } /** * 薪资核算记录详情 diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index e03ec72bd..8cb70e415 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -138,7 +138,6 @@ public class SalaryArchiveWrapper extends Service { .stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); salaryItems = salaryItems.stream() .filter(po -> getSalaryItemService(user).filterInRange(userTaxAgentIds, po)) - .sorted((Comparator.comparing(SalaryItemPO::getSortedIndex))) .collect(Collectors.toList()); diff --git a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java index e391a433b..2400f224b 100644 --- a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java @@ -6,7 +6,7 @@ import com.engine.salary.annotation.SalaryFormulaVar; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; -import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; +import com.engine.salary.entity.salaryitem.dto.SalaryItemSobListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; @@ -19,6 +19,7 @@ import com.engine.salary.service.impl.*; 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.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import weaver.hrm.User; @@ -68,8 +69,13 @@ public class SalarySobItemWrapper extends Service { * @param queryParam 列表查询条件 * @return */ - public PageInfo listPage4SalaryItem(SalaryItemSearchParam queryParam) { + public PageInfo listPage4SalaryItem(SalaryItemSearchParam queryParam) { + Integer searchPageSize = queryParam.getPageSize(); + Integer searchCurrent = queryParam.getCurrent(); + // 分页查询薪资项目 + queryParam.setPageSize(10000000); + queryParam.setCurrent(1); PageInfo page = getSalaryItemService(user).listPageByParam(queryParam); List salaryItemList = page.getList(); @@ -80,11 +86,22 @@ public class SalarySobItemWrapper extends Service { salaryItemList = salaryItemList.stream() .filter(po -> getSalaryItemService(user).filterInRange(taxAgentIds, po)) .collect(Collectors.toList()); + + // 薪资项目排序:薪资项目放在前面(首先按照设置的排序,没有设置按照id倒序,系统薪资项目放在最后),档案字段放在后面 + salaryItemList = salaryItemList.stream() + .sorted(new Comparator() { + @Override + public int compare(SalaryItemPO o1, SalaryItemPO o2) { + return Integer.compare(o1.getUseInEmployeeSalary(),o2.getUseInEmployeeSalary()); + } + }) + .collect(Collectors.toList()); + SalaryPageUtil.buildPage(searchCurrent, searchPageSize, salaryItemList); //最终返回的分页对象 - PageInfo dtoPage = new PageInfo<>(SalaryItemListDTO.class); - dtoPage.setPageSize(page.getPageSize()); - dtoPage.setPageNum(page.getPageNum()); + PageInfo dtoPage = new PageInfo<>(SalaryItemSobListDTO.class); + dtoPage.setPageSize(searchPageSize); + dtoPage.setPageNum(searchCurrent); dtoPage.setTotal(page.getTotal()); if (CollectionUtils.isNotEmpty(salaryItemList)) { // 查询公式 @@ -94,12 +111,11 @@ public class SalarySobItemWrapper extends Service { Set sysSalaryItemIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getSysSalaryItemId); List sysSalaryItemPOS = getSysSalaryItemService(user).listByIds(sysSalaryItemIds); // 转换成薪资项目列表dto - dtoPage.setList(SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas, sysSalaryItemPOS)); + dtoPage.setList(SalaryItemBO.convert2itemSobListDTO(salaryItemList, expressFormulas, sysSalaryItemPOS)); } return dtoPage; } - /** * 获取薪资账套的薪资项目详情 * From 0da2bfa55a676a4f74b6a8115ac0745ee4aed021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 2 Jun 2023 14:38:56 +0800 Subject: [PATCH 123/245] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryBill/bo/SalaryBillBO.java | 109 +++++++++--------- .../service/impl/SalaryBillServiceImpl.java | 6 +- 2 files changed, 61 insertions(+), 54 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 690c7fcde..d71419ae8 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -20,6 +20,8 @@ import org.slf4j.LoggerFactory; import weaver.common.MessageUtil; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.time.LocalDateTime; import java.util.*; @@ -89,67 +91,68 @@ public class SalaryBillBO { return employeeFieldNameMap; } -// /** -// * 构建工资单中的人员信息 -// * -// * @param employeeInformation -// * @param simpleEmployee -// * @param employeeField -// */ -// public static void buildEmployeeInfo(SalaryTemplateSalaryItemSetListDTO employeeInformation, SimpleEmployee simpleEmployee, Map employeeField) { -// if (employeeInformation == null || simpleEmployee == null) { -// return; -// } -// if (org.apache.commons.collections.CollectionUtils.isNotEmpty(employeeInformation.getItems())) { -// //获取员工信息的字段名和中文描述的map关系 -// SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId()) -// .departmentName(simpleEmployee.getDepartment() == null ? "" : simpleEmployee.getDepartment().getName()) -// .email(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()) + /** + * 构建工资单中的人员信息 + * + * @param employeeInformation + * @param simpleEmployee + * @param employeeField + */ + public static void buildEmployeeInfo(SalaryTemplateSalaryItemSetListDTO employeeInformation, DataCollectionEmployee simpleEmployee, Map employeeField) { + if (employeeInformation == null || simpleEmployee == null) { + return; + } + if (org.apache.commons.collections.CollectionUtils.isNotEmpty(employeeInformation.getItems())) { + //获取员工信息的字段名和中文描述的map关系 + SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId()) + .taxAgentName("axx") + .departmentName(simpleEmployee.getDepartmentName()) + .email(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()) // .gradeName(simpleEmployee.getGrade() == null ? "" : simpleEmployee.getGrade().getName()) // .hireDate(SalaryDateUtil.getFormatLocalDate(simpleEmployee.getHiredate())) // .sex(simpleEmployee.getSex() == null ? "" : simpleEmployee.getSex().getDescription()) -// .mobile(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()) -// .positionName(simpleEmployee.getPosition() == null ? "" : simpleEmployee.getPosition().getName()) + .mobile(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()) + .jobtitleName(simpleEmployee.getJobtitleName()) // .status(StringUtils.isEmpty(simpleEmployee.getPersonnelStatus()) ? "" : simpleEmployee.getPersonnelStatus()) -// .telephone(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()) -// .username(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()) -// .jobNum(simpleEmployee.getJobNum() == null ? "" : simpleEmployee.getJobNum()) -// .build(); -// List items = employeeInformation.getItems(); -// // 1.SalaryAcctResultBO.buildEmployeeFieldName()的取法 -//// Set> entries = employeeField.entrySet(); -//// for (SalaryTemplateSalaryItemListDTO e : items) { -//// Optional> entry = entries.stream().filter(f -> Objects.equals(e.getName(), f.getValue())).findFirst(); -//// if (entry.isPresent()) { -//// String key = entry.get().getKey(); -//// if (org.apache.commons.lang3.StringUtils.isNotBlank(key)) { -//// String getter = "get" + key.substring(0, 1).toUpperCase() + key.substring(1); -//// try { -//// Method method = salaryFormulaEmployeeDTO.getClass().getMethod(getter); -//// Object invoke = method.invoke(salaryFormulaEmployeeDTO); -//// e.setSalaryItemValue((String) invoke); -//// } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { -//// log.error("no such method", e); -//// } -//// } -//// } -//// } -// // 2.SalaryBillBO.buildEmployeeFieldName() + .telephone(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()) + .username(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()) + .workcode(simpleEmployee.getWorkcode()) + .build(); + List items = employeeInformation.getItems(); + // 1.SalaryAcctResultBO.buildEmployeeFieldName()的取法 +// Set> entries = employeeField.entrySet(); // for (SalaryTemplateSalaryItemListDTO e : items) { -// String employeeFieldName = employeeField.get(e.getName()); -// if (!StringUtils.isEmpty(employeeFieldName)) { -// String getter = "get" + employeeFieldName.substring(0, 1).toUpperCase() + employeeFieldName.substring(1); -// try { -// Method method = salaryFormulaEmployeeDTO.getClass().getMethod(getter); -// Object invoke = method.invoke(salaryFormulaEmployeeDTO); -// e.setSalaryItemValue((String) invoke); -// } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { -// log.error("no such method", e); +// Optional> entry = entries.stream().filter(f -> Objects.equals(e.getName(), f.getValue())).findFirst(); +// if (entry.isPresent()) { +// String key = entry.get().getKey(); +// if (org.apache.commons.lang3.StringUtils.isNotBlank(key)) { +// String getter = "get" + key.substring(0, 1).toUpperCase() + key.substring(1); +// try { +// Method method = salaryFormulaEmployeeDTO.getClass().getMethod(getter); +// Object invoke = method.invoke(salaryFormulaEmployeeDTO); +// e.setSalaryItemValue((String) invoke); +// } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { +// log.error("no such method", e); +// } // } // } // } -// } -// } + // 2.SalaryBillBO.buildEmployeeFieldName() + for (SalaryTemplateSalaryItemListDTO e : items) { + String employeeFieldName = employeeField.get(e.getName()); + if (!StringUtils.isEmpty(employeeFieldName)) { + String getter = "get" + employeeFieldName.substring(0, 1).toUpperCase() + employeeFieldName.substring(1); + try { + Method method = salaryFormulaEmployeeDTO.getClass().getMethod(getter); + Object invoke = method.invoke(salaryFormulaEmployeeDTO); + e.setSalaryItemValue((String) invoke); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("no such method", e); + } + } + } + } + } /** * 获取工资单标题 diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index b4e1f8fd4..cfce8e6a3 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -411,6 +411,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService enableSendList.forEach(e -> { // 构建发送消息 // SendMessageEntity message = SalaryBillBO.buildSendMessage(e, allEmployeeMap, salaryBillSendParam); + SalaryBillBO.buildEmployeeInfo(salaryBillSendParam.getEmployeeInformation(), allEmployeeMap.get(e.get("employeeId").toString()), salaryBillSendParam.getEmployeeField()); SalaryBillBO.sendEmail(e, allEmployeeMap, salaryBillSendParam); /** 发送工资单 **********************************************************/ // WeaResult sendResult = asyncSystemMessageRest.sendMsg(message); @@ -445,8 +446,11 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * @return */ private Map getEmployeeWholeInfo(List> enableSendList) { + + List ids = enableSendList.stream().map(e -> Long.valueOf(e.get("employeeId").toString())).collect(Collectors.toList()); + // 获取所有人员信息 - List simpleEmployees = getSalaryEmployeeService(user).listAll(); + List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIdsAll(ids); return SalaryEntityUtil.convert2Map(simpleEmployees, e -> e.getEmployeeId() + ""); } // /** 工资单发放 end **********************************************************************/ From d53d7a33d7a6c9b1286fcf576df5a4b3624f2591 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 2 Jun 2023 14:47:15 +0800 Subject: [PATCH 124/245] =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E5=A4=9A=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctResultServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index bcab4e6db..2687a121a 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -897,9 +897,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return; } // 查询薪资核算结果 - List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployees, SalaryAcctEmployeePO::getId,Collectors.toList()); - List salaryAcctResultValues = this.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); - Map salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); +// List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployees, SalaryAcctEmployeePO::getId,Collectors.toList()); +// List salaryAcctResultValues = this.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); +// Map salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); // 值可以锁定的薪资项目 // Set salaryItemIds = canLockSalaryItemIds(salaryAcctRecord.getSalarySobId()); // if (Objects.nonNull(updateParam.getSalaryItemId())) { From 52b592dd7e7627a5937269d8d3a84a4598875780 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 2 Jun 2023 15:06:07 +0800 Subject: [PATCH 125/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8A=A0=E9=94=81=E7=9A=84=E5=80=BC=E6=97=B6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=9D=A1=E4=BB=B6=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E9=80=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/SalaryAcctResultService.java | 2 +- .../salary/service/impl/SalaryAcctResultServiceImpl.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index b1f3d35bd..293d28c56 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -184,7 +184,7 @@ public interface SalaryAcctResultService { void reCalc(Long id); /** - * 根据薪资核算记录的id、个税扣缴义务人查询薪资核算结果 + * 根据薪资核算记录的id、薪资项目id查询薪资核算结果 * * @param salaryAcctRecordIds 薪资核算记录的id * @param salaryItemIds 薪资项目id diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 2687a121a..e4ea91206 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -690,7 +690,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); Map acctResults = new HashMap<>(); if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { - List acctResultPOS = listBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); + List acctResultPOS = listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singleton(calculateParam.getSalaryAcctRecordId()), lockSalaryItemIds); +// List acctResultPOS = listBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); acctResults = Optional.ofNullable(acctResultPOS) .orElse(new ArrayList<>()) .stream() From 1294e86c8c38b9c9af2eeff8e3da091a265eeedf Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 2 Jun 2023 15:25:46 +0800 Subject: [PATCH 126/245] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=94=81=E5=AE=9A=E6=B7=BB=E5=8A=A0=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctExcelServiceImpl.java | 16 ++++--- .../impl/SalaryAcctResultServiceImpl.java | 42 ++++++++++++------- .../sys/constant/SalarySysConstant.java | 6 +++ 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 2600bb01d..2877350c7 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -31,6 +31,7 @@ import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.enums.OpenEnum; import com.engine.salary.sys.service.SalarySysConfService; @@ -1080,12 +1081,15 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); } } - // 导入的列都自动锁定 - SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() - .salaryItemIds(excelSalaryItemIds) - .salaryAcctRecordId(param.getSalaryAcctRecordId()) - .lockStatus(LockStatusEnum.LOCK).build(); - getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); + SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); + if(autoLock != null){ + // 导入的列都自动锁定 + SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() + .salaryItemIds(excelSalaryItemIds) + .salaryAcctRecordId(param.getSalaryAcctRecordId()) + .lockStatus(LockStatusEnum.LOCK).build(); + getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); + } apidatas.put("successCount", successCount); apidatas.put("errorCount", failCount); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index e4ea91206..c6b0979df 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -30,6 +30,10 @@ import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctResultMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.constant.SalarySysConstant; +import com.engine.salary.sys.entity.po.SalarySysConfPO; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -159,6 +163,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalaryAcctResultLogServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; @@ -532,23 +540,25 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe encryptUtil.decryptList(salaryAcctResultPOSOld, SalaryAcctResultPO.class); // 保存参数转换成薪资核算结果po List salaryAcctResultPOS = SalaryAcctResultBO.convert2PO(salaryAcctResultPOSOld, saveParam, salaryAcctEmployeePO, (long) user.getUID()); - // 对比核算结果提取修改了哪些薪资项目 - Set needLockItems = new HashSet<>(); - Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); - salaryAcctResultPOS.stream().forEach(PO -> { - String oldValue = Optional.ofNullable(oldResutMap.get(PO.getSalaryItemId())).map(SalaryAcctResultPO::getResultValue).orElse(""); - if(!StringUtils.equals(oldValue,PO.getResultValue())){ - needLockItems.add(PO.getSalaryItemId()); - } - }); - - // 编辑的列都自动锁定 - SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() - .salaryItemIds(needLockItems) - .salaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()) - .lockStatus(LockStatusEnum.LOCK).build(); - getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); + SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); + if(autoLock != null){ + // 对比核算结果提取修改了哪些薪资项目 + Set needLockItems = new HashSet<>(); + Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); + salaryAcctResultPOS.stream().forEach(PO -> { + String oldValue = Optional.ofNullable(oldResutMap.get(PO.getSalaryItemId())).map(SalaryAcctResultPO::getResultValue).orElse(""); + if(!StringUtils.equals(oldValue,PO.getResultValue())){ + needLockItems.add(PO.getSalaryItemId()); + } + }); + // 编辑的列都自动锁定 + SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() + .salaryItemIds(needLockItems) + .salaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()) + .lockStatus(LockStatusEnum.LOCK).build(); + getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); + } // SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctEmployeePO.getSalaryAcctRecordId()); // 若保存编辑时一同传已发补发,则删除以下代码 // if(byId.getBackCalcStatus() != null && Objects.equals(byId.getBackCalcStatus(),1)){ diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index 79dab2119..082a9568f 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -55,4 +55,10 @@ public class SalarySysConstant { * 需要申报功能 */ public static final String TAX_DECLARATION_FUNCTION = "taxDeclarationFunction"; + + /** + * 是否需要导入、编辑项目自动锁定conf_key + */ + public static final String EDIT_IMPORT_AUTO_LOCK = "EditImportAutoLock"; + } From 91e3b335dda815fda992c3b42b1139360c20ccdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 5 Jun 2023 13:35:17 +0800 Subject: [PATCH 127/245] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E9=80=9A?= =?UTF-8?q?=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/CustomSalarySend.java | 32 +++++++ .../entity/salaryBill/bo/SalaryBillBO.java | 54 ++++++------ .../salaryBill/dto/SalaryBillSendDTO.java | 7 +- .../salaryBill/po/SalaryTemplatePO.java | 13 ++- .../enums/salarybill/MessageChannelEnum.java | 73 ++++++++++++++++ .../salarybill/SalaryTemplateMapper.xml | 18 ++++ .../service/impl/SalaryBillServiceImpl.java | 87 ++++++++----------- .../service/impl/SalarySendServiceImpl.java | 68 +++------------ .../salary/wrapper/SalarySendWrapper.java | 3 +- .../wrapper/proxy/SalarySendWrapperProxy.java | 34 ++++++++ 10 files changed, 251 insertions(+), 138 deletions(-) create mode 100644 src/com/customization/salary/CustomSalarySend.java create mode 100644 src/com/engine/salary/enums/salarybill/MessageChannelEnum.java create mode 100644 src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java diff --git a/src/com/customization/salary/CustomSalarySend.java b/src/com/customization/salary/CustomSalarySend.java new file mode 100644 index 000000000..4570f5d9c --- /dev/null +++ b/src/com/customization/salary/CustomSalarySend.java @@ -0,0 +1,32 @@ +package com.customization.salary; + +import com.engine.core.cfg.annotation.ServiceDynamicProxy; +import com.engine.core.impl.aop.AbstractServiceProxy; +import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; +import com.engine.salary.entity.salaryBill.param.SalarySendWithdrawParam; +import com.engine.salary.wrapper.SalarySendWrapper; +import com.engine.salary.wrapper.proxy.SalarySendWrapperProxy; +import weaver.general.BaseBean; + +import java.util.Map; + +@ServiceDynamicProxy(target = SalarySendWrapper.class, desc = "薪资核算") +public class CustomSalarySend extends AbstractServiceProxy implements SalarySendWrapperProxy { + @Override + public Map grant(SalarySendGrantParam queryParam) { + BaseBean baseBean = new BaseBean(); + baseBean.writeLog("拦截工资单发送方法..."); + + //todo do some thing + + Object o = executeMethod(queryParam); + + //todo do some thing + return (Map)o; + } + + @Override + public Map withdraw(SalarySendWithdrawParam queryParam) { + return null; + } +} diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index d71419ae8..553f67d16 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -7,7 +7,9 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemListDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO; +import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; +import com.engine.salary.enums.salarybill.MessageChannelEnum; import com.engine.salary.enums.salarybill.SalaryTemplateTextContentPositionEnum; import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum; import com.engine.salary.util.SalaryDateUtil; @@ -94,18 +96,20 @@ public class SalaryBillBO { /** * 构建工资单中的人员信息 * - * @param employeeInformation * @param simpleEmployee - * @param employeeField */ - public static void buildEmployeeInfo(SalaryTemplateSalaryItemSetListDTO employeeInformation, DataCollectionEmployee simpleEmployee, Map employeeField) { + public static void buildEmployeeInfo(SalaryBillSendDTO salaryBillSendParam, DataCollectionEmployee simpleEmployee) { + + SalaryTemplateSalaryItemSetListDTO employeeInformation = salaryBillSendParam.getEmployeeInformation(); + Map employeeField = salaryBillSendParam.getEmployeeField(); + if (employeeInformation == null || simpleEmployee == null) { return; } if (org.apache.commons.collections.CollectionUtils.isNotEmpty(employeeInformation.getItems())) { //获取员工信息的字段名和中文描述的map关系 SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId()) - .taxAgentName("axx") + .taxAgentName(salaryBillSendParam.getTaxAgentName()) .departmentName(simpleEmployee.getDepartmentName()) .email(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()) // .gradeName(simpleEmployee.getGrade() == null ? "" : simpleEmployee.getGrade().getName()) @@ -200,7 +204,7 @@ public class SalaryBillBO { // 消息接收者 String receivers = Optional.ofNullable(e.get("email")).orElse("").toString(); String emailContent = SalaryBillBO.buildEmailContent(e, salaryBillSendParam); - MessageUtil.sendEmail(receivers,salaryBillSendParam.getText(),emailContent); + MessageUtil.sendEmail(receivers, salaryBillSendParam.getText(), emailContent); } // /** @@ -251,26 +255,26 @@ public class SalaryBillBO { // } // return user; // } -// -// /** -// * 构建发送通道 -// * -// * @param salaryTemplate -// * @return -// */ -// public static Set buildSendChannels(SalaryTemplatePO salaryTemplate) { -// Set channels = new HashSet<>(); -// if (salaryTemplate.getEmailStatus() != null && salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue())) { -// channels.add(MessageChannelEnum.EMAIL); -// } -// if (salaryTemplate.getImStatus() != null && salaryTemplate.getImStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue())) { -// channels.add(MessageChannelEnum.IM); -// } -// if (salaryTemplate.getCloudBridgeStatus() != null && salaryTemplate.getCloudBridgeStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue())) { -// channels.add(MessageChannelEnum.CLOUD_BRIDGE); -// } -// return channels; -// } + + /** + * 构建发送通道 + * + * @param salaryTemplate + * @return + */ + public static Set buildSendChannels(SalaryTemplatePO salaryTemplate) { + Set channels = new HashSet<>(); + if (salaryTemplate.getMsgStatus() == null || salaryTemplate.getMsgStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue())) { + channels.add(MessageChannelEnum.MSG); + } + if (salaryTemplate.getEmailStatus() != null && salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()) && MessageUtil.checkSendEmail()) { + channels.add(MessageChannelEnum.EMAIL); + } + if (salaryTemplate.getSmsStatus() != null && salaryTemplate.getSmsStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()) && MessageUtil.checkSendSMS()) { + channels.add(MessageChannelEnum.SMS); + } + return channels; + } // // /** // * 构建实体 diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java index 39403fb18..6e246f13d 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java @@ -2,6 +2,7 @@ package com.engine.salary.entity.salaryBill.dto; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import com.engine.salary.enums.salarybill.MessageChannelEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -36,7 +37,7 @@ public class SalaryBillSendDTO { private String entityName; @ApiModelProperty("发送通道") - private Set sendChannels; + private Set sendChannels; @ApiModelProperty("发送者") private User sendUser; @@ -50,8 +51,8 @@ public class SalaryBillSendDTO { @ApiModelProperty("云桥工资单消息图") private String picUrl; - @ApiModelProperty("租户名") - private String tenantName; + @ApiModelProperty("扣缴义务人名称") + private String taxAgentName; @ApiModelProperty("工资单模板-薪资项目设置") private List salaryItemSetList; diff --git a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java index de19e6af6..2cfa80624 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java @@ -47,19 +47,26 @@ public class SalaryTemplatePO { private String description; /** - * 邮箱开启状态。0:关、1:开 + * 消息中心开启状态。0:关、1:开 ,默认开启 + */ + private Integer msgStatus; + + /** + * 邮箱开启状态。0:关、1:开,默认关闭 */ private Integer emailStatus; + /** * 发送地址:公共邮箱账号id */ private Long sendEmailId; + /** - * 消息中心开启状态。0:关、1:开 + * 短信开启状态。0:关、1:开,默认关闭 */ - private Integer msgStatus; + private Integer smsStatus; /** * 主题 diff --git a/src/com/engine/salary/enums/salarybill/MessageChannelEnum.java b/src/com/engine/salary/enums/salarybill/MessageChannelEnum.java new file mode 100644 index 000000000..164d0e168 --- /dev/null +++ b/src/com/engine/salary/enums/salarybill/MessageChannelEnum.java @@ -0,0 +1,73 @@ +package com.engine.salary.enums.salarybill; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Arrays; + +/** + * 消息通道 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum MessageChannelEnum implements BaseEnum { + + MSG(0, "系统消息", 93212), + EMAIL(1, "邮件", 93286), + SMS(2, "短信", 93287); + + private int value; + + private String defaultLabel; + + private int labelId; + + MessageChannelEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + public static String getDefaultLabelByValue(Integer value) { + if (value == null) { + return ""; + } + MessageChannelEnum[] enumAry = MessageChannelEnum.values(); + for(int i = 0; i < Arrays.asList(enumAry).size(); i++){ + if (Integer.valueOf(enumAry[i].getValue()).equals(value)) { + return enumAry[i].getDefaultLabel(); + } + } + return ""; + } + + public static String getNameByValue(Integer value) { + if (value == null) { + return ""; + } + MessageChannelEnum[] enumAry = MessageChannelEnum.values(); + for(int i = 0; i < Arrays.asList(enumAry).size(); i++){ + if (Integer.valueOf(enumAry[i].getValue()).equals(value)) { + return enumAry[i].name(); + } + } + return ""; + } +} diff --git a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml index 0c103ca79..580cdc5b8 100644 --- a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml @@ -9,6 +9,7 @@ + @@ -37,6 +38,7 @@ , t.use_type , t.description , t.email_status + , t.sms_status , t.send_email_id , t.msg_status , t.theme @@ -61,6 +63,7 @@ use_type, description, email_status, + sms_status, send_email_id, msg_status, theme, @@ -352,6 +355,9 @@ email_status=#{emailStatus}, + + sms_status=#{smsStatus}, + send_email_id=#{sendEmailId}, @@ -433,6 +439,9 @@ msg_status, + + sms_status, + theme, @@ -504,6 +513,9 @@ #{msgStatus}, + + #{smsStatus}, + #{theme}, @@ -585,6 +597,9 @@ msg_status, + + sms_status, + theme, @@ -656,6 +671,9 @@ #{msgStatus}, + + #{smsStatus}, + #{theme}, diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index cfce8e6a3..f87cef9e8 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -18,8 +18,9 @@ import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.salarybill.MessageChannelEnum; import com.engine.salary.enums.salarybill.SalarySendStatusEnum; -import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarybill.SalarySendInfoMapper; import com.engine.salary.mapper.salarybill.SalarySendMapper; @@ -34,7 +35,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; -import weaver.common.MessageUtil; import weaver.hrm.User; import java.time.LocalDateTime; @@ -122,15 +122,16 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100518, "没有默认模板,无法发送")); } SalaryTemplatePO salaryTemplate = salaryTemplates.get(0); + // 发送通道 -// Set sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate); -// if (CollectionUtils.isEmpty(sendChannels)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(149767, "工资单模板至少开启一个发送通道")); -// } -// boolean isReplenish = NumberUtils.INTEGER_ONE.equals(salarySend.getSalaryAcctType()); -// if (isReplenish && StringUtils.isEmpty(salaryTemplate.getReplTheme())) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(204428, "请完善补发工资单模板设置")); -// } + Set sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate); + if (CollectionUtils.isEmpty(sendChannels)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(149767, "工资单模板至少开启一个发送通道")); + } + boolean isReplenish = NumberUtils.INTEGER_ONE.equals(salarySend.getSalaryAcctType()); + if (isReplenish && StringUtils.isEmpty(salaryTemplate.getReplenishName())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(204428, "请完善补发工资单模板设置")); + } // 2.检查是否正在发送中 // SalaryBillProgressDTO salaryBillProgress = salaryBillProgressService.getProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + param.getSalarySendId()); // if (Objects.nonNull(salaryBillProgress) && salaryBillProgress.isStatus() @@ -148,7 +149,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService LocalRunnable localRunnable = new LocalRunnable() { @Override public void execute() { - handleGrant(salarySend, ids, salarySob, salaryTemplate, "tenantName"); + handleGrant(salarySend, ids, salarySob, salaryTemplate); } }; ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryBillGrant", localRunnable); @@ -164,27 +165,21 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * @param ids * @param salarySob * @param salaryTemplate - * @param tenantName */ - private void handleGrant(SalarySendPO salarySend, List ids, SalarySobPO salarySob, SalaryTemplatePO salaryTemplate, String tenantName) { + private void handleGrant(SalarySendPO salarySend, List ids, SalarySobPO salarySob, SalaryTemplatePO salaryTemplate) { try { - long l = System.currentTimeMillis(); - // 开启分权或且是非薪酬模块总管理员且发送全部,谁能进来就是能看全部 - // ids = getIdsForDevolution(salarySend, ids); -// List incomeCategorys = salarySob == null || salarySob.getIncomeCategory() == null ? Lists.newArrayList() : JsonUtil.parseList(salarySob.getIncomeCategory(), String.class); - // 邮箱打开 - boolean isEnableEmail = MessageUtil.checkSendEmail() && salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()); + + TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salarySob.getTaxAgentId()); // 1.构建发送参数 - SalaryBillSendDTO salaryBillSendParam = buildSendParams(salarySend, null, salarySob, tenantName, salaryTemplate, true); + SalaryBillSendDTO salaryBillSendParam = buildSendParams(salarySend, null, salarySob, taxAgentPO.getName(), salaryTemplate, true); // 2.获取可发送的列表,此步最耗时,需要解密核算数据 - long l2 = System.currentTimeMillis(); List> enableSendList = getEnableSendList(salarySend, ids, null, true); - long l3 = System.currentTimeMillis(); + // 3.发送消息:先修改数据再发消息,避免出错后无法撤回 List successIds = sendMessage(enableSendList, salaryBillSendParam); - long l4 = System.currentTimeMillis(); + LocalDateTime sendTime = LocalDateTime.now(); // 4.发放 @@ -192,7 +187,6 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // 5.更新数量 // updateSendNum(salarySend, salarySob, sendTime, SalaryI18nUtil.getI18nLabel(93215, "工资单发放")); - long l5 = System.currentTimeMillis(); int total = enableSendList.size(); int successCount = successIds.size(); @@ -218,32 +212,24 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * @param salarySend * @param incomeCategorys * @param salarySob - * @param tenantName + * @param taxAgentName * @param salaryTemplate * @param isEnableEmail * @return */ - private SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, List incomeCategorys, SalarySobPO salarySob, String tenantName, SalaryTemplatePO salaryTemplate, boolean isEnableEmail) { - String currentTenantKey = salarySend.getTenantKey(); - // 云桥发送控制 -// salaryTemplate.setCloudBridgeStatus(getSalaryTemplateService(user).isEnableEbridge(currentTenantKey) ? salaryTemplate.getCloudBridgeStatus() : SalaryTemplateWhetherEnum.FALSE.getValue()); + private SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, List incomeCategorys, SalarySobPO salarySob, String taxAgentName, SalaryTemplatePO salaryTemplate, boolean isEnableEmail) { // 发送通道 -// Set sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate); - // 空的发个毛线 -// if (CollectionUtils.isEmpty(sendChannels)) { -// return null; -// } -// List salarySobItems = salarySobItemService.listBySalarySobId(salarySob == null ? 0L : salarySob.getId()); -// Map salaryItemIncomeCategoryMap = SalaryEntityUtil.convert2Map(salarySobItems, -// salarySobItemPO -> salarySobItemPO.getSalaryItemId().toString(), SalarySobItemPO::getIncomeCategory); - + Set sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate); + if (CollectionUtils.isEmpty(sendChannels)) { + return null; + } Date salaryMonth = salarySend.getSalaryMonth(); boolean isReplenish = NumberUtils.INTEGER_ONE.equals(salarySend.getSalaryAcctType()); // SalaryTemplateBO.copyShowSet(isReplenish, salaryTemplate); // 消息标题 - String title = SalaryBillBO.getBillTitle(salaryTemplate.getTheme(), salaryMonth, tenantName); + String title = SalaryBillBO.getBillTitle(salaryTemplate.getTheme(), salaryMonth, taxAgentName); // 云桥企业微信消息图 String domain = ""; @@ -261,8 +247,6 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // 工资单预览实体名 String entityName = SalaryI18nUtil.getI18nLabel(94626, "工资单"); - User sendUser = null; - // 获取人员信息项目分类 List salaryItemSetList = JSONArray.parseArray(isReplenish ? salaryTemplate.getReplenishSalaryItemSetting() : salaryTemplate.getSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); // 国际化处理 @@ -287,17 +271,17 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // 工资单预览实体名 .entityName(entityName) // 发送通道 -// .sendChannels(sendChannels) + .sendChannels(sendChannels) // 发送者 - .sendUser(sendUser) + .sendUser(user) // 工资单模板 .salaryTemplate(salaryTemplate) // 工资单背景图base64编码 .backgroundBase64(backgroundBase64) // 云桥工资单消息图 .picUrl(picUrl) - // 租户名 - .tenantName(tenantName) + // 扣缴义务人名称 + .taxAgentName(taxAgentName) // 工资单模板-薪资项目设置 .salaryItemSetList(salaryItemSetList) // 工资单模板-员工基本信息 @@ -401,6 +385,8 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService return enableSendList.stream().map(e -> Long.valueOf(e.get("id").toString())).collect(Collectors.toList()); } + Set sendChannels = salaryBillSendParam.getSendChannels(); + // 获取人员完整信息 Map allEmployeeMap = this.getEmployeeWholeInfo(enableSendList); @@ -409,10 +395,13 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService AtomicInteger part = new AtomicInteger(0); int total = enableSendList.size(); enableSendList.forEach(e -> { - // 构建发送消息 -// SendMessageEntity message = SalaryBillBO.buildSendMessage(e, allEmployeeMap, salaryBillSendParam); - SalaryBillBO.buildEmployeeInfo(salaryBillSendParam.getEmployeeInformation(), allEmployeeMap.get(e.get("employeeId").toString()), salaryBillSendParam.getEmployeeField()); - SalaryBillBO.sendEmail(e, allEmployeeMap, salaryBillSendParam); + + if(!sendChannels.contains(MessageChannelEnum.EMAIL)){ + // 构建发送消息 + SalaryBillBO.buildEmployeeInfo(salaryBillSendParam, allEmployeeMap.get(e.get("employeeId").toString())); + SalaryBillBO.sendEmail(e, allEmployeeMap, salaryBillSendParam); + } + /** 发送工资单 **********************************************************/ // WeaResult sendResult = asyncSystemMessageRest.sendMsg(message); // if (sendResult.isStatus()) { diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 82c9148f4..142dd839b 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -65,7 +65,6 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import weaver.common.MessageUtil; import weaver.hrm.User; import weaver.hrm.company.SubCompanyComInfo; import weaver.hrm.resource.ResourceComInfo; @@ -494,11 +493,11 @@ public class SalarySendServiceImpl extends Service implements SalarySendService encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salarySendInfo.getSalaryAcctRecordId()); - if(salaryAcctRecordPO == null){ + if (salaryAcctRecordPO == null) { throw new SalaryRunTimeException("薪资核算记录不存在!"); } - List> salaryAcctResultS =null; - if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(),NumberUtils.INTEGER_ONE) && !isReplenish){ + List> salaryAcctResultS = null; + if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE) && !isReplenish) { // 该记录回算过,并且获取的不是回算后的工资单 salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> { Map map = new LinkedHashMap<>(); @@ -506,7 +505,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService map.put("resultValue", m.getOriginResultValue()); return map; }).collect(Collectors.toList()); - }else{ + } else { salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> { Map map = new LinkedHashMap<>(); map.put("salaryItemId", m.getSalaryItemId()); @@ -1027,10 +1026,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService */ private void sendPayRollEMMessage(SalarySendInfoPO po, SalaryTemplatePO template, Long employeeId) { - - boolean canSendSms = MessageUtil.checkSendSMS(); - boolean canSendEmail = MessageUtil.checkSendEmail(); - // try { // MessageUtil.sendSMS(mobile, content); // } catch (Exception e) { @@ -1172,6 +1167,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService Long salarySendId = param.getSalarySendId(); Collection ids = param.getIds(); + // 获取可撤回的工资单 if (param.getSalarySendRangeIds() != null) { //如果传了范围id,则使用范围id撤回 ids = getSalarySendRangeService(user) @@ -1185,33 +1181,14 @@ public class SalarySendServiceImpl extends Service implements SalarySendService if (salarySend == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在")); } -// // 获取可撤回的工资单 -// List enableWithdrawList = new LambdaQueryChainWrapper<>(salarySendInfoMapper) -// .eq(SalarySendInfoPO::getDeleteType, 0) -// .eq(SalarySendInfoPO::getTenantKey, currentTenantKey) -// .eq(SalarySendInfoPO::getSalarySendId, salarySendId) -// .eq(SalarySendInfoPO::getSendStatus, SalarySendStatusEnum.ALREADYSEND.getValue()) -// .in(CollectionUtils.isNotEmpty(ids), SalarySendInfoPO::getId, ids) -// .list(); + // 撤回 -// new LambdaUpdateChainWrapper<>(salarySendInfoMapper) -// .eq(SalarySendInfoPO::getDeleteType, 0) -// .eq(SalarySendInfoPO::getSalarySendId, salarySendId) -// .eq(SalarySendInfoPO::getSendStatus, SalarySendStatusEnum.ALREADYSEND.getValue()) -// .in(CollectionUtils.isNotEmpty(ids), SalarySendInfoPO::getId, ids) -// .set(SalarySendInfoPO::getSendStatus, SalarySendStatusEnum.WITHDRAW.getValue()) -// .update(); SalarySendInfoPO po = new SalarySendInfoPO(); po.setSendStatus(SalarySendStatusEnum.WITHDRAW.getValue()); - List statusList = new ArrayList<>(); statusList.add(SalarySendStatusEnum.ALREADYSEND.getValue()); salarySendInfoMapper.updateGrantWithdraw(po, salarySendId, statusList, ids); -// List list = new LambdaQueryChainWrapper<>(salarySendInfoMapper) -// .eq(SalarySendInfoPO::getDeleteType, 0) -// .eq(SalarySendInfoPO::getTenantKey, currentTenantKey) -// .eq(SalarySendInfoPO::getSalarySendId, salarySendId).list(); po = new SalarySendInfoPO(); po.setDeleteType(0); @@ -1231,11 +1208,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService salarySendNew.setSendTotal(sendTotal); mapper.updateById(salarySendNew); -// List salarySobs = new LambdaQueryChainWrapper<>(salarySobMapper) -// .eq(SalarySobPO::getTenantKey, TenantContext.getCurrentTenantKey()) -// .eq(SalarySobPO::getDeleteType, 0) -// .eq(SalarySobPO::getId, salarySend.getSalarySobId()) -// .list(); // 记录日志 // SalaryLoggerUtil.recordUpdateSingleLog(salarySendLoggerTemplate, // salarySend.getId(), @@ -1247,28 +1219,10 @@ public class SalarySendServiceImpl extends Service implements SalarySendService SalarySendGrantParam grantParam = SalarySendGrantParam.builder().ids(param.getIds()).salarySendId(param.getSalarySendId()).build(); - // 撤回消息 + + // 异步发送消息:先修改数据再发消息,避免出错后无法撤回撤回消息 sendMessage(false, list, grantParam, salarySend); -// // 3.异步发送消息:先修改数据再发消息,避免出错后无法撤回 -// taskExecutor.execute(() -> { -// try { -// DSTenantKeyThreadVar.tenantKey.set(currentTenantKey); -// -// String text = "工资单撤回测试消息文案,不好意思,弄错了"; -// String title = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 94626, "工资单"); -// enableWithdrawList.forEach(e->{ -// CancleMessageEntity cme = SalarySendBO.buildCancleMessageEntity(e.getEmployeeId(), -// e.getMsgId(), -// text, -// title, -// currentEmployeeId, -// currentTenantKey); -// log.info("撤回结果===:{}", JsonUtil.toJsonString(asyncSystemMessageRest.cancleMsg(cme))); -// }); -// } finally { -// DSTenantKeyThreadVar.tenantKey.remove(); -// } -// }); + Map map = new HashMap<>(2); map.put("sendNum", sendNum); @@ -1447,7 +1401,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // 查询薪资核算所用薪资账套的薪资项目 List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); - if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)){ + if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)) { // 是回算,获取回算项 List salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); salaryItemIds.addAll(salarySobBackItemPOS.stream().map(SalarySobBackItemPO::getSalaryItemId).collect(Collectors.toList())); @@ -1479,7 +1433,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public void deleteBySalaryAcctRecordIds(Collection ids) { - if(CollectionUtils.isNotEmpty(ids)){ + if (CollectionUtils.isNotEmpty(ids)) { getSalarySendMapper().deleteBySalaryAcctRecordIds(ids); getSalarySendInfoMapper().deleteBySalaryAcctRecordIds(ids); } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 37896c483..2f4a79838 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -31,6 +31,7 @@ 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.wrapper.proxy.SalarySendWrapperProxy; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -49,7 +50,7 @@ import java.util.stream.Collectors; * @Author: wangxiangzhong * @Date: 2022/3/16 13:57 */ -public class SalarySendWrapper extends Service { +public class SalarySendWrapper extends Service implements SalarySendWrapperProxy { private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } diff --git a/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java b/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java new file mode 100644 index 000000000..df063f4cd --- /dev/null +++ b/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java @@ -0,0 +1,34 @@ +package com.engine.salary.wrapper.proxy; + +import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; +import com.engine.salary.entity.salaryBill.param.SalarySendWithdrawParam; + +import java.util.Map; + +/** + * 工资单发放代理 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface SalarySendWrapperProxy { + + /** + * 工资单发放 + * + * @param queryParam + * @return + */ + Map grant(SalarySendGrantParam queryParam); + + /** + * 工资单撤回 + * + * @param queryParam + * @return + */ + Map withdraw(SalarySendWithdrawParam queryParam); + +} From 0d3a48e7ea93dbd8b65ed7f21be62b1bfdc32f7e Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 5 Jun 2023 15:14:25 +0800 Subject: [PATCH 128/245] =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E6=89=A3=E7=BC=B4?= =?UTF-8?q?=E4=B9=89=E5=8A=A1=E4=BA=BA=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/taxagent/bo/TaxAgentBO.java | 5 +++++ .../taxagent/param/TaxAgentSaveParam.java | 3 +++ .../salary/entity/taxagent/po/TaxAgentPO.java | 5 +++++ .../salary/mapper/taxagent/TaxAgentMapper.xml | 19 +++++++++++++++++-- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/taxagent/bo/TaxAgentBO.java b/src/com/engine/salary/entity/taxagent/bo/TaxAgentBO.java index 47d2a5b61..5eb60c561 100644 --- a/src/com/engine/salary/entity/taxagent/bo/TaxAgentBO.java +++ b/src/com/engine/salary/entity/taxagent/bo/TaxAgentBO.java @@ -82,6 +82,7 @@ public class TaxAgentBO { String subAdmins = SalaryI18nUtil.getI18nLabel(106283, "分管理员"); // String paymentAgency = SalaryI18nUtil.getI18nLabel(112448, "社保福利代缴机构"); String description = SalaryI18nUtil.getI18nLabel(84961, "备注"); + String sortedIndex = SalaryI18nUtil.getI18nLabel(84962, "显示顺序"); if (isOpenDevolution) { columns.add(new Column(name, "name", "name%")); columns.add(new Column(employeeRange, "employeeRange", "employeeRange")); @@ -89,11 +90,13 @@ public class TaxAgentBO { // columns.add(new Column(subAdmins, "subAdmins", "20%")); // columns.add(new Column(paymentAgency, "paymentAgency", "30%")); columns.add(new Column(description, "description", "name")); + columns.add(new Column(sortedIndex, "sortedIndex", "sortedIndex")); } else { columns.add(new Column(name, "name", "name")); columns.add(new Column(employeeRange, "employeeRange", "employeeRange")); // columns.add(new WeaTableColumn(paymentAgency, "paymentAgency", "30%")); columns.add(new Column(description, "description", "description")); + columns.add(new Column(sortedIndex, "sortedIndex", "sortedIndex")); } listPage.setColumns(columns); } @@ -186,6 +189,7 @@ public class TaxAgentBO { } map.put("paymentAgency", buildPaymentAgency(e.getPaymentAgency(), paymentAgencyPOS)); map.put("description", e.getDescription()); + map.put("sortedIndex", e.getSortedIndex()); return map; }).collect(Collectors.toList()); } @@ -231,6 +235,7 @@ public class TaxAgentBO { .creator(employeeId) .deleteType(0) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .sortedIndex(saveParam.getSortedIndex()) .build(); } diff --git a/src/com/engine/salary/entity/taxagent/param/TaxAgentSaveParam.java b/src/com/engine/salary/entity/taxagent/param/TaxAgentSaveParam.java index eba9ddc33..c8100c98d 100644 --- a/src/com/engine/salary/entity/taxagent/param/TaxAgentSaveParam.java +++ b/src/com/engine/salary/entity/taxagent/param/TaxAgentSaveParam.java @@ -40,4 +40,7 @@ public class TaxAgentSaveParam { //备注 @DataCheck( max = 50, message = "备注不超过50个字符") private String description; + + // 排序id + private Integer sortedIndex; } diff --git a/src/com/engine/salary/entity/taxagent/po/TaxAgentPO.java b/src/com/engine/salary/entity/taxagent/po/TaxAgentPO.java index a5d695625..cf3b21096 100644 --- a/src/com/engine/salary/entity/taxagent/po/TaxAgentPO.java +++ b/src/com/engine/salary/entity/taxagent/po/TaxAgentPO.java @@ -69,5 +69,10 @@ public class TaxAgentPO { */ private Date updateTime; + /** + * 排序 + */ + private Integer sortedIndex; + private Collection ids; } diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml index cb1bc6dc8..b68b5c25d 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml @@ -10,6 +10,7 @@ + @@ -22,6 +23,7 @@ , t.name , t.tenant_key , t.update_time + , t.sorted_index
@@ -43,7 +45,7 @@ FROM hrsa_tax_agent t WHERE delete_type = 0 - ORDER BY id DESC + ORDER BY sorted_index DESC @@ -52,7 +54,7 @@ FROM hrsa_tax_agent t WHERE delete_type = 0 - ORDER BY id DESC + ORDER BY sorted_index DESC @@ -95,6 +97,9 @@ update_time, + + sorted_index, + @@ -121,6 +126,9 @@ #{updateTime}, + + #{sortedIndex}, + @@ -157,6 +165,9 @@ update_time, + + sorted_index, + @@ -183,6 +194,9 @@ #{updateTime}, + + #{sortedIndex}, + @@ -196,6 +210,7 @@ name=#{name}, tenant_key=#{tenantKey}, update_time=#{updateTime}, + sorted_index=#{sortedIndex} WHERE id = #{id} AND delete_type = 0 From 4582ab1e51611b818de24ede15d46e074ad8c8c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 6 Jun 2023 09:51:07 +0800 Subject: [PATCH 129/245] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryBill/bo/SalaryBillBO.java | 85 +++++++- .../salaryBill/dto/SalaryBillSendDTO.java | 55 ++--- .../param/SalarySendGrantParam.java | 3 +- .../param/SalarySendWithdrawParam.java | 28 +-- .../salary/service/SalaryBillService.java | 6 +- .../service/impl/SalaryBillServiceImpl.java | 190 +++++++++--------- .../service/impl/SalarySendServiceImpl.java | 7 +- 7 files changed, 218 insertions(+), 156 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 553f67d16..c2b3a6c58 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -1,5 +1,8 @@ package com.engine.salary.entity.salaryBill.bo; +import com.cloudstore.dev.api.bean.MessageBean; +import com.cloudstore.dev.api.bean.MessageType; +import com.cloudstore.dev.api.util.Util_Message; import com.engine.salary.annotation.SalaryFormulaVar; import com.engine.salary.constant.SalaryArchiveConstant; import com.engine.salary.constant.SalaryTemplateSalaryItemSetGroupConstant; @@ -20,10 +23,14 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import weaver.common.MessageUtil; +import weaver.hrm.company.SubCompanyComInfo; +import weaver.hrm.resource.ResourceComInfo; +import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; @@ -161,17 +168,28 @@ public class SalaryBillBO { /** * 获取工资单标题 * - * @param theme - * @param salaryMonth - * @param tenantName * @return */ - public static String getBillTitle(String theme, Date salaryMonth, String tenantName) { - String yearI18n = SalaryI18nUtil.getI18nLabel(100325, "年"); - String monthI18n = SalaryI18nUtil.getI18nLabel(100326, "月"); + public static String getBillTitle(String theme, Date salaryMonth, Long employeeId) { + + String companyName = ""; + if (theme.contains("${companyName}")) { + if (employeeId != null) { + ResourceComInfo resourceComInfo = null; + SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo(); + try { + resourceComInfo = new ResourceComInfo(); + subCompanyComInfo = new SubCompanyComInfo(); + } catch (Exception e) { + log.error("资源异常", e); + } + companyName = subCompanyComInfo.getSubCompanyname(resourceComInfo.getSubCompanyID(employeeId + "")); + } + } + return theme - .replace("${companyName}", tenantName) - .replace("${salaryMonth}", salaryMonth.getYear() + yearI18n + salaryMonth.getMonth() + monthI18n); + .replace("${companyName}", companyName) + .replace("${salaryMonth}", new SimpleDateFormat("yyyy年MM月").format(salaryMonth)); } // /** @@ -199,12 +217,58 @@ public class SalaryBillBO { // return SalaryBillBO.buildSendMessageEntity(salaryBillSendParam, receivers, entity, emailInfo); // } + /** + * 发送Em消息 + */ + public static void sendMsg(SalaryBillSendDTO salaryBillSendParam, Long id, Long employeeId) { + SalaryTemplatePO template = salaryBillSendParam.getSalaryTemplate(); + String background = template.getBackground(); + String billTitle = getBillTitle(template.getTheme(), salaryBillSendParam.getSalaryDate(), employeeId); + MessageType messageType = MessageType.newInstance(499); // 消息来源(见文档第四点补充 必填) + Set userIdList = new HashSet<>(); // 接收人id 必填 + userIdList.add(employeeId.toString()); + String title = billTitle; // 标题 + String context = "点击查看详情"; // 内容 + // PC端链接 + String linkUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?id=" + id + "&recipient=" + employeeId; + // 移动端链接 + String linkMobileUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?type=phone&id=" + id + "&recipient=" + employeeId; + try { + MessageBean messageBean = Util_Message.createMessage(messageType, userIdList, title, context, linkUrl, linkMobileUrl); + messageBean.setCreater(Integer.parseInt(salaryBillSendParam.getSendUser().getUID() + ""));// 创建人id + messageBean.setBizState("0");// 需要修改消息为已处理等状态时传入,表示消息最初状态为待处理 + messageBean.setTargetId("499|" + id); //消息来源code +“|”+业务id需要修改消息为已处理等状态时传入 + + if (StringUtils.isNotBlank(background)) { + messageBean.setPictureUrl(background); + } else { + messageBean.setPictureUrl("/hrm/hrm_e9/images/payroll.jpg?pictype=jpg"); + } + Util_Message.store(messageBean); + } catch (IOException e) { + e.printStackTrace(); + } + } public static void sendEmail(Map e, Map allEmployeeMap, SalaryBillSendDTO salaryBillSendParam) { // 消息接收者 String receivers = Optional.ofNullable(e.get("email")).orElse("").toString(); + String title = getBillTitle(salaryBillSendParam.getSalaryTemplate().getTheme(), salaryBillSendParam.getSalaryDate(), Long.valueOf(e.get("employeeId").toString())); String emailContent = SalaryBillBO.buildEmailContent(e, salaryBillSendParam); - MessageUtil.sendEmail(receivers, salaryBillSendParam.getText(), emailContent); + if (StringUtils.isNotBlank(receivers)) { + MessageUtil.sendEmail(receivers, title, emailContent); + } + } + + + public static void sendSMS(SalaryBillSendDTO salaryBillSendParam, Long id, Long employeeId) { + +// try { +// MessageUtil.sendSMS(mobile, content); +// } catch (Exception e) { +// kqLog.info("SendSMS error.resourceId:" + resourceId + ">>>>>>mobile>>>>>>" + mobile); +// log.writeLog(e); +// } } // /** @@ -360,7 +424,8 @@ public class SalaryBillBO { emailContent.append("
"); // 1.标题 emailContent.append("
"); - emailContent.append(salaryBillSendParam.getTitle()); +// emailContent.append(salaryBillSendParam.getTitle()); + emailContent.append(getBillTitle(salaryBillSendParam.getSalaryTemplate().getTheme(), salaryBillSendParam.getSalaryDate(), (Long) e.get("employeeId"))); emailContent.append("
"); // 2.发送时间 emailContent.append("
"); diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java index 6e246f13d..bbfb6d5b7 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java @@ -3,78 +3,85 @@ package com.engine.salary.entity.salaryBill.dto; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.enums.salarybill.MessageChannelEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import weaver.hrm.User; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; /** - * @Description: 工资单发放信息 - * @Author: wangxiangzhong - * @Date: 2021/12/14 14:02 - */ + * 工资单发放信息 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor @AllArgsConstructor -@ApiModel("工资单发放信息") +//工资单发放信息 public class SalaryBillSendDTO { - @ApiModelProperty("消息标题") + /** + * 薪资所属月 + */ + private Date salaryDate; + + //消息标题 private String title; - @ApiModelProperty("消息内容") + //消息内容 private String text; - @ApiModelProperty("工资单预览实体名") + //工资单预览实体名 private String entityName; - @ApiModelProperty("发送通道") + //发送通道 private Set sendChannels; - @ApiModelProperty("发送者") + //发送者 private User sendUser; - @ApiModelProperty("工资单模板") + //工资单模板 private SalaryTemplatePO salaryTemplate; - @ApiModelProperty("工资单背景图base64编码") + //工资单背景图base64编码 private String backgroundBase64; - @ApiModelProperty("云桥工资单消息图") + //云桥工资单消息图 private String picUrl; - @ApiModelProperty("扣缴义务人名称") + //扣缴义务人名称 private String taxAgentName; - @ApiModelProperty("工资单模板-薪资项目设置") + //工资单模板-薪资项目设置 private List salaryItemSetList; - @ApiModelProperty("工资单模板-员工基本信息") + //工资单模板-员工基本信息 private SalaryTemplateSalaryItemSetListDTO employeeInformation; - @ApiModelProperty("工资单模板-对应人员字段") + //工资单模板-对应人员字段 private Map employeeField; - @ApiModelProperty("工资单模板-发放说明标签国际化") + //工资单模板-发放说明标签国际化 private String remarkI18n; - @ApiModelProperty("邮件是否可以发送邮件") + //邮件是否可以发送邮件 private boolean isEnableEmail; - @ApiModelProperty("工资单发放") + //工资单发放 private SalarySendPO salarySend; - @ApiModelProperty("收入所得项目类型") + //收入所得项目类型 private List incomeCategorys; - @ApiModelProperty("薪资项目收入所得类型") + //薪资项目收入所得类型 private Map salaryItemIncomeCategoryMap; } diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java index 3e6b4c7dd..dfabe74d5 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java @@ -7,7 +7,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Collection; import java.util.List; /** @@ -23,7 +22,7 @@ import java.util.List; public class SalarySendGrantParam { // 主键id - private Collection ids; + private List ids; // 工资单发放Id private Long salarySendId; diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java index af1fcedd9..e9b4caabd 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java @@ -1,39 +1,33 @@ package com.engine.salary.entity.salaryBill.param; -import com.engine.salary.exception.SalaryRunTimeException; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Collection; import java.util.List; /** - * @Description: 工资单撤回参数 - * @Author: wangxiangzhong - * @Date: 2021/12/13 16:18 - */ + * 工资单发送参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor @AllArgsConstructor -////"工资单撤回参数") public class SalarySendWithdrawParam { -// 主键id") - private Collection ids; + // 主键id") + private List ids; -// 工资单发放Id") + // 工资单发放Id") private Long salarySendId; + //发送范围 private List salarySendRangeIds; - public static String checkParam(SalarySendWithdrawParam param, Long employeeId, String tenantKey) { - if (param.getSalarySendId() == null) { - throw new SalaryRunTimeException("工资单发放Id必传"); - } - - return ""; - } } diff --git a/src/com/engine/salary/service/SalaryBillService.java b/src/com/engine/salary/service/SalaryBillService.java index 29e4cb4d8..00caeb1ee 100644 --- a/src/com/engine/salary/service/SalaryBillService.java +++ b/src/com/engine/salary/service/SalaryBillService.java @@ -2,8 +2,6 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; -import java.util.List; - /** * @Description: 工资单 * @Author: wangxiangzhong @@ -15,10 +13,8 @@ public interface SalaryBillService { * 工资单发放 * * @param queryParam - * @param isRange - * @param rangeIds */ - void grant(SalarySendGrantParam queryParam, boolean isRange, List rangeIds); + void grant(SalarySendGrantParam queryParam); /** * 工资单撤回 diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index f87cef9e8..2bcd09c4d 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSONArray; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.biz.SalarySendBiz; +import com.engine.salary.biz.SalarySendInfoBiz; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO; @@ -21,10 +23,12 @@ import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salarybill.MessageChannelEnum; import com.engine.salary.enums.salarybill.SalarySendStatusEnum; +import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarybill.SalarySendInfoMapper; import com.engine.salary.mapper.salarybill.SalarySendMapper; import com.engine.salary.service.*; +import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.google.common.collect.Lists; @@ -32,12 +36,13 @@ import com.weaver.util.threadPool.ThreadPoolUtil; import com.weaver.util.threadPool.constant.ModulePoolEnum; import com.weaver.util.threadPool.entity.LocalRunnable; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; -import java.time.LocalDateTime; +import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -96,6 +101,8 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private SalarySendInfoBiz salarySendInfoMapper = new SalarySendInfoBiz(); + private SalarySendBiz mapper = new SalarySendBiz(); private SalaryEmployeeService salaryEmployeeService; @@ -108,7 +115,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * 工资单发放 start **********************************************************************/ @Override - public void grant(SalarySendGrantParam param, boolean isRange, List rangeIds) { + public void grant(SalarySendGrantParam param) { // 1.检查和获取工资单发放 SalarySendPO salarySend = checkAndGetSalarySend(param.getSalarySendId()); // // 已经冻结不能操作 @@ -143,18 +150,28 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // salaryBillProgressService.initProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), initProgress); // String tenantName = TenantContext.getCurrentTenant().getTenantName(); -// List ids = isRange ? getSalarySendRangeService(user).getSendInfoIdsBySalarySendIdAndOperateType(param.getSalarySendId(), rangeIds, SalarySendOperateTypeEnum.GRANT) : param.getIds(); - List ids = (List) param.getIds(); + List ids = param.getIds(); + + if (param.getSalarySendRangeIds() != null) { + //如果传了范围id,则使用范围id发放 + ids = getSalarySendRangeService(user) + .getSendInfoIdsBySendId(salarySend.getId(), param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); + if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 + throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); + } + } // 异步执行 + List finalIds = ids; LocalRunnable localRunnable = new LocalRunnable() { @Override public void execute() { - handleGrant(salarySend, ids, salarySob, salaryTemplate); + handleGrant(salarySend, finalIds, salarySob, salaryTemplate); } }; ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryBillGrant", localRunnable); } + /** * 处理发送 * 注意: @@ -172,21 +189,19 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salarySob.getTaxAgentId()); // 1.构建发送参数 - SalaryBillSendDTO salaryBillSendParam = buildSendParams(salarySend, null, salarySob, taxAgentPO.getName(), salaryTemplate, true); + SalaryBillSendDTO salaryBillSendParam = buildSendParams(salarySend, taxAgentPO.getName(), salaryTemplate); // 2.获取可发送的列表,此步最耗时,需要解密核算数据 - List> enableSendList = getEnableSendList(salarySend, ids, null, true); + List> enableSendList = getEnableSendList(salarySend, ids, salaryBillSendParam); // 3.发送消息:先修改数据再发消息,避免出错后无法撤回 List successIds = sendMessage(enableSendList, salaryBillSendParam); - LocalDateTime sendTime = LocalDateTime.now(); - // 4.发放 -// grantSendInfo(successIds, salarySend, sendTime, salaryTemplate); + grantSendInfo(successIds, salarySend, salaryTemplate); // 5.更新数量 -// updateSendNum(salarySend, salarySob, sendTime, SalaryI18nUtil.getI18nLabel(93215, "工资单发放")); + updateSendNum(salarySend, salarySob); int total = enableSendList.size(); int successCount = successIds.size(); @@ -210,14 +225,11 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * 构建发送参数 * * @param salarySend - * @param incomeCategorys - * @param salarySob * @param taxAgentName * @param salaryTemplate - * @param isEnableEmail * @return */ - private SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, List incomeCategorys, SalarySobPO salarySob, String taxAgentName, SalaryTemplatePO salaryTemplate, boolean isEnableEmail) { + private SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, String taxAgentName, SalaryTemplatePO salaryTemplate) { // 发送通道 Set sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate); if (CollectionUtils.isEmpty(sendChannels)) { @@ -229,7 +241,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // SalaryTemplateBO.copyShowSet(isReplenish, salaryTemplate); // 消息标题 - String title = SalaryBillBO.getBillTitle(salaryTemplate.getTheme(), salaryMonth, taxAgentName); +// String title = SalaryBillBO.getBillTitle(salaryTemplate.getTheme(), salaryMonth, 0L); // 云桥企业微信消息图 String domain = ""; @@ -264,10 +276,11 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService } return SalaryBillSendDTO.builder() + .salaryDate(salaryMonth) // 消息标题 - .title(title) +// .title(title) // 消息内容:目前跟title一样 - .text(title) +// .text(title) // 工资单预览实体名 .entityName(entityName) // 发送通道 @@ -291,7 +304,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // 工资单模板-发放说明标签国际化 .remarkI18n(remarkI18n) // 邮件是否可以发送邮件 - .isEnableEmail(isEnableEmail) +// .isEnableEmail(isEnableEmail) // 工资单发放 .salarySend(salarySend) // 收入所得项目类型 @@ -306,11 +319,9 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * * @param salarySend * @param ids - * @param incomeCategorys - * @param isEnableEmail * @return */ - private List> getEnableSendList(SalarySendPO salarySend, List ids, List incomeCategorys, boolean isEnableEmail) { + private List> getEnableSendList(SalarySendPO salarySend, List ids, SalaryBillSendDTO salaryBillSendParam) { SalarySendInfoQueryParam queryParam = new SalarySendInfoQueryParam(); queryParam.setSalarySendId(salarySend.getId()); // 空就是所有 @@ -344,6 +355,9 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // 获取薪资项目数据 List salaryAcctEmployees = Lists.newArrayList(); List salaryAcctResultValues = Lists.newArrayList(); + + //是否需要发送邮件 + Boolean isEnableEmail = salaryBillSendParam.getSendChannels().contains(MessageChannelEnum.EMAIL); if (CollectionUtils.isNotEmpty(ids)) { int partSize = 100;// 分片大小,越小进度条跑得越短平快,但是总体速度更慢 List> partition = Lists.partition(employeeIds, partSize); @@ -396,21 +410,22 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService int total = enableSendList.size(); enableSendList.forEach(e -> { - if(!sendChannels.contains(MessageChannelEnum.EMAIL)){ + if (sendChannels.contains(MessageChannelEnum.MSG)) { + SalaryBillBO.sendMsg(salaryBillSendParam, Long.valueOf(e.get("id").toString()) , Long.valueOf( e.get("employeeId").toString())); + } + + if (sendChannels.contains(MessageChannelEnum.EMAIL)) { // 构建发送消息 SalaryBillBO.buildEmployeeInfo(salaryBillSendParam, allEmployeeMap.get(e.get("employeeId").toString())); SalaryBillBO.sendEmail(e, allEmployeeMap, salaryBillSendParam); } + /** 发送工资单 **********************************************************/ -// WeaResult sendResult = asyncSystemMessageRest.sendMsg(message); -// if (sendResult.isStatus()) { -// sendInfoUpdateList.add(SalarySendInfoPO.builder() -// .id(Long.valueOf(e.get("id").toString())) -// .sendMsgId(sendResult.getData()) -// .build()); -// } -// // 更新发送进度 + sendInfoUpdateList.add(SalarySendInfoPO.builder() + .id(Long.valueOf(e.get("id").toString())) + .build()); + // 更新发送进度 // index.addAndGet(1); // part.addAndGet(1); // if (index.get() % 100 == 0 || index.get() >= total) { @@ -419,12 +434,11 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // } }); // 批量修改发送消息id -// if (CollectionUtils.isNotEmpty(sendInfoUpdateList)) { -// // sqlserver数据库处理,每个分片数量约=2100/插入字段数 -// int partSize = DatabaseUtil.getDatabaseId().equalsIgnoreCase("sqlserver") ? 500 : DbCrudConstant.DEF_PART_SIZE; -// List> partition = Lists.partition(sendInfoUpdateList, partSize); + if (CollectionUtils.isNotEmpty(sendInfoUpdateList)) { + // sqlserver数据库处理,每个分片数量约=2100/插入字段数 + List> partition = Lists.partition(sendInfoUpdateList, 500); // partition.forEach(updatePart -> getSalarySendInfoMapper().batchUpdateMsgId(updatePart)); -// } + } return sendInfoUpdateList.stream().map(SalarySendInfoPO::getId).collect(Collectors.toList()); } @@ -508,30 +522,23 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // } // return ids; // } -// -// /** -// * 发放工资单更新信息 -// * -// * @param ids -// * @param salarySend -// * @param sendTime -// * @param salaryTemplate -// * @param currentTenantKey -// */ -// private void grantSendInfo(List ids, SalarySendPO salarySend, LocalDateTime sendTime, SalaryTemplatePO salaryTemplate) { -// List> partition = Lists.partition(ids, DbCrudConstant.DEF_PART_SIZE); -// partition.forEach(part -> new LambdaUpdateChainWrapper<>(getSalarySendInfoMapper()) -// .eq(SalarySendInfoPO::getDeleteType, 0) -// .eq(SalarySendInfoPO::getTenantKey) -// .eq(SalarySendInfoPO::getSalarySendId, salarySend.getId()) -// .in(SalarySendInfoPO::getSendStatus, Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue())) -// .in(SalarySendInfoPO::getId, part) -// .set(SalarySendInfoPO::getSendStatus, SalarySendStatusEnum.ALREADYSEND.getValue()) -// .set(SalarySendInfoPO::getSendTime, sendTime) -// .set(SalarySendInfoPO::getSalaryTemplate, JsonUtil.toJsonString(salaryTemplate)) -// .update()); -// } -// + + /** + * 发放工资单更新信息 + * + * @param ids + * @param salarySend + * @param salaryTemplate + */ + private void grantSendInfo(List ids, SalarySendPO salarySend, SalaryTemplatePO salaryTemplate) { + Date sendTime = new Date(); + SalarySendInfoPO po = new SalarySendInfoPO(); + po.setSendStatus(SalarySendStatusEnum.ALREADYSEND.getValue()); + po.setSendTime(sendTime); + po.setSalaryTemplate(JsonUtil.toJsonString(salaryTemplate)); + salarySendInfoMapper.updateGrantWithdraw(po, salarySend.getId(), Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()), ids); + } + // /** // * 撤回工资单更新信息 // * @@ -551,42 +558,33 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // .update()); // } // -// /** -// * 更新发送数量 -// * -// * @param salarySend -// * @param salarySob -// * @param lastSendTime -// * @param operateTypeName -// * @param currentTenantKey -// */ -// private void updateSendNum(SalarySendPO salarySend, SalarySobPO salarySob, LocalDateTime lastSendTime, String operateTypeName) { -// List list = new LambdaQueryChainWrapper<>(getSalarySendInfoMapper()) -// /** 注意:需要啥就加载啥,避免加载大字段salaryTemplate */ -// .select(SalarySendInfoPO::getId, SalarySendInfoPO::getSendStatus) -// .eq(SalarySendInfoPO::getDeleteType, 0) -// .eq(SalarySendInfoPO::getTenantKey) -// .eq(SalarySendInfoPO::getSalarySendId, salarySend.getId()).list(); -// int sendNum = (int) list.stream().filter(e -> e.getSendStatus().equals(SalarySendStatusEnum.ALREADYSEND.getValue())).count(); -// int sendTotal = list.size(); -// SalarySendPO salarySendNew = new SalarySendPO(); -// BeanUtils.copyProperties(salarySend, salarySendNew); -// salarySendNew.setSendNum(sendNum); -// salarySendNew.setSendTotal(sendTotal); -// if (lastSendTime != null) { -// salarySendNew.setLastSendTime(lastSendTime); -// } -// getSalarySendMapper().updateById(salarySendNew); -// // 记录日志 -// SalaryLoggerUtil.recordUpdateSingleLog(salarySendLoggerTemplate, -// salarySend.getId(), -// salarySend.getSalaryMonth() + "-" + (salarySob == null ? "" : salarySob.getName()), -// operateTypeName, -// operateTypeName, -// salarySend, -// salarySendNew); -// } -// + + /** + * 更新发送数量 + * + * @param salarySend + * @param salarySob + */ + private void updateSendNum(SalarySendPO salarySend, SalarySobPO salarySob) { + List list = salarySendInfoMapper.listSome(SalarySendInfoPO.builder().salarySendId(salarySend.getId()).build()); + List sendList = list.stream().filter(e -> e.getSendStatus().equals(SalarySendStatusEnum.ALREADYSEND.getValue())).collect(Collectors.toList()); + int sendNum = sendList.size(); + int sendTotal = list.size(); + SalarySendPO salarySendNew = new SalarySendPO(); + try { + BeanUtils.copyProperties(salarySendNew, salarySend); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + salarySendNew.setSendNum(sendNum); + salarySendNew.setSendTotal(sendTotal); + salarySendNew.setLastSendTime(new Date()); + + mapper.updateById(salarySendNew); + } + // /** // * 工资单撤回 start // **********************************************************************/ diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 142dd839b..9d6672c10 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -910,7 +910,8 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public Map grant(SalarySendGrantParam param) { - getSalaryBillService(user).grant(param, false, new ArrayList<>()); + getSalaryBillService(user).grant(param); + // if (param.getSalarySendId() == null) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100327, "工资单发放Id必传")); // } @@ -986,10 +987,12 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // param.setTemplate(templatePO); // sendMessage(true, needSendList, param, salarySend); // +// +// // Map map = new HashMap<>(2); // map.put("sendNum", sendNum); // map.put("sendTotal", sendTotal); - +// // return map; return null; } From 993db67601f123d144cb2cdcb31ed2c2fc6917ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 6 Jun 2023 10:30:49 +0800 Subject: [PATCH 130/245] =?UTF-8?q?=E5=85=AC=E5=85=B1=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=E6=9D=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 16 +-- .../ProgressDTO.java} | 17 +-- .../dto/SalaryAccResultListDTO.java | 39 ------ .../entity/salaryacct/dto/SalaryAcctDTO.java | 24 ---- .../salaryacct/SalaryAcctManager.java | 12 +- ...gressService.java => ProgressService.java} | 19 ++- .../service/impl/ProgressServiceImpl.java | 128 ++++++++++++++++++ .../impl/SalaryAcctCalculateServiceImpl.java | 4 +- .../impl/SalaryAcctProgressServiceImpl.java | 128 ------------------ .../impl/SalaryAcctResultServiceImpl.java | 8 +- .../salary/web/SalaryProgressController.java | 12 +- .../wrapper/SalaryAcctResultWrapper.java | 10 +- 12 files changed, 180 insertions(+), 237 deletions(-) rename src/com/engine/salary/entity/{salaryacct/dto/SalaryAcctProgressDTO.java => progress/ProgressDTO.java} (79%) delete mode 100644 src/com/engine/salary/entity/salaryacct/dto/SalaryAccResultListDTO.java delete mode 100644 src/com/engine/salary/entity/salaryacct/dto/SalaryAcctDTO.java rename src/com/engine/salary/service/{SalaryAcctProgressService.java => ProgressService.java} (75%) create mode 100644 src/com/engine/salary/service/impl/ProgressServiceImpl.java delete mode 100644 src/com/engine/salary/service/impl/SalaryAcctProgressServiceImpl.java diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index a7dd4ed4c..6914f1b2c 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -10,7 +10,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.encrypt.AESEncryptUtil; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; +import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.siaccount.dto.InsuranceAccountViewListDTO; import com.engine.salary.entity.siaccount.dto.SIAccountUtilDTO; import com.engine.salary.entity.siaccount.param.*; @@ -28,10 +28,10 @@ import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; -import com.engine.salary.service.SalaryAcctProgressService; +import com.engine.salary.service.ProgressService; import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentService; -import com.engine.salary.service.impl.SalaryAcctProgressServiceImpl; +import com.engine.salary.service.impl.ProgressServiceImpl; import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.sys.entity.vo.OrderRuleVO; @@ -113,8 +113,8 @@ public class SIAccountBiz extends Service { return MapperProxyFactory.getProxy(InsuranceCompensationMapper.class); } - private SalaryAcctProgressService getSalaryAcctProgressService(User user) { - return (SalaryAcctProgressService) ServiceUtil.getService(SalaryAcctProgressServiceImpl.class, user); + private ProgressService getSalaryAcctProgressService(User user) { + return (ProgressService) ServiceUtil.getService(ProgressServiceImpl.class, user); } private SIAccountDetailTempMapper getSIAccountDetailTempMapper() { @@ -251,13 +251,13 @@ public class SIAccountBiz extends Service { public void accounting(AccountParam param, Long employeeId, String tenantKey, String currentUserName) { //薪资核算进度暂未实现 - SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + param.getBillMonth()); + ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + param.getBillMonth()); if (salaryAcctProgressDTO != null && salaryAcctProgressDTO.getProgress().compareTo(BigDecimal.ONE) < 0) { return; } // 初始化进度 - SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO() + ProgressDTO initProgress = new ProgressDTO() .setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")) .setTitleLabelId(97515L) .setTotalQuantity(NumberUtils.INTEGER_ONE) @@ -341,7 +341,7 @@ public class SIAccountBiz extends Service { //salaryAcctProgressService.initProgress(tenantKey + param.getBillMonth(), salaryAcctProgressDTO, employeeId, tenantKey); // 初始化进度 - SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO() + ProgressDTO initProgress = new ProgressDTO() .setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")) .setTitleLabelId(97515L) .setTotalQuantity(ids.size()) diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctProgressDTO.java b/src/com/engine/salary/entity/progress/ProgressDTO.java similarity index 79% rename from src/com/engine/salary/entity/salaryacct/dto/SalaryAcctProgressDTO.java rename to src/com/engine/salary/entity/progress/ProgressDTO.java index 7258b40a4..1401eaaef 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctProgressDTO.java +++ b/src/com/engine/salary/entity/progress/ProgressDTO.java @@ -1,4 +1,4 @@ -package com.engine.salary.entity.salaryacct.dto; +package com.engine.salary.entity.progress; import lombok.AllArgsConstructor; import lombok.Builder; @@ -10,18 +10,19 @@ import java.io.Serializable; import java.math.BigDecimal; /** - * @description: 核算进度 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 12/13/21 1:34 PM - * @version:v1.0 - */ + * 进度 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor -public class SalaryAcctProgressDTO implements Serializable { +public class ProgressDTO implements Serializable { /** * 当前步骤名称 diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAccResultListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAccResultListDTO.java deleted file mode 100644 index f294ed26c..000000000 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAccResultListDTO.java +++ /dev/null @@ -1,39 +0,0 @@ -//package com.engine.salary.entity.salaryacct.dto; -// -//import com.fasterxml.jackson.databind.annotation.JsonSerialize; -//import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -//import com.weaver.hrm.salary.common.WeaTableColumnWapper; -//import io.swagger.annotations.ApiModel; -//import io.swagger.annotations.ApiModelProperty; -//import lombok.AllArgsConstructor; -//import lombok.Builder; -//import lombok.Data; -//import lombok.NoArgsConstructor; -// -//import java.util.List; -//import java.util.Map; -// -///** -// * @description: 核算结果列表 -// * @author: xiajun -// * @modified By: xiajun -// * @date: Created in 12/6/21 6:53 PM -// * @version:v1.0 -// */ -//@Data -//@Builder -//@NoArgsConstructor -//@AllArgsConstructor -////"核算结果列表") -//public class SalaryAccResultListDTO { -// -// //动态表头") -// private List columns; -// -// //列表数据") -// private List> data; -// -// @JsonSerialize(using = ToStringSerializer.class) -// //列表总数") -// private Long total; -//} diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctDTO.java deleted file mode 100644 index 03db18e83..000000000 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -//package com.engine.salary.entity.salaryacct.dto; -// -//import io.swagger.annotations.ApiModelProperty; -//import lombok.AllArgsConstructor; -//import lombok.Builder; -//import lombok.Data; -//import lombok.NoArgsConstructor; -// -///** -// * @description: 薪资核算 -// * @author: xiajun -// * @modified By: xiajun -// * @date: Created in 12/16/21 8:40 PM -// * @version:v1.0 -// */ -//@Data -//@Builder -//@NoArgsConstructor -//@AllArgsConstructor -//public class SalaryAcctDTO { -// -// //是否正在核算") -// private boolean acctInProgress; -//} diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java index 1c786c73d..200da6442 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java @@ -6,7 +6,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculateBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculatePriorityBO; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; +import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; @@ -109,8 +109,8 @@ public class SalaryAcctManager extends Service { return ServiceUtil.getService(SalaryAcctCalculateServiceImpl.class, user); } - private SalaryAcctProgressService getSalaryAcctProgressService(User user) { - return ServiceUtil.getService(SalaryAcctProgressServiceImpl.class, user); + private ProgressService getSalaryAcctProgressService(User user) { + return ServiceUtil.getService(ProgressServiceImpl.class, user); } private DataSourceTransactionManager dataSourceTransactionManager; @@ -202,12 +202,12 @@ public class SalaryAcctManager extends Service { simpleEmployee.setEmployeeId((long) user.getUID()); // 检查是否正在核算中 - SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId); + ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId); if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { return; } // 初始化进度 - SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO() + ProgressDTO initProgress = new ProgressDTO() .setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")) .setTitleLabelId(97515L) .setTotalQuantity(NumberUtils.INTEGER_ONE) @@ -297,7 +297,7 @@ public class SalaryAcctManager extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(103378, "薪资核算人员不能为空")); } // 11.1、初始化进度 - SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); + ProgressDTO initProgress = new ProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, initProgress); // 12、对薪资核算人员进行拆分 List> partition = Lists.partition(salaryAcctEmployeePOS, 5000); diff --git a/src/com/engine/salary/service/SalaryAcctProgressService.java b/src/com/engine/salary/service/ProgressService.java similarity index 75% rename from src/com/engine/salary/service/SalaryAcctProgressService.java rename to src/com/engine/salary/service/ProgressService.java index 1dab7e710..5a741c918 100644 --- a/src/com/engine/salary/service/SalaryAcctProgressService.java +++ b/src/com/engine/salary/service/ProgressService.java @@ -1,18 +1,18 @@ package com.engine.salary.service; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; +import com.engine.salary.entity.progress.ProgressDTO; import java.math.BigDecimal; /** - * 核算进度 + * 进度条 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ -public interface SalaryAcctProgressService { +public interface ProgressService { /** * 初始化核算进度条 @@ -20,7 +20,7 @@ public interface SalaryAcctProgressService { * @param salaryAcctProgress * @return */ - void initProgress(String cacheKey, SalaryAcctProgressDTO salaryAcctProgress); + void initProgress(String cacheKey, ProgressDTO salaryAcctProgress); /** * 更新进度条 @@ -31,7 +31,12 @@ public interface SalaryAcctProgressService { void getAndAddCalculatedQty(String cacheKey, Integer calculatedQuantity); - // + /** + * 更新进度条 + * @param cacheKey + * @param calculatedQuantity + * @param message + */ void getAndAddCalculatedQty(String cacheKey, Integer calculatedQuantity, String message); /** @@ -61,7 +66,7 @@ public interface SalaryAcctProgressService { * 获取进度条 * @return */ - SalaryAcctProgressDTO getProgress(String cacheKey); + ProgressDTO getProgress(String cacheKey); /** * 删除redis中的缓存 @@ -69,5 +74,5 @@ public interface SalaryAcctProgressService { * @param cacheKey * @return */ - SalaryAcctProgressDTO del(String cacheKey); + ProgressDTO del(String cacheKey); } diff --git a/src/com/engine/salary/service/impl/ProgressServiceImpl.java b/src/com/engine/salary/service/impl/ProgressServiceImpl.java new file mode 100644 index 000000000..80f1e8d5a --- /dev/null +++ b/src/com/engine/salary/service/impl/ProgressServiceImpl.java @@ -0,0 +1,128 @@ +package com.engine.salary.service.impl; + +import com.cloudstore.dev.api.util.Util_DataCache; +import com.engine.core.impl.Service; +import com.engine.salary.entity.progress.ProgressDTO; +import com.engine.salary.service.ProgressService; +import com.engine.salary.util.JsonUtil; +import org.apache.commons.lang3.StringUtils; +import weaver.wechat.util.Utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * 进度条 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class ProgressServiceImpl extends Service implements ProgressService { + + + @Override + public void initProgress(String cacheKey, ProgressDTO progressDTO) { + Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(progressDTO)); + } + + @Override + public synchronized void getAndAddCalculatedQty(String cacheKey, Integer calculatedQuantity) { + String resultStr = (String) Util_DataCache.getObjVal(cacheKey); + if (StringUtils.isNotEmpty(resultStr)) { + ProgressDTO progressDTO = JsonUtil.parseObject(resultStr, ProgressDTO.class); + if (progressDTO == null || !progressDTO.isStatus()) { + return; + } + Integer currentCalculatedQuantity = progressDTO.getCalculatedQuantity() + calculatedQuantity; + progressDTO.setCalculatedQuantity( + currentCalculatedQuantity > progressDTO.getTotalQuantity() ? progressDTO.getTotalQuantity() : currentCalculatedQuantity); + BigDecimal progress = BigDecimal.valueOf(progressDTO.getCalculatedQuantity()) + .divide(BigDecimal.valueOf(progressDTO.getTotalQuantity()), 4, RoundingMode.HALF_DOWN); + progressDTO.setProgress(progress.compareTo(BigDecimal.ONE) > 0 ? BigDecimal.ONE : progress); + Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(progressDTO)); + } + } + + @Override + public synchronized void getAndAddCalculatedQty(String cacheKey, Integer calculatedQuantity, String message) { + String resultStr = (String) Util_DataCache.getObjVal(cacheKey); + if (StringUtils.isNotEmpty(resultStr)) { + ProgressDTO progressDTO = JsonUtil.parseObject(resultStr, ProgressDTO.class); + if (progressDTO == null || !progressDTO.isStatus()) { + return; + } + Integer currentCalculatedQuantity = progressDTO.getCalculatedQuantity() + calculatedQuantity; + progressDTO.setCalculatedQuantity( + currentCalculatedQuantity > progressDTO.getTotalQuantity() ? progressDTO.getTotalQuantity() : currentCalculatedQuantity); + BigDecimal progress = BigDecimal.valueOf(progressDTO.getCalculatedQuantity()) + .divide(BigDecimal.valueOf(progressDTO.getTotalQuantity()), 4, RoundingMode.HALF_DOWN); + progressDTO.setProgress(progress.compareTo(BigDecimal.ONE) > 0 ? BigDecimal.ONE : progress); + + if (StringUtils.isNotBlank(message)) { + progressDTO.setMessage(Utils.null2String(progressDTO.getMessage()) + message); + } + Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(progressDTO)); + } + } + + @Override + public void fail(String cacheKey, String message) { + ProgressDTO progressDTO = new ProgressDTO(); + progressDTO.setStatus(false); + progressDTO.setMessage(message); + progressDTO.setCheckStatus(true); + Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(progressDTO)); + } + + @Override + public void finish(String cacheKey, boolean checkStatus) { + String resultStr = (String) Util_DataCache.getObjVal(cacheKey); + if (StringUtils.isNotEmpty(resultStr)) { + ProgressDTO progressDTO = JsonUtil.parseObject(resultStr, ProgressDTO.class); + if (progressDTO == null || !progressDTO.isStatus()) { + return; + } + progressDTO.setTitle("操作完成"); + progressDTO.setCalculatedQuantity(progressDTO.getTotalQuantity()); + progressDTO.setProgress(BigDecimal.ONE); + progressDTO.setCheckStatus(checkStatus); + Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(progressDTO)); + } + } + + @Override + public void updateProgress(String cacheKey, BigDecimal progress, boolean checkStatus) { + String resultStr = (String) Util_DataCache.getObjVal(cacheKey); + if (StringUtils.isNotEmpty(resultStr)) { + ProgressDTO progressDTO = JsonUtil.parseObject(resultStr, ProgressDTO.class); + if (progressDTO == null || !progressDTO.isStatus()) { + return; + } + progressDTO.setTitle("处理中"); + progressDTO.setCalculatedQuantity(progressDTO.getTotalQuantity()); + progressDTO.setProgress(progress); + progressDTO.setCheckStatus(checkStatus); + Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(progressDTO)); + } + } + + @Override + public ProgressDTO getProgress(String cacheKey) { + String resultStr = (String) Util_DataCache.getObjVal(cacheKey); + if (StringUtils.isEmpty(resultStr)) { + return null; + } + return JsonUtil.parseObject(resultStr, ProgressDTO.class); + } + + @Override + public ProgressDTO del(String cacheKey) { + Util_DataCache.clearVal(cacheKey); + ProgressDTO salaryAcctProgressDTO = new ProgressDTO(); + salaryAcctProgressDTO.setMessage("操作失败"); + salaryAcctProgressDTO.setStatus(false); + return salaryAcctProgressDTO; + } +} diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 768975e43..69eb5b02e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -97,8 +97,8 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc return (SalaryAcctResultTempService) ServiceUtil.getService(SalaryAcctResultTempServiceImpl.class, user); } - private SalaryAcctProgressService getSalaryAcctProgressService(User user) { - return (SalaryAcctProgressService) ServiceUtil.getService(SalaryAcctProgressServiceImpl.class, user); + private ProgressService getSalaryAcctProgressService(User user) { + return (ProgressService) ServiceUtil.getService(ProgressServiceImpl.class, user); } private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { diff --git a/src/com/engine/salary/service/impl/SalaryAcctProgressServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctProgressServiceImpl.java deleted file mode 100644 index 0cb90e377..000000000 --- a/src/com/engine/salary/service/impl/SalaryAcctProgressServiceImpl.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.engine.salary.service.impl; - -import com.cloudstore.dev.api.util.Util_DataCache; -import com.engine.core.impl.Service; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; -import com.engine.salary.service.SalaryAcctProgressService; -import com.engine.salary.util.JsonUtil; -import org.apache.commons.lang3.StringUtils; -import weaver.wechat.util.Utils; - -import java.math.BigDecimal; -import java.math.RoundingMode; - -/** - * 核算进度条 - *

Copyright: Copyright (c) 2022

- *

Company: 泛微软件

- * - * @author qiantao - * @version 1.0 - **/ -public class SalaryAcctProgressServiceImpl extends Service implements SalaryAcctProgressService { - - - @Override - public void initProgress(String cacheKey, SalaryAcctProgressDTO salaryAcctProgress) { - Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryAcctProgress)); - } - - @Override - public synchronized void getAndAddCalculatedQty(String cacheKey, Integer calculatedQuantity) { - String resultStr = (String) Util_DataCache.getObjVal(cacheKey); - if (StringUtils.isNotEmpty(resultStr)) { - SalaryAcctProgressDTO salaryAcctProgress = JsonUtil.parseObject(resultStr, SalaryAcctProgressDTO.class); - if (salaryAcctProgress == null || !salaryAcctProgress.isStatus()) { - return; - } - Integer currentCalculatedQuantity = salaryAcctProgress.getCalculatedQuantity() + calculatedQuantity; - salaryAcctProgress.setCalculatedQuantity( - currentCalculatedQuantity > salaryAcctProgress.getTotalQuantity() ? salaryAcctProgress.getTotalQuantity() : currentCalculatedQuantity); - BigDecimal progress = BigDecimal.valueOf(salaryAcctProgress.getCalculatedQuantity()) - .divide(BigDecimal.valueOf(salaryAcctProgress.getTotalQuantity()), 4, RoundingMode.HALF_DOWN); - salaryAcctProgress.setProgress(progress.compareTo(BigDecimal.ONE) > 0 ? BigDecimal.ONE : progress); - Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryAcctProgress)); - } - } - - @Override - public synchronized void getAndAddCalculatedQty(String cacheKey, Integer calculatedQuantity, String message) { - String resultStr = (String) Util_DataCache.getObjVal(cacheKey); - if (StringUtils.isNotEmpty(resultStr)) { - SalaryAcctProgressDTO salaryAcctProgress = JsonUtil.parseObject(resultStr, SalaryAcctProgressDTO.class); - if (salaryAcctProgress == null || !salaryAcctProgress.isStatus()) { - return; - } - Integer currentCalculatedQuantity = salaryAcctProgress.getCalculatedQuantity() + calculatedQuantity; - salaryAcctProgress.setCalculatedQuantity( - currentCalculatedQuantity > salaryAcctProgress.getTotalQuantity() ? salaryAcctProgress.getTotalQuantity() : currentCalculatedQuantity); - BigDecimal progress = BigDecimal.valueOf(salaryAcctProgress.getCalculatedQuantity()) - .divide(BigDecimal.valueOf(salaryAcctProgress.getTotalQuantity()), 4, RoundingMode.HALF_DOWN); - salaryAcctProgress.setProgress(progress.compareTo(BigDecimal.ONE) > 0 ? BigDecimal.ONE : progress); - - if (StringUtils.isNotBlank(message)) { - salaryAcctProgress.setMessage(Utils.null2String(salaryAcctProgress.getMessage()) + message); - } - Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryAcctProgress)); - } - } - - @Override - public void fail(String cacheKey, String message) { - SalaryAcctProgressDTO salaryAcctProgress = new SalaryAcctProgressDTO(); - salaryAcctProgress.setStatus(false); - salaryAcctProgress.setMessage(message); - salaryAcctProgress.setCheckStatus(true); - Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryAcctProgress)); - } - - @Override - public void finish(String cacheKey, boolean checkStatus) { - String resultStr = (String) Util_DataCache.getObjVal(cacheKey); - if (StringUtils.isNotEmpty(resultStr)) { - SalaryAcctProgressDTO salaryAcctProgress = JsonUtil.parseObject(resultStr, SalaryAcctProgressDTO.class); - if (salaryAcctProgress == null || !salaryAcctProgress.isStatus()) { - return; - } - salaryAcctProgress.setTitle("核算完成"); - salaryAcctProgress.setCalculatedQuantity(salaryAcctProgress.getTotalQuantity()); - salaryAcctProgress.setProgress(BigDecimal.ONE); - salaryAcctProgress.setCheckStatus(checkStatus); - Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryAcctProgress)); - } - } - - @Override - public void updateProgress(String cacheKey, BigDecimal progress, boolean checkStatus) { - String resultStr = (String) Util_DataCache.getObjVal(cacheKey); - if (StringUtils.isNotEmpty(resultStr)) { - SalaryAcctProgressDTO salaryAcctProgress = JsonUtil.parseObject(resultStr, SalaryAcctProgressDTO.class); - if (salaryAcctProgress == null || !salaryAcctProgress.isStatus()) { - return; - } - salaryAcctProgress.setTitle("核算中"); - salaryAcctProgress.setCalculatedQuantity(salaryAcctProgress.getTotalQuantity()); - salaryAcctProgress.setProgress(progress); - salaryAcctProgress.setCheckStatus(checkStatus); - Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryAcctProgress)); - } - } - - @Override - public SalaryAcctProgressDTO getProgress(String cacheKey) { - String resultStr = (String) Util_DataCache.getObjVal(cacheKey); - if (StringUtils.isEmpty(resultStr)) { - return null; - } - return JsonUtil.parseObject(resultStr, SalaryAcctProgressDTO.class); - } - - @Override - public SalaryAcctProgressDTO del(String cacheKey) { - Util_DataCache.clearVal(cacheKey); - SalaryAcctProgressDTO salaryAcctProgressDTO = new SalaryAcctProgressDTO(); - salaryAcctProgressDTO.setMessage("核算失败"); - salaryAcctProgressDTO.setStatus(false); - return salaryAcctProgressDTO; - } -} diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index bcab4e6db..bcc1d8b20 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -11,7 +11,7 @@ import com.engine.salary.entity.report.bo.SalaryAcctResultReportBO; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.entity.salaryacct.bo.*; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; +import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.*; @@ -120,8 +120,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalaryAcctCalculateServiceImpl.class, user); } - private SalaryAcctProgressService getSalaryAcctProgressService(User user) { - return ServiceUtil.getService(SalaryAcctProgressServiceImpl.class, user); + private ProgressService getSalaryAcctProgressService(User user) { + return ServiceUtil.getService(ProgressServiceImpl.class, user); } private DataSourceTransactionManager dataSourceTransactionManager; @@ -720,7 +720,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(103378, "薪资核算人员不能为空")); } // 11.1、初始化进度 - SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); + ProgressDTO initProgress = new ProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), initProgress); // 12、对薪资核算人员进行拆分 List> partition = Lists.partition(salaryAcctEmployeePOS, 5000); diff --git a/src/com/engine/salary/web/SalaryProgressController.java b/src/com/engine/salary/web/SalaryProgressController.java index d497021e6..5219240a0 100644 --- a/src/com/engine/salary/web/SalaryProgressController.java +++ b/src/com/engine/salary/web/SalaryProgressController.java @@ -1,9 +1,9 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; -import com.engine.salary.service.SalaryAcctProgressService; -import com.engine.salary.service.impl.SalaryAcctProgressServiceImpl; +import com.engine.salary.entity.progress.ProgressDTO; +import com.engine.salary.service.ProgressService; +import com.engine.salary.service.impl.ProgressServiceImpl; import com.engine.salary.util.ResponseResult; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -27,8 +27,8 @@ import javax.ws.rs.core.MediaType; **/ public class SalaryProgressController { - private SalaryAcctProgressService getSalaryAcctProgressService(User user) { - return (SalaryAcctProgressService) ServiceUtil.getService(SalaryAcctProgressServiceImpl.class, user); + private ProgressService getSalaryAcctProgressService(User user) { + return (ProgressService) ServiceUtil.getService(ProgressServiceImpl.class, user); } //获取进度条 @@ -37,7 +37,7 @@ public class SalaryProgressController { @Produces(MediaType.APPLICATION_JSON) public String getRate(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "cacheKey") String cacheKey) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryAcctProgressService(user)::getProgress, cacheKey); + return new ResponseResult(user).run(getSalaryAcctProgressService(user)::getProgress, cacheKey); } // @ApiOperation("获取进度条") diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 4ddaf69b5..856d6698e 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -6,7 +6,7 @@ import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; +import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; @@ -62,8 +62,8 @@ public class SalaryAcctResultWrapper extends Service { return ServiceUtil.getService(SalaryAcctEmployeeWrapper.class, user); } - private SalaryAcctProgressService getSalaryAcctProgressService(User user) { - return ServiceUtil.getService(SalaryAcctProgressServiceImpl.class, user); + private ProgressService getSalaryAcctProgressService(User user) { + return ServiceUtil.getService(ProgressServiceImpl.class, user); } // private SalaryCheckResultService salaryCheckResultService; @@ -225,12 +225,12 @@ public class SalaryAcctResultWrapper extends Service { // 检查薪资核算人员的个税扣缴义务人 getSalaryAcctEmployeeWrapper(user).checkTaxAgent(calculateParam.getSalaryAcctRecordId()); // 检查是否正在核算中 - SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId()); + ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId()); if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { return; } // 初始化进度 - SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO() + ProgressDTO initProgress = new ProgressDTO() .setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")) .setTitleLabelId(97515L) .setTotalQuantity(NumberUtils.INTEGER_ONE) From 0e5eb1b11ea8a9c926711bce1acb4228e5e79cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 6 Jun 2023 11:48:19 +0800 Subject: [PATCH 131/245] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=8F=91?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/CustomSalarySend.java | 3 +- .../salary/service/ProgressService.java | 8 + .../service/impl/ProgressServiceImpl.java | 17 ++ .../service/impl/SalaryBillServiceImpl.java | 93 ++++++---- .../service/impl/SalarySendServiceImpl.java | 163 +++++++++--------- .../salary/web/SalaryBillController.java | 4 +- .../salary/wrapper/SalarySendWrapper.java | 19 +- .../wrapper/proxy/SalarySendWrapperProxy.java | 2 +- 8 files changed, 178 insertions(+), 131 deletions(-) diff --git a/src/com/customization/salary/CustomSalarySend.java b/src/com/customization/salary/CustomSalarySend.java index 4570f5d9c..d9ec73ad7 100644 --- a/src/com/customization/salary/CustomSalarySend.java +++ b/src/com/customization/salary/CustomSalarySend.java @@ -13,7 +13,7 @@ import java.util.Map; @ServiceDynamicProxy(target = SalarySendWrapper.class, desc = "薪资核算") public class CustomSalarySend extends AbstractServiceProxy implements SalarySendWrapperProxy { @Override - public Map grant(SalarySendGrantParam queryParam) { + public void grant(SalarySendGrantParam queryParam) { BaseBean baseBean = new BaseBean(); baseBean.writeLog("拦截工资单发送方法..."); @@ -22,7 +22,6 @@ public class CustomSalarySend extends AbstractServiceProxy implements SalarySend Object o = executeMethod(queryParam); //todo do some thing - return (Map)o; } @Override diff --git a/src/com/engine/salary/service/ProgressService.java b/src/com/engine/salary/service/ProgressService.java index 5a741c918..210ec62dd 100644 --- a/src/com/engine/salary/service/ProgressService.java +++ b/src/com/engine/salary/service/ProgressService.java @@ -55,6 +55,14 @@ public interface ProgressService { */ void finish(String cacheKey, boolean checkStatus); + /** + * 完成 + * @param cacheKey + * @param checkStatus + * @param message + */ + void finish(String cacheKey, boolean checkStatus,String message); + /** * 更新进度条 * diff --git a/src/com/engine/salary/service/impl/ProgressServiceImpl.java b/src/com/engine/salary/service/impl/ProgressServiceImpl.java index 80f1e8d5a..f855c50be 100644 --- a/src/com/engine/salary/service/impl/ProgressServiceImpl.java +++ b/src/com/engine/salary/service/impl/ProgressServiceImpl.java @@ -92,6 +92,23 @@ public class ProgressServiceImpl extends Service implements ProgressService { } } + @Override + public void finish(String cacheKey, boolean checkStatus, String message) { + String resultStr = (String) Util_DataCache.getObjVal(cacheKey); + if (StringUtils.isNotEmpty(resultStr)) { + ProgressDTO progressDTO = JsonUtil.parseObject(resultStr, ProgressDTO.class); + if (progressDTO == null || !progressDTO.isStatus()) { + return; + } + progressDTO.setTitle("操作完成"); + progressDTO.setCalculatedQuantity(progressDTO.getTotalQuantity()); + progressDTO.setProgress(BigDecimal.ONE); + progressDTO.setCheckStatus(checkStatus); + progressDTO.setMessage(message); + Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(progressDTO)); + } + } + @Override public void updateProgress(String cacheKey, BigDecimal progress, boolean checkStatus) { String resultStr = (String) Util_DataCache.getObjVal(cacheKey); diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index 2bcd09c4d..a21cfad46 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -6,7 +6,9 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySendBiz; import com.engine.salary.biz.SalarySendInfoBiz; +import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO; import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO; @@ -43,15 +45,19 @@ import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** - * @Description: 工资单发放 - * @Author: wangxiangzhong - * @Date: 2021-12-11 11:28 - */ + * 工资单发放 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Slf4j public class SalaryBillServiceImpl extends Service implements SalaryBillService { @@ -109,7 +115,9 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService private SalarySobItemService salarySobItemService; -// private SalaryBillProgressService salaryBillProgressService; + private ProgressService getProgressService(User user) { + return ServiceUtil.getService(ProgressServiceImpl.class, user); + } /** * 工资单发放 start @@ -140,15 +148,21 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(204428, "请完善补发工资单模板设置")); } // 2.检查是否正在发送中 -// SalaryBillProgressDTO salaryBillProgress = salaryBillProgressService.getProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + param.getSalarySendId()); -// if (Objects.nonNull(salaryBillProgress) && salaryBillProgress.isStatus() -// && Optional.ofNullable(salaryBillProgress.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(136104, "有其他人员正在发送中,请等待其他人员发送结束后再操作")); -// } + ProgressDTO salaryBillProgress = getProgressService(user).getProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + param.getSalarySendId()); + if (Objects.nonNull(salaryBillProgress) && salaryBillProgress.isStatus() + && Optional.ofNullable(salaryBillProgress.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(136104, "有其他人员正在发送中,请等待其他人员发送结束后再操作")); + } // 初始化进度 -// SalaryBillProgressDTO initProgress = salaryBillProgressService.buildInitProgress(SalaryI18nUtil.getI18nLabel(136097, "发送中"), 136097, NumberUtils.INTEGER_ONE, NumberUtils.INTEGER_ZERO, BigDecimal.ZERO); -// salaryBillProgressService.initProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), initProgress); -// String tenantName = TenantContext.getCurrentTenant().getTenantName(); + ProgressDTO initProgress = ProgressDTO.builder() + .title(SalaryI18nUtil.getI18nLabel(136097, "发送中")) + .totalQuantity(NumberUtils.INTEGER_ZERO) + .calculatedQuantity(NumberUtils.INTEGER_ZERO) + .progress(BigDecimal.ZERO) + .status(true) + .message("") + .build(); + getProgressService(user).initProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), initProgress); List ids = param.getIds(); @@ -209,14 +223,13 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService + SalaryI18nUtil.getI18nLabel(134807, "成功条数") + "[" + (successCount) + "], " + SalaryI18nUtil.getI18nLabel(134808, "失败条数") + "[" + (total - successCount) + "]"; // 发送进度完成 -// salaryBillProgressService.finish(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), messsage, true); + getProgressService(user).finish(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), true, messsage); // log.info("工资单发送组装耗时:{}毫秒;工资单发送消息中心耗时:{}毫秒;工资单数据更改总耗时:{}毫秒;工资单发送总耗时:{}毫秒;工资单云桥图片地址:{}", l3 - l2, l4 - l3, l5 - l4, System.currentTimeMillis() - l, // salaryBillSendParam == null ? "" : salaryBillSendParam.getPicUrl()); } catch (Exception e) { log.info("发送出错:{}", e.getMessage(), e); // 发送进度失败 - -// salaryBillProgressService.fail(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), SalaryI18nUtil.getI18nLabel(136118, "工资单发送出错") + ": " + e.getMessage()); + getProgressService(user).fail(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), SalaryI18nUtil.getI18nLabel(136118, "工资单发送出错") + ": " + e.getMessage()); } finally { } } @@ -348,9 +361,14 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService List employeeIds = list.stream().map(SalarySendInfoListDTO::getEmployeeId).collect(Collectors.toList()); // 初始化进度 -// SalaryBillProgressDTO initProgress = salaryBillProgressService -// .buildInitProgress("发送中", 136097, employeeIds.size() * 2 + 1, NumberUtils.INTEGER_ZERO, BigDecimal.ZERO); -// salaryBillProgressService.initProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), initProgress); + ProgressDTO initProgress = ProgressDTO.builder() + .title("发送中") + .totalQuantity(employeeIds.size() * 2 + 1) + .calculatedQuantity(NumberUtils.INTEGER_ZERO) + .progress(BigDecimal.ZERO) + .message("") + .build(); + getProgressService(user).initProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), initProgress); // 3.组装详情数据 // 获取薪资项目数据 List salaryAcctEmployees = Lists.newArrayList(); @@ -363,7 +381,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService List> partition = Lists.partition(employeeIds, partSize); for (List part : partition) { // 更新进度 -// salaryBillProgressService.getAndAddCalculatedQty(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salarySend.getId(), part.size()); + getProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), part.size()); /** 注意只有邮件才需要加密的核算数据 */ if (isEnableEmail) { List acctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdsAndEmployeeIds(Collections.singletonList(salarySend.getSalaryAccountingId()), part); @@ -411,7 +429,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService enableSendList.forEach(e -> { if (sendChannels.contains(MessageChannelEnum.MSG)) { - SalaryBillBO.sendMsg(salaryBillSendParam, Long.valueOf(e.get("id").toString()) , Long.valueOf( e.get("employeeId").toString())); + SalaryBillBO.sendMsg(salaryBillSendParam, Long.valueOf(e.get("id").toString()), Long.valueOf(e.get("employeeId").toString())); } if (sendChannels.contains(MessageChannelEnum.EMAIL)) { @@ -426,12 +444,12 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService .id(Long.valueOf(e.get("id").toString())) .build()); // 更新发送进度 -// index.addAndGet(1); -// part.addAndGet(1); -// if (index.get() % 100 == 0 || index.get() >= total) { -// salaryBillProgressService.getAndAddCalculatedQty(SalaryCacheKey.SALARY_GRANT_PROGRESS, "" + salaryBillSendParam.getSalarySend().getId(), part.get()); -// part.set(0); -// } + index.addAndGet(1); + part.addAndGet(1); + if (index.get() % 100 == 0 || index.get() >= total) { + getProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salaryBillSendParam.getSalarySend().getId(), part.get()); + part.set(0); + } }); // 批量修改发送消息id if (CollectionUtils.isNotEmpty(sendInfoUpdateList)) { @@ -531,12 +549,15 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * @param salaryTemplate */ private void grantSendInfo(List ids, SalarySendPO salarySend, SalaryTemplatePO salaryTemplate) { + List> partition = Lists.partition(ids, 500); Date sendTime = new Date(); SalarySendInfoPO po = new SalarySendInfoPO(); po.setSendStatus(SalarySendStatusEnum.ALREADYSEND.getValue()); po.setSendTime(sendTime); po.setSalaryTemplate(JsonUtil.toJsonString(salaryTemplate)); - salarySendInfoMapper.updateGrantWithdraw(po, salarySend.getId(), Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()), ids); + partition.forEach(idsp -> { + salarySendInfoMapper.updateGrantWithdraw(po, salarySend.getId(), Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()), idsp); + }); } // /** @@ -599,7 +620,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService //// } // // // 检查是否正在撤回中 -// SalaryBillProgressDTO salaryBillProgress = salaryBillProgressService +// SalaryBillProgressDTO salaryBillProgress = getProgressService(user) // .getProgress(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId()); // if (Objects.nonNull(salaryBillProgress) && salaryBillProgress.isStatus() // && Optional.ofNullable(salaryBillProgress.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { @@ -607,9 +628,9 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // } // // // 初始化进度 -// SalaryBillProgressDTO initProgress = salaryBillProgressService +// SalaryBillProgressDTO initProgress = getProgressService(user) // .buildInitProgress("撤回中", 136106, NumberUtils.INTEGER_ONE, NumberUtils.INTEGER_ZERO, BigDecimal.ZERO); -// salaryBillProgressService.initProgress(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), initProgress); +// getProgressService(user).initProgress(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), initProgress); // // List ids = isRange ? getSalarySendRangeService(user).getSendInfoIdsBySalarySendIdAndOperateType(salarySend.getId(), rangeIds, SalarySendOperateTypeEnum.WITHDRAW) : param.getIds(); // // 异步执行撤回 @@ -670,9 +691,9 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // } // // // 初始化进度 -// SalaryBillProgressDTO initProgress = salaryBillProgressService +// SalaryBillProgressDTO initProgress = getProgressService(user) // .buildInitProgress("撤回中", 136106, enableWithdrawList.size() * 2 + 1, enableWithdrawList.size(), new BigDecimal("0.5")); -// salaryBillProgressService.initProgress(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), initProgress); +// getProgressService(user).initProgress(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), initProgress); // // // 1.撤回消息:先修改数据再发消息,避免出错后无法撤回 // String text = SalaryI18nUtil.getI18nLabel(184533, "此工资单已被撤回,如有问题,请联系管理员"); @@ -697,7 +718,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // index.addAndGet(1); // part.addAndGet(1); // if (index.get() % 100 == 0 || index.get() >= total) { -// salaryBillProgressService.getAndAddCalculatedQty(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), part.get()); +// getProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), part.get()); // part.set(0); // } // }); @@ -721,11 +742,11 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // + SalaryI18nUtil.getI18nLabel(134807, "成功条数") + "[" + (successCount) + "], " // + SalaryI18nUtil.getI18nLabel(134808, "失败条数") + "[" + (total - successCount) + "]"; // // 撤回进度完成 -// salaryBillProgressService.finish(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), messsage, true); +// getProgressService(user).finish(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), messsage, true); // } catch (Exception e) { // log.info("撤回出错:{}", e.getMessage(), e); // // 发送进度失败 -// salaryBillProgressService +// getProgressService(user) // .fail(SalaryCacheKey.SALARY_WITHDRAW_PROGRESS, "" + salarySend.getId(), SalaryI18nUtil.getI18nLabel(136142, "工资单撤回出错") + ": " + e.getMessage()); // } finally { // DSTenantKeyThreadVar.tenantKey.remove(); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 9d6672c10..a4e6d24fe 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -910,91 +910,86 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public Map grant(SalarySendGrantParam param) { - getSalaryBillService(user).grant(param); + if (param.getSalarySendId() == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100327, "工资单发放Id必传")); + } -// if (param.getSalarySendId() == null) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100327, "工资单发放Id必传")); -// } -// -// Long salarySendId = param.getSalarySendId(); -// Collection ids = param.getIds(); -// -// if (param.getSalarySendRangeIds() != null) { -// //如果传了范围id,则使用范围id发放 -// ids = getSalarySendRangeService(user) -// .getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); -// if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 -// throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); -// } -// } -// -// SalarySendPO salarySend = mapper.getById(salarySendId); -// if (salarySend == null) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在")); -// } -// // 已经冻结不能操作 -// if (Objects.equals(salarySend.getSendStatus(), NumberUtils.INTEGER_ONE)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "工资单已冻结")); -// } -// // 获取默认模板 -// List salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Collections.singletonList(salarySend.getSalarySobId())); -// if (CollectionUtils.isEmpty(salaryTemplates)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100518, "没有默认模板,无法发送")); -// } -// SalaryTemplatePO templatePO = salaryTemplates.get(0); -// Date sendTime = new Date(); -// // 获取可发送的列表 -// List> enableSendList = getEnableSendList(salarySend, ids, templatePO); -// // 1.发放 -// -// SalarySendInfoPO po = new SalarySendInfoPO(); -// po.setSendStatus(SalarySendStatusEnum.ALREADYSEND.getValue()); -// po.setSendTime(sendTime); -// po.setSalaryTemplate(JsonUtil.toJsonString(templatePO)); -// salarySendInfoMapper.updateGrantWithdraw(po, salarySendId, Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()), ids); -// -// -// List list = salarySendInfoMapper.listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).build()); -// //需要发送工资的人 -// -// List sendList = list.stream().filter(e -> e.getSendStatus().equals(SalarySendStatusEnum.ALREADYSEND.getValue())).collect(Collectors.toList()); -// int sendNum = sendList.size(); -// int sendTotal = list.size(); -// SalarySendPO salarySendNew = new SalarySendPO(); -// try { -// BeanUtils.copyProperties(salarySendNew, salarySend); -// } catch (IllegalAccessException e) { -// e.printStackTrace(); -// } catch (InvocationTargetException e) { -// e.printStackTrace(); -// } -// salarySendNew.setSendNum(sendNum); -// salarySendNew.setSendTotal(sendTotal); -// salarySendNew.setLastSendTime(sendTime); -// -// mapper.updateById(salarySendNew); -// -// List needSendList = Lists.newArrayList(); -// enableSendList.forEach(map -> { -// sendList.forEach(item -> { -// if (item.getId() == Long.valueOf(map.get("id").toString()).longValue()) { -// needSendList.add(item); -// } -// }); -// }); -// -// // 发送消息 -// param.setTemplate(templatePO); -// sendMessage(true, needSendList, param, salarySend); -// -// -// -// Map map = new HashMap<>(2); -// map.put("sendNum", sendNum); -// map.put("sendTotal", sendTotal); -// -// return map; - return null; + Long salarySendId = param.getSalarySendId(); + Collection ids = param.getIds(); + + if (param.getSalarySendRangeIds() != null) { + //如果传了范围id,则使用范围id发放 + ids = getSalarySendRangeService(user) + .getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); + if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 + throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); + } + } + + SalarySendPO salarySend = mapper.getById(salarySendId); + if (salarySend == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在")); + } + // 已经冻结不能操作 + if (Objects.equals(salarySend.getSendStatus(), NumberUtils.INTEGER_ONE)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "工资单已冻结")); + } + // 获取默认模板 + List salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Collections.singletonList(salarySend.getSalarySobId())); + if (CollectionUtils.isEmpty(salaryTemplates)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100518, "没有默认模板,无法发送")); + } + SalaryTemplatePO templatePO = salaryTemplates.get(0); + Date sendTime = new Date(); + // 获取可发送的列表 + List> enableSendList = getEnableSendList(salarySend, ids, templatePO); + // 1.发放 + + SalarySendInfoPO po = new SalarySendInfoPO(); + po.setSendStatus(SalarySendStatusEnum.ALREADYSEND.getValue()); + po.setSendTime(sendTime); + po.setSalaryTemplate(JsonUtil.toJsonString(templatePO)); + salarySendInfoMapper.updateGrantWithdraw(po, salarySendId, Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()), ids); + + + List list = salarySendInfoMapper.listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).build()); + //需要发送工资的人 + + List sendList = list.stream().filter(e -> e.getSendStatus().equals(SalarySendStatusEnum.ALREADYSEND.getValue())).collect(Collectors.toList()); + int sendNum = sendList.size(); + int sendTotal = list.size(); + SalarySendPO salarySendNew = new SalarySendPO(); + try { + BeanUtils.copyProperties(salarySendNew, salarySend); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + salarySendNew.setSendNum(sendNum); + salarySendNew.setSendTotal(sendTotal); + salarySendNew.setLastSendTime(sendTime); + + mapper.updateById(salarySendNew); + + List needSendList = Lists.newArrayList(); + enableSendList.forEach(map -> { + sendList.forEach(item -> { + if (item.getId() == Long.valueOf(map.get("id").toString()).longValue()) { + needSendList.add(item); + } + }); + }); + + // 发送消息 + param.setTemplate(templatePO); + sendMessage(true, needSendList, param, salarySend); + + Map map = new HashMap<>(2); + map.put("sendNum", sendNum); + map.put("sendTotal", sendTotal); + + return map; } /** diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 15b9311b0..33678fb49 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -535,9 +535,9 @@ public class SalaryBillController { log.info("salary recipient: {} em_auth_userid: {}", recipient, em_auth_userid); if (StringUtils.isNotBlank(recipient) && NumberUtils.isCreatable(recipient)) { user = new User(Integer.parseInt(recipient)); - } else if(StringUtils.isNotBlank(em_auth_userid) && NumberUtils.isCreatable(em_auth_userid)){ + } else if (StringUtils.isNotBlank(em_auth_userid) && NumberUtils.isCreatable(em_auth_userid)) { user = new User(Integer.parseInt(em_auth_userid)); - }else { + } else { user = HrmUserVarify.getUser(request, response); } return new ResponseResult>(user).run(getSalarySendWrapper(user)::mySalaryBill, salaryInfoId); diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 2f4a79838..19c3869e5 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -46,10 +46,13 @@ import java.util.*; import java.util.stream.Collectors; /** - * @Description: 工资单发放 - * @Author: wangxiangzhong - * @Date: 2022/3/16 13:57 - */ + * 工资单发放 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy { private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); @@ -59,6 +62,10 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy return ServiceUtil.getService(SalarySendServiceImpl.class, user); } + private SalaryBillService getSalaryBillService(User user) { + return ServiceUtil.getService(SalaryBillServiceImpl.class, user); + } + private SalaryTemplateService getSalaryTemplateService(User user) { return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user); } @@ -348,8 +355,8 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy * @param queryParam * @return */ - public Map grant(SalarySendGrantParam queryParam) { - return getSalarySendService(user).grant(queryParam); + public void grant(SalarySendGrantParam queryParam) { + getSalaryBillService(user).grant(queryParam); } /** diff --git a/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java b/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java index df063f4cd..b7bf6016c 100644 --- a/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java +++ b/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java @@ -21,7 +21,7 @@ public interface SalarySendWrapperProxy { * @param queryParam * @return */ - Map grant(SalarySendGrantParam queryParam); + void grant(SalarySendGrantParam queryParam); /** * 工资单撤回 From a308ee8d1fa0d5217c7af969ca0fa3da3b8dfeed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 6 Jun 2023 14:21:35 +0800 Subject: [PATCH 132/245] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=91=98=E5=B7=A5?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/CustomSalaryAcctRecordWrapper.java | 58 +++++++++++++++++++ .../salary/CustomSalarySend.java | 31 ---------- .../salary/CustomSalarySendWrapper.java | 45 ++++++++++++++ .../salary/service/SalaryBillService.java | 22 +++++-- .../service/impl/SalaryBillServiceImpl.java | 48 +++++++++++++++ .../service/impl/SalarySendServiceImpl.java | 4 +- 6 files changed, 171 insertions(+), 37 deletions(-) create mode 100644 src/com/customization/salary/CustomSalaryAcctRecordWrapper.java delete mode 100644 src/com/customization/salary/CustomSalarySend.java create mode 100644 src/com/customization/salary/CustomSalarySendWrapper.java diff --git a/src/com/customization/salary/CustomSalaryAcctRecordWrapper.java b/src/com/customization/salary/CustomSalaryAcctRecordWrapper.java new file mode 100644 index 000000000..1def59641 --- /dev/null +++ b/src/com/customization/salary/CustomSalaryAcctRecordWrapper.java @@ -0,0 +1,58 @@ +package com.customization.salary; + + +import com.engine.core.cfg.annotation.ServiceDynamicProxy; +import com.engine.core.cfg.annotation.ServiceMethodDynamicProxy; +import com.engine.core.impl.aop.AbstractServiceProxy; +import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; +import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; +import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.wrapper.SalaryAcctRecordWrapper; +import com.engine.salary.wrapper.proxy.SalaryAcctRecordWrapperProxy; +import weaver.general.BaseBean; + +import java.util.Collection; +import java.util.Map; + + +@ServiceDynamicProxy(target = SalaryAcctRecordWrapper.class, desc = "薪资核算") +public class CustomSalaryAcctRecordWrapper extends AbstractServiceProxy implements SalaryAcctRecordWrapperProxy { + + @Override + public PageInfo listPage(SalaryAcctRecordQueryParam queryParam) { + return null; + } + + @Override + public Map getForm(Long id) { + return null; + } + + @Override + public Long save(SalaryAcctRecordSaveParam saveParam) { + return null; + } + + @Override + public void delete(Collection ids) { + } + + @Override + public void file(Long id) { + } + + @Override + @ServiceMethodDynamicProxy(desc = "重新核算前,验证....") + public void reCalculate(Long id) { + + BaseBean baseBean = new BaseBean(); + baseBean.writeLog("拦截薪酬重新核算方法..."); + + //todo do some thing + + executeMethod(id); + + //todo do some thing + } +} \ No newline at end of file diff --git a/src/com/customization/salary/CustomSalarySend.java b/src/com/customization/salary/CustomSalarySend.java deleted file mode 100644 index d9ec73ad7..000000000 --- a/src/com/customization/salary/CustomSalarySend.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.customization.salary; - -import com.engine.core.cfg.annotation.ServiceDynamicProxy; -import com.engine.core.impl.aop.AbstractServiceProxy; -import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; -import com.engine.salary.entity.salaryBill.param.SalarySendWithdrawParam; -import com.engine.salary.wrapper.SalarySendWrapper; -import com.engine.salary.wrapper.proxy.SalarySendWrapperProxy; -import weaver.general.BaseBean; - -import java.util.Map; - -@ServiceDynamicProxy(target = SalarySendWrapper.class, desc = "薪资核算") -public class CustomSalarySend extends AbstractServiceProxy implements SalarySendWrapperProxy { - @Override - public void grant(SalarySendGrantParam queryParam) { - BaseBean baseBean = new BaseBean(); - baseBean.writeLog("拦截工资单发送方法..."); - - //todo do some thing - - Object o = executeMethod(queryParam); - - //todo do some thing - } - - @Override - public Map withdraw(SalarySendWithdrawParam queryParam) { - return null; - } -} diff --git a/src/com/customization/salary/CustomSalarySendWrapper.java b/src/com/customization/salary/CustomSalarySendWrapper.java new file mode 100644 index 000000000..0f35ad8e1 --- /dev/null +++ b/src/com/customization/salary/CustomSalarySendWrapper.java @@ -0,0 +1,45 @@ +package com.customization.salary; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.cfg.annotation.ServiceDynamicProxy; +import com.engine.core.cfg.annotation.ServiceMethodDynamicProxy; +import com.engine.core.impl.aop.AbstractServiceProxy; +import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; +import com.engine.salary.entity.salaryBill.param.SalarySendWithdrawParam; +import com.engine.salary.service.SalaryBillService; +import com.engine.salary.service.impl.SalaryBillServiceImpl; +import com.engine.salary.wrapper.SalarySendWrapper; +import com.engine.salary.wrapper.proxy.SalarySendWrapperProxy; +import weaver.hrm.User; + +import java.util.List; +import java.util.Map; + +@ServiceDynamicProxy(target = SalarySendWrapper.class, desc = "工资单发送") +public class CustomSalarySendWrapper extends AbstractServiceProxy implements SalarySendWrapperProxy { + + private SalaryBillService getSalaryBillService(User user) { + return ServiceUtil.getService(SalaryBillServiceImpl.class, user); + } + + @Override + @ServiceMethodDynamicProxy(desc = "拦截工资单发送方法") + public void grant(SalarySendGrantParam queryParam) { + Long salarySendId = queryParam.getSalarySendId(); + List ids = queryParam.getIds(); + List> sendInfoList = getSalaryBillService(new User()).getSendInfoList(salarySendId, ids); + //解析sendInfoList,拼接短信内容 + System.out.println("发送短信"); + + //todo do some thing + + executeMethod(queryParam); + + //todo do some thing + } + + @Override + public Map withdraw(SalarySendWithdrawParam queryParam) { + return null; + } +} diff --git a/src/com/engine/salary/service/SalaryBillService.java b/src/com/engine/salary/service/SalaryBillService.java index 00caeb1ee..a39bbd53d 100644 --- a/src/com/engine/salary/service/SalaryBillService.java +++ b/src/com/engine/salary/service/SalaryBillService.java @@ -2,11 +2,17 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; +import java.util.List; +import java.util.Map; + /** - * @Description: 工资单 - * @Author: wangxiangzhong - * @Date: 2021-12-11 11:28 - */ + * 工资单 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public interface SalaryBillService { /** @@ -16,6 +22,14 @@ public interface SalaryBillService { */ void grant(SalarySendGrantParam queryParam); + /** + * 获取内容 + * @param sendId + * @param ids + * @return + */ + List> getSendInfoList(Long sendId, List ids); + /** * 工资单撤回 * diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index a21cfad46..9d5ceaef2 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -402,6 +402,54 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService .buildDetailList(list, salaryAcctEmployees, salaryAcctResultValues); } + public List> getSendInfoList(Long sendId, List ids) { + + SalarySendPO salarySend = getSalarySendMapper().getById(sendId); + SalarySendInfoQueryParam queryParam = new SalarySendInfoQueryParam(); + queryParam.setSalarySendId(salarySend.getId()); +// // 空就是所有 +// queryParam.setIds(ids); + queryParam.setSendStatuss(Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue())); + // 2.获取基本数据 + List list = Lists.newArrayList(); + if (CollectionUtils.isEmpty(ids)) { + list = getSalarySendInfoMapper().list(queryParam); + } else { + List> partition = Lists.partition(ids, 500); + for (List idsPart : partition) { + queryParam.setIds(idsPart); + list.addAll(getSalarySendInfoMapper().list(queryParam)); + } + } + List salaryAcctEmployeeList = this.getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salarySend.getSalaryAccountingId()); + List acctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + list = list.stream().filter(f -> acctEmployeeIds.contains(f.getEmployeeId())).collect(Collectors.toList()); + + List employeeIds = list.stream().map(SalarySendInfoListDTO::getEmployeeId).collect(Collectors.toList()); + + // 3.组装详情数据 + // 获取薪资项目数据 + List salaryAcctEmployees = Lists.newArrayList(); + List salaryAcctResultValues = Lists.newArrayList(); + + //是否需要发送邮件 + if (CollectionUtils.isNotEmpty(ids)) { + int partSize = 100;// 分片大小,越小进度条跑得越短平快,但是总体速度更慢 + List> partition = Lists.partition(employeeIds, partSize); + for (List part : partition) { + // 更新进度 + List acctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdsAndEmployeeIds(Collections.singletonList(salarySend.getSalaryAccountingId()), part); + salaryAcctEmployees.addAll(acctEmployees); + salaryAcctResultValues.addAll(getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(SalaryEntityUtil.properties(acctEmployees, SalaryAcctEmployeePO::getId, Collectors.toList()))); + } + } else { + salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salarySend.getSalaryAccountingId()); + salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singletonList(salarySend.getSalaryAccountingId())); + } + return getSalarySendService(user) + .buildDetailList(list, salaryAcctEmployees, salaryAcctResultValues); + } + /** * 发送消息 * diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index a4e6d24fe..46c7cdd0b 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -800,9 +800,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService return listMaps; } // 所有个税扣缴义务人 - Map taxAgentMap = SalaryEntityUtil.convert2Map(getTaxAgentService(user).listAll(), TaxAgentPO::getId, TaxAgentPO::getName); +// Map taxAgentMap = SalaryEntityUtil.convert2Map(getTaxAgentService(user).listAll(), TaxAgentPO::getId, TaxAgentPO::getName); // 按人员分组核算数据 - Map> relationSalaryAcctEmployeeMap = SalaryEntityUtil.group2Map(salaryAcctEmployees, SalaryAcctEmployeePO::getEmployeeId); +// Map> relationSalaryAcctEmployeeMap = SalaryEntityUtil.group2Map(salaryAcctEmployees, SalaryAcctEmployeePO::getEmployeeId); Map salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployees, salaryAcctEmployee -> salaryAcctEmployee.getEmployeeId() + "-" + salaryAcctEmployee.getTaxAgentId()); Map> singleEmpAcctMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); List employeeIds = list.stream().map(SalarySendInfoListDTO::getEmployeeId).distinct().collect(Collectors.toList()); From 1584a27fe8fb3e67f8a180aa6d65bb5a4951bda5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 6 Jun 2023 14:44:00 +0800 Subject: [PATCH 133/245] =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E6=89=A3=E7=BC=B4?= =?UTF-8?q?=E4=B9=89=E5=8A=A1=E4=BA=BA=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/entity/taxagent/dto/TaxAgentFormDTO.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/engine/salary/entity/taxagent/dto/TaxAgentFormDTO.java b/src/com/engine/salary/entity/taxagent/dto/TaxAgentFormDTO.java index e0b011319..e9f7d5cbd 100644 --- a/src/com/engine/salary/entity/taxagent/dto/TaxAgentFormDTO.java +++ b/src/com/engine/salary/entity/taxagent/dto/TaxAgentFormDTO.java @@ -29,6 +29,9 @@ public class TaxAgentFormDTO { //管理员 private List adminUserIds; + //排序 + private Integer sortedIndex; + //备注 private String description; } From f15475369896cb5e1ed196350763081654f8688b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 6 Jun 2023 15:02:53 +0800 Subject: [PATCH 134/245] =?UTF-8?q?=E6=8B=A6=E6=88=AA=E7=9F=AD=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/customization/salary/CustomSalarySendWrapper.java | 6 ++++-- src/com/engine/salary/service/SalaryBillService.java | 2 +- .../engine/salary/service/impl/SalaryBillServiceImpl.java | 4 +++- src/com/engine/salary/wrapper/SalarySendWrapper.java | 4 ++-- .../engine/salary/wrapper/proxy/SalarySendWrapperProxy.java | 2 +- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/com/customization/salary/CustomSalarySendWrapper.java b/src/com/customization/salary/CustomSalarySendWrapper.java index 0f35ad8e1..815b9b611 100644 --- a/src/com/customization/salary/CustomSalarySendWrapper.java +++ b/src/com/customization/salary/CustomSalarySendWrapper.java @@ -24,7 +24,7 @@ public class CustomSalarySendWrapper extends AbstractServiceProxy implements Sal @Override @ServiceMethodDynamicProxy(desc = "拦截工资单发送方法") - public void grant(SalarySendGrantParam queryParam) { + public Map grant(SalarySendGrantParam queryParam) { Long salarySendId = queryParam.getSalarySendId(); List ids = queryParam.getIds(); List> sendInfoList = getSalaryBillService(new User()).getSendInfoList(salarySendId, ids); @@ -33,9 +33,11 @@ public class CustomSalarySendWrapper extends AbstractServiceProxy implements Sal //todo do some thing - executeMethod(queryParam); + Map result = (Map) executeMethod(queryParam); //todo do some thing + + return result; } @Override diff --git a/src/com/engine/salary/service/SalaryBillService.java b/src/com/engine/salary/service/SalaryBillService.java index a39bbd53d..9a37671a0 100644 --- a/src/com/engine/salary/service/SalaryBillService.java +++ b/src/com/engine/salary/service/SalaryBillService.java @@ -20,7 +20,7 @@ public interface SalaryBillService { * * @param queryParam */ - void grant(SalarySendGrantParam queryParam); + Map grant(SalarySendGrantParam queryParam); /** * 获取内容 diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index 9d5ceaef2..bf3bbf903 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -123,7 +123,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * 工资单发放 start **********************************************************************/ @Override - public void grant(SalarySendGrantParam param) { + public Map grant(SalarySendGrantParam param) { // 1.检查和获取工资单发放 SalarySendPO salarySend = checkAndGetSalarySend(param.getSalarySendId()); // // 已经冻结不能操作 @@ -183,6 +183,8 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService } }; ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryBillGrant", localRunnable); + + return new HashMap<>(); } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 19c3869e5..e37266402 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -355,8 +355,8 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy * @param queryParam * @return */ - public void grant(SalarySendGrantParam queryParam) { - getSalaryBillService(user).grant(queryParam); + public Map grant(SalarySendGrantParam queryParam) { + return getSalarySendService(user).grant(queryParam); } /** diff --git a/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java b/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java index b7bf6016c..df063f4cd 100644 --- a/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java +++ b/src/com/engine/salary/wrapper/proxy/SalarySendWrapperProxy.java @@ -21,7 +21,7 @@ public interface SalarySendWrapperProxy { * @param queryParam * @return */ - void grant(SalarySendGrantParam queryParam); + Map grant(SalarySendGrantParam queryParam); /** * 工资单撤回 From 4a258aa45b26552e3ede1a3d1a2f6816ddea1868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 6 Jun 2023 16:40:09 +0800 Subject: [PATCH 135/245] =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E5=8F=91=E9=80=81=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/CustomSalaryAcctRecordWrapper.java | 58 ------------------- .../salary/CustomSalarySendWrapper.java | 47 --------------- .../salary/wrapper/SalarySendWrapper.java | 2 +- 3 files changed, 1 insertion(+), 106 deletions(-) delete mode 100644 src/com/customization/salary/CustomSalaryAcctRecordWrapper.java delete mode 100644 src/com/customization/salary/CustomSalarySendWrapper.java diff --git a/src/com/customization/salary/CustomSalaryAcctRecordWrapper.java b/src/com/customization/salary/CustomSalaryAcctRecordWrapper.java deleted file mode 100644 index 1def59641..000000000 --- a/src/com/customization/salary/CustomSalaryAcctRecordWrapper.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.customization.salary; - - -import com.engine.core.cfg.annotation.ServiceDynamicProxy; -import com.engine.core.cfg.annotation.ServiceMethodDynamicProxy; -import com.engine.core.impl.aop.AbstractServiceProxy; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; -import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; -import com.engine.salary.util.page.PageInfo; -import com.engine.salary.wrapper.SalaryAcctRecordWrapper; -import com.engine.salary.wrapper.proxy.SalaryAcctRecordWrapperProxy; -import weaver.general.BaseBean; - -import java.util.Collection; -import java.util.Map; - - -@ServiceDynamicProxy(target = SalaryAcctRecordWrapper.class, desc = "薪资核算") -public class CustomSalaryAcctRecordWrapper extends AbstractServiceProxy implements SalaryAcctRecordWrapperProxy { - - @Override - public PageInfo listPage(SalaryAcctRecordQueryParam queryParam) { - return null; - } - - @Override - public Map getForm(Long id) { - return null; - } - - @Override - public Long save(SalaryAcctRecordSaveParam saveParam) { - return null; - } - - @Override - public void delete(Collection ids) { - } - - @Override - public void file(Long id) { - } - - @Override - @ServiceMethodDynamicProxy(desc = "重新核算前,验证....") - public void reCalculate(Long id) { - - BaseBean baseBean = new BaseBean(); - baseBean.writeLog("拦截薪酬重新核算方法..."); - - //todo do some thing - - executeMethod(id); - - //todo do some thing - } -} \ No newline at end of file diff --git a/src/com/customization/salary/CustomSalarySendWrapper.java b/src/com/customization/salary/CustomSalarySendWrapper.java deleted file mode 100644 index 815b9b611..000000000 --- a/src/com/customization/salary/CustomSalarySendWrapper.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.customization.salary; - -import com.engine.common.util.ServiceUtil; -import com.engine.core.cfg.annotation.ServiceDynamicProxy; -import com.engine.core.cfg.annotation.ServiceMethodDynamicProxy; -import com.engine.core.impl.aop.AbstractServiceProxy; -import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; -import com.engine.salary.entity.salaryBill.param.SalarySendWithdrawParam; -import com.engine.salary.service.SalaryBillService; -import com.engine.salary.service.impl.SalaryBillServiceImpl; -import com.engine.salary.wrapper.SalarySendWrapper; -import com.engine.salary.wrapper.proxy.SalarySendWrapperProxy; -import weaver.hrm.User; - -import java.util.List; -import java.util.Map; - -@ServiceDynamicProxy(target = SalarySendWrapper.class, desc = "工资单发送") -public class CustomSalarySendWrapper extends AbstractServiceProxy implements SalarySendWrapperProxy { - - private SalaryBillService getSalaryBillService(User user) { - return ServiceUtil.getService(SalaryBillServiceImpl.class, user); - } - - @Override - @ServiceMethodDynamicProxy(desc = "拦截工资单发送方法") - public Map grant(SalarySendGrantParam queryParam) { - Long salarySendId = queryParam.getSalarySendId(); - List ids = queryParam.getIds(); - List> sendInfoList = getSalaryBillService(new User()).getSendInfoList(salarySendId, ids); - //解析sendInfoList,拼接短信内容 - System.out.println("发送短信"); - - //todo do some thing - - Map result = (Map) executeMethod(queryParam); - - //todo do some thing - - return result; - } - - @Override - public Map withdraw(SalarySendWithdrawParam queryParam) { - return null; - } -} diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index e37266402..5697495f4 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -356,7 +356,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy * @return */ public Map grant(SalarySendGrantParam queryParam) { - return getSalarySendService(user).grant(queryParam); + return getSalaryBillService(user).grant(queryParam); } /** From d4c8a66fcfd69704a71a1fad14665621eaf25839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 7 Jun 2023 09:31:46 +0800 Subject: [PATCH 136/245] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/SalaryTemplateSaveParam.java | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java index 2295dfefc..66d55f5b1 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java @@ -20,101 +20,101 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -////"工资单模板保存参数") +//"工资单模板保存参数 public class SalaryTemplateSaveParam { -// 主键") + // 主键 private Long id; -// 模板名称") + // 模板名称 private String name; -// 薪资账套表的主键id") + // 薪资账套表的主键id private Long salarySobId; -// 备注") + // 备注 private String description; -// 邮箱开启状态。false:关、true:开") + // 邮箱开启状态。false:关、true:开 private Boolean emailStatus; -// 发送地址") + // 发送地址 private Long sendEmail; -// 消息中心开启状态。false:关、true:开") + // 消息中心开启状态。false:关、true:开 private Boolean msgStatus; -// 主题") + // 主题 private String theme; -// 背景图") + // 背景图 private String background; -// 文本内容") + // 文本内容 private String textContent; -// 文本内容位置。1:薪资项目前、2:薪资项目后") + // 文本内容位置。1:薪资项目前、2:薪资项目后 private Integer textContentPosition; -// 薪资项为空时不显示开启状态。false:关、true:开") + // 薪资项为空时不显示开启状态。false:关、true:开 private Boolean salaryItemNullStatus; -// 薪资项为0时不显示开启状态。false:关、true:开") + // 薪资项为0时不显示开启状态。false:关、true:开 private Boolean salaryItemZeroStatus; -// 薪资项目设置") + // 薪资项目设置 private List salaryItemSetting; -// 补发工资单模板名称") + // 补发工资单模板名称 private String replenishName; -// 补发工资单名单生成规则") + // 补发工资单名单生成规则 private String replenishRule; -// 补发薪资项目设置") + // 补发薪资项目设置 private List replenishSalaryItemSetting; public static void checkParam(SalaryTemplateSaveParam saveParam) { if (saveParam.getSalarySobId() == null) { - throw new SalaryRunTimeException("薪资账套表的主键id必传"); + throw new SalaryRunTimeException("薪资账套表的主键id必传;"); } if (StringUtils.isEmpty(saveParam.getName())) { - throw new SalaryRunTimeException("工资单模板名称必填"); + throw new SalaryRunTimeException("工资单模板名称必填;"); } if (StringUtils.isEmpty(saveParam.getTheme())) { - throw new SalaryRunTimeException("工资单主题必填"); + throw new SalaryRunTimeException("工资单主题必填;"); } if (StringUtils.isEmpty(saveParam.getReplenishName())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 139737, "补发工资单模板名称必填")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(139737, "补发工资单模板名称必填")); } if (saveParam.getName().equals(saveParam.getReplenishName())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 140557, "工资单模板名称和补发工资单模板名称不可相同")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140557, "工资单模板名称和补发工资单模板名称不可相同")); } if (StringUtils.isEmpty(saveParam.getReplenishRule())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 139738, "补发工资单名单生成规则必填")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(139738, "补发工资单名单生成规则必填")); } - + if (saveParam.getEmailStatus() && saveParam.getSendEmail() == null) { - throw new SalaryRunTimeException("开启邮箱后,发送地址必选"); + throw new SalaryRunTimeException("开启邮箱后,发送地址必选;"); } if (StringUtils.isNotEmpty(saveParam.getTextContent()) && saveParam.getTextContentPosition() == null) { - throw new SalaryRunTimeException("文本内容不为空时,文本内容位置必选"); + throw new SalaryRunTimeException("文本内容不为空时,文本内容位置必选;"); } - if (saveParam.getTextContentPosition() !=null && saveParam.getTextContentPosition().equals(SalaryTemplateTextContentPositionEnum.BEFORE.getValue()) && saveParam.getTextContentPosition().equals(SalaryTemplateTextContentPositionEnum.AFTER.getValue())) { - throw new SalaryRunTimeException("文本内容位置参数不对"); + if (saveParam.getTextContentPosition() != null && saveParam.getTextContentPosition().equals(SalaryTemplateTextContentPositionEnum.BEFORE.getValue()) && saveParam.getTextContentPosition().equals(SalaryTemplateTextContentPositionEnum.AFTER.getValue())) { + throw new SalaryRunTimeException("文本内容位置参数不对;"); } if (CollectionUtils.isEmpty(saveParam.getReplenishSalaryItemSetting())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 140509, "补发工资单模板的薪资项目设置不能为空")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "补发工资单模板的薪资项目设置不能为空")); } } } From 37d9c04a3090b309b8b7a3d2d88449c75d2f288d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 7 Jun 2023 09:43:54 +0800 Subject: [PATCH 137/245] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=8F=91=E6=94=BE?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=AD=E6=96=87=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/wrapper/SalarySendWrapper.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 5697495f4..19dc48f78 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -308,13 +308,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy } PageInfo pageInfo = getSalarySendService(user).salarySendInfoListPage(queryParam); - List list = pageInfo.getList(); - list.forEach(e -> { - // 发放状态 - int sendStatus = Integer.parseInt(e.getSendStatus()); - e.setSendStatus(SalarySendStatusEnum.getDefaultLabelByValue(sendStatus)); -// e.setOperation(SalarySendStatusEnum.getNameByValue(sendStatus)); - }); + return pageInfo; } From f4627b53f922cce9be4f5dfa0f2cb720237dc742 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 7 Jun 2023 12:23:05 +0800 Subject: [PATCH 138/245] =?UTF-8?q?fix=E6=B2=A1=E6=9C=89=E5=85=AC=E5=BC=8F?= =?UTF-8?q?id=E5=86=85=E5=AE=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index 7066c4664..0dd6e8a14 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -155,6 +155,8 @@ public class SalaryItemBO { .dataType(Optional.ofNullable(salaryDataTypeEnum) .map(e -> SalaryI18nUtil.getI18nLabel(e.getLabelId(), e.getDefaultLabel())) .orElse(StringUtils.EMPTY)) + .formulaId(salaryItemPO.getFormulaId()) + .formulaContent(formulaMap.getOrDefault(salaryItemPO.getFormulaId(),"")) .taxDeclarationColumn(buildTaxDeclarationColumn(salaryItemPO.getCode())) .sortedIndex(salaryItemPO.getSortedIndex()) .description(salaryItemPO.getDescription()) From 3498005a1103f9b250fb65a49177eac6b6c019a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 7 Jun 2023 14:21:47 +0800 Subject: [PATCH 139/245] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=8F=91?= =?UTF-8?q?=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/ProgressServiceImpl.java | 2 +- src/com/engine/salary/service/impl/SalaryBillServiceImpl.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/ProgressServiceImpl.java b/src/com/engine/salary/service/impl/ProgressServiceImpl.java index f855c50be..6935d5883 100644 --- a/src/com/engine/salary/service/impl/ProgressServiceImpl.java +++ b/src/com/engine/salary/service/impl/ProgressServiceImpl.java @@ -50,7 +50,7 @@ public class ProgressServiceImpl extends Service implements ProgressService { String resultStr = (String) Util_DataCache.getObjVal(cacheKey); if (StringUtils.isNotEmpty(resultStr)) { ProgressDTO progressDTO = JsonUtil.parseObject(resultStr, ProgressDTO.class); - if (progressDTO == null || !progressDTO.isStatus()) { + if (progressDTO == null || (progressDTO.isStatus())) { return; } Integer currentCalculatedQuantity = progressDTO.getCalculatedQuantity() + calculatedQuantity; diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index bf3bbf903..b3b0b26fe 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -366,6 +366,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService ProgressDTO initProgress = ProgressDTO.builder() .title("发送中") .totalQuantity(employeeIds.size() * 2 + 1) + .status(true) .calculatedQuantity(NumberUtils.INTEGER_ZERO) .progress(BigDecimal.ZERO) .message("") From 4c1e7da51b2d4f1b62686493389b3686852e9980 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 7 Jun 2023 15:40:38 +0800 Subject: [PATCH 140/245] =?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=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E5=AF=BC=E5=87=BA=E5=A2=9E=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E5=8F=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SISchemeServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 1a7908aaf..d98a6d746 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -466,6 +466,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(86185, "部门"), "departmentName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(86186, "手机号"), "mobile")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(86187, "员工状态"), "status")); + list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(1933, "工号"), "jobNum")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(93910, "个税扣缴义务人"), "paymentOrganizationName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"), "socialName")); titleMap.get(WelfareTypeEnum.SOCIAL_SECURITY.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k))); From 4617005e1fa5bdfe2d505ce2b0afeb1d4bd5c70f Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 7 Jun 2023 15:43:23 +0800 Subject: [PATCH 141/245] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=80=8F=E8=A7=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/SalaryBillItemDetailQueryParam.java | 36 ++ .../dto/SalaryStatisticsReportDataDTO.java | 7 + ...ryStatisticsDataPerspectiveQueryParam.java | 83 ++++ .../SalaryStatisticsReportService.java | 12 + .../SalaryStatisticsReportServiceImpl.java | 410 +++++++++++++----- .../web/SalaryStatisticsReportController.java | 18 +- .../SalaryStatisticsReportWrapper.java | 88 +++- .../service/SalaryAcctResultService.java | 3 +- .../impl/SalaryAcctResultServiceImpl.java | 2 +- .../salary/web/SalaryBillController.java | 13 + 10 files changed, 541 insertions(+), 131 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryBill/param/SalaryBillItemDetailQueryParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsDataPerspectiveQueryParam.java diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryBillItemDetailQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryBillItemDetailQueryParam.java new file mode 100644 index 000000000..7f5c96daf --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryBillItemDetailQueryParam.java @@ -0,0 +1,36 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author Harryxzy + * @date 2023/06/06 15:22 + * @description 我的工资单薪资项目明细查询 + */ + +@Builder +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SalaryBillItemDetailQueryParam { + + /** + * 薪资核算记录id + */ + private Long salaryAcctId; + + /** + * 员工id + */ + private List employeeId; + + /** + * 薪资项目id + */ + private Long salaryItemId; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java index a2f6a1b6c..bb70ecad4 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsReportDataDTO.java @@ -44,4 +44,11 @@ public class SalaryStatisticsReportDataDTO { //租户key") private String tenantKey; + + //维度值 + private String dimensionValue; + + //根据dimensionValue获取到的本期数据 + private List listByDimensionValue; + } diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsDataPerspectiveQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsDataPerspectiveQueryParam.java new file mode 100644 index 000000000..a66763b27 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsDataPerspectiveQueryParam.java @@ -0,0 +1,83 @@ +package com.engine.salary.report.entity.param; + +import com.engine.salary.common.BaseQueryParam; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +/** + * 薪酬统计数据透视查询参数 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author Harryxzy + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryStatisticsDataPerspectiveQueryParam extends BaseQueryParam { + + //报表id + private Long id; + + //统计维度 + private Long dimensionId; + + //统计维度值 + private String dimensionValue; + + @JsonIgnore + //薪资所属月-开始月 + private String salaryStartMonth; + + @JsonIgnore + // 薪资所属月-终止月 + private String salaryEndMonth; + + @JsonIgnore + //个税扣缴义务人配置 + private List taxAgent; + + @JsonIgnore + //收入所得项目配置 + private List incomeCategory; + + @JsonIgnore + //分部配置 + private List subCompany; + + @JsonIgnore + //部门配置 + private List depart; + + @JsonIgnore + //职级配置 + private List grade; + + @JsonIgnore + // 岗位配置 + private List position; + + @JsonIgnore + //人员状态配置 + private List status; + + @JsonIgnore + //人员 + private List employee; + + @JsonIgnore + // 入职日期 + private List hiredate; + + @JsonIgnore + // 离职日期 + private List leavedate; +} \ No newline at end of file diff --git a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java index 5b1e7a146..88322266c 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java @@ -1,5 +1,6 @@ package com.engine.salary.report.service; +import com.engine.salary.report.entity.param.SalaryStatisticsDataPerspectiveQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; @@ -79,4 +80,15 @@ public interface SalaryStatisticsReportService { * @return */ PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO salaryStatisticsReport, List salaryStatisticsItemList); + + /** + * 构建数据透视记录 + * + * @param param + * @param reportPO 报表po + * @param dimension 维度po + * @param salaryStatisticsItemPOS 自定义统计项目List + * @return + */ + List> buildDataPerspectiveRecords(SalaryStatisticsDataPerspectiveQueryParam param, SalaryStatisticsReportPO reportPO, SalaryStatisticsDimensionPO dimension, List salaryStatisticsItemPOS); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index b01c8d79c..dd14011cc 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -6,17 +6,17 @@ import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.report.SalaryStatisticsReportMapper; +import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.dto.SalaryStatisticsReportDataDTO; -import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam; -import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; -import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; -import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; +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; @@ -24,14 +24,8 @@ import com.engine.salary.report.enums.SalaryStatisticsDimensionTypeEnum; import com.engine.salary.report.service.SalaryStatisticsItemService; import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.report.util.ReportTimeUtil; -import com.engine.salary.service.SalaryAcctEmployeeService; -import com.engine.salary.service.SalaryAcctResultService; -import com.engine.salary.service.SalaryEmployeeService; -import com.engine.salary.service.TaxAgentService; -import com.engine.salary.service.impl.SalaryAcctEmployeeServiceImpl; -import com.engine.salary.service.impl.SalaryAcctResultServiceImpl; -import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; -import com.engine.salary.service.impl.TaxAgentServiceImpl; +import com.engine.salary.service.*; +import com.engine.salary.service.impl.*; import com.engine.salary.util.*; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; @@ -92,6 +86,14 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + + private SalaryAcctRecordService getSalaryAcctRecordService(User user) { + return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); + } + // private ExtEmployeeService extEmployeeService; // @Autowired // private HrmCommonEmployeeService hrmCommonEmployeeService; @@ -368,6 +370,86 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return calculateReportRecordsByDimension(dimension, param, salaryStatisticsReportData, map); } + @Override + public List> buildDataPerspectiveRecords(SalaryStatisticsDataPerspectiveQueryParam param, SalaryStatisticsReportPO reportPO, SalaryStatisticsDimensionPO dimension, List salaryStatisticsItemPOS) { + // 获取报表统计薪资项目 + List salaryItemIds = salaryStatisticsItemPOS.stream().filter(item -> StringUtils.isNotBlank(item.getItemValue())).map(p -> p.getItemValue().split(",")) + .flatMap(Arrays::stream).map(Long::valueOf).collect(Collectors.toList()); + // 参数转换 + param.setSalaryStartMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryStartMonth())); + param.setSalaryEndMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryEndMonth())); + String key = "id"; + param.setTaxAgent(((List) JSON.parseArray(reportPO.getTaxAgentSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setSubCompany(((List) JSON.parseArray(reportPO.getSubCompanySetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setDepart(((List) JSON.parseArray(reportPO.getDepartSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setEmployee(((List) JSON.parseArray(reportPO.getEmployeeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + param.setHiredate(JSON.parseArray(reportPO.getHiredateSetting(), Date.class)); + SalaryStatisticsReportDataQueryParam queryParam = new SalaryStatisticsReportDataQueryParam(); + com.mzlion.core.utils.BeanUtils.copyProperties(param,queryParam); + // 获取本期报表分权后的核算人员 + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(queryParam); + + List salaryAcctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + // 获取核算结果 + List salaryAcctResultValues = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmployeeIds, salaryItemIds); + + // 设置dimensionValue为维度值 + SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder() + .list(salaryAcctEmployeeList) + .lastList(Collections.emptyList()) + .sameList(Collections.emptyList()) + .salaryStatisticsItemList(salaryStatisticsItemPOS) + .employeeId((long) user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .dimensionValue(param.getDimensionValue()) + .build(); + + Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); + Map> map = new HashMap<>(); + salaryAcctEmpResultMap.forEach((k, v) -> { + Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), p -> Util.null2o(p.getResultValue()), (key1, key2) -> key2)); + map.put(k, collect); + }); + // 获取根据维度值过滤出的本次核算人员信息 + calculateReportRecordsByDimension(dimension, SalaryStatisticsReportDataQueryParam.builder().build(), salaryStatisticsReportData, map); + List listByDimensionValue = salaryStatisticsReportData.getListByDimensionValue(); + // 构建核算结果数据 + return buildResultRecords(listByDimensionValue, map); + } + + /** + * 获取根据维度值过滤出的本次核算人员信息 + * @param listByDimensionValue 根据维度筛选后的薪资核算人员 + * @param map 薪资核算结果 + */ + private List> buildResultRecords(List listByDimensionValue, Map> map) { + List taxAgentList = getTaxAgentService(user).listAll(); + Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); + + List salarySobPOS = getSalarySobService(user).listAll(); + Map SalarySobMap = SalaryEntityUtil.convert2Map(salarySobPOS, SalarySobPO::getId, SalarySobPO::getName); + + List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listAll(); + Map salaryAcctRecordMap = SalaryEntityUtil.convert2Map(salaryAcctRecordPOS, SalaryAcctRecordPO::getId, SalaryAcctRecordPO::getAcctTimes); + List> resultList = Lists.newArrayList(); + Map resultMap; + for (SalaryAcctEmployeePO se : listByDimensionValue) { + resultMap = Maps.newHashMap(); + Map resultValueMap = Optional.ofNullable(map.get(se.getId())).orElse(Maps.newHashMap()); + Map finalMap = resultMap; + resultValueMap.forEach((k, v) -> { + finalMap.put(k + SalaryConstant.DYNAMIC_SUFFIX, v); + }); + resultMap.put("id", se.getId().toString()); + resultMap.put("salaryMonth", SalaryDateUtil.getFormatYearMonth(se.getSalaryMonth())); + resultMap.put("taxAgent", taxAgentMap.get(se.getTaxAgentId())); + resultMap.put("salarySob",SalarySobMap.get(se.getSalarySobId())); + resultMap.put("acctTimes", salaryAcctRecordMap.get(se.getSalaryAcctRecordId())); + resultList.add(resultMap); + } + return resultList; + } + private PageInfo> calculateReportRecordsByDimension(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportDataDTO data, Map> salaryAcctResultValueMap) { // 定性 if (SalaryStatisticsDimensionTypeEnum.QUALITATIVE.getValue().equals(dimension.getDimType())) { @@ -442,11 +524,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map> lastListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); Map> sameListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getSalaryMonth)); List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); + String dimensionValue = data.getDimensionValue(); salaryMonthList.forEach(k -> { - Map temp = new HashMap<>(); - temp.put(DM, SalaryDateUtil.getFormatYearMonth(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + Map temp = new HashMap<>(); + temp.put(DM, SalaryDateUtil.getFormatYearMonth(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if( StringUtils.equals(dimensionValue,SalaryDateUtil.getFormatYearMonth(k)) ){ + data.setListByDimensionValue(listMap.get(k)); + } }); result.setList(records); return result; @@ -462,12 +549,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List taxAgentList = getTaxAgentService(user).listAll(); Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); - + String dimensionValue = data.getDimensionValue(); listMap.forEach((k, v) -> { - Map temp = new HashMap<>(); - temp.put(DM, taxAgentMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + Map temp = new HashMap<>(); + temp.put(DM, taxAgentMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if(StringUtils.equals(dimensionValue, taxAgentMap.get(k))){ + data.setListByDimensionValue(v); + } }); result.setList(records); @@ -530,24 +621,35 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary sameEmpIdSubComMap.put(k, v.getSubcompanyid()); }); + String dimensionValue = data.getDimensionValue(); subComIds.forEach(subComId -> { - List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); - List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); - List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, subComIdNameMap.get(subComId)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, subComIdNameMap.get(subComId)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if( StringUtils.equals(dimensionValue, subComIdNameMap.get(subComId)) ){ + List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + data.setListByDimensionValue(subComEmployeePOS); + } }); - List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); + if(dimensionValue == null){ + List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + }else if( StringUtils.equals(dimensionValue, "无分组") ){ + List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + data.setListByDimensionValue(noGroupingList); } result.setList(records); @@ -588,24 +690,35 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } }); + String dimensionValue = data.getDimensionValue(); departIds.forEach(departId -> { - List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); - List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); - List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, departIdNameMap.get(departId)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, departIdNameMap.get(departId)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if( StringUtils.equals(dimensionValue, departIdNameMap.get(departId)) ){ + List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + data.setListByDimensionValue(departEmployeePOS); + } }); - List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); + if(dimensionValue == null ){ + List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + }else if( StringUtils.equals(dimensionValue, "无分组") ){ + List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + data.setListByDimensionValue(noGroupingList); } result.setList(records); @@ -819,12 +932,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); // Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); + String dimensionValue = data.getDimensionValue(); employeeListMap.forEach((k, v) -> { - Map temp = new HashMap<>(); + if(dimensionValue == null ){ + Map temp = new HashMap<>(); // temp.put(DM, Objects.nonNull(employeeByIdMap.get(k)) ? employeeByIdMap.get(k) : employeeExtByIdMap.get(k)); - temp.put(DM, employeeByIdMap.get(k)); - temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + temp.put(DM, employeeByIdMap.get(k)); + temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if( StringUtils.equals(dimensionValue, employeeByIdMap.get(k)) ){ + data.setListByDimensionValue(v); + } }); PageInfo> result = new PageInfo<>(); @@ -841,14 +959,20 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List quarters = quarterSet.stream().sorted().collect(Collectors.toList()); Collections.reverse(quarters); + String dimensionValue = data.getDimensionValue(); quarters.forEach(k -> { - List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); - List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 3)))).collect(Collectors.toList()); - List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 12)))).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 3)))).collect(Collectors.toList()); + List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 12)))).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if(StringUtils.equals(dimensionValue, k)){ + List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + data.setListByDimensionValue(listYear); + } }); result.setList(records); @@ -864,14 +988,20 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List halfYears = halfYearSet.stream().sorted().collect(Collectors.toList()); Collections.reverse(halfYears); + String dimensionValue = data.getDimensionValue(); halfYears.forEach(k -> { - List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); - List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 6)))).collect(Collectors.toList()); - List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 12)))).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null){ + List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 6)))).collect(Collectors.toList()); + List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 12)))).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if(StringUtils.equals(dimensionValue, k)){ + List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + data.setListByDimensionValue(listHalfYear); + } }); result.setList(records); @@ -887,14 +1017,20 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List years = yearSet.stream().sorted().collect(Collectors.toList()); Collections.reverse(years); + String dimensionValue = data.getDimensionValue(); years.forEach(k -> { - List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); - List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); - List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if( StringUtils.equals(dimensionValue, k) ){ + List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); + data.setListByDimensionValue(listYear); + } }); result.setList(records); @@ -1537,24 +1673,35 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List workYears = Lists.newArrayList(workYearSet); workYears = workYears.stream().sorted().collect(Collectors.toList()); + String dimensionValue = data.getDimensionValue(); workYears.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if( Double.compare(Double.valueOf(dimensionValue), k) == 0 ){ + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + data.setListByDimensionValue(salaryAcctEmployees); + } }); - List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); + if(dimensionValue == null ){ + List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + }else if( StringUtils.equals(dimensionValue, "无分组") ){ + List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + data.setListByDimensionValue(noGroupingList); } result.setList(records); @@ -1594,24 +1741,35 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List companyYears = Lists.newArrayList(companyYearSet); companyYears = companyYears.stream().sorted().collect(Collectors.toList()); + String dimensionValue = data.getDimensionValue(); companyYears.forEach(k -> { - List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); - Map temp = new HashMap<>(); - temp.put(DM, k); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + Map temp = new HashMap<>(); + temp.put(DM, k); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if( StringUtils.equals(dimensionValue, k) ){ + List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); + data.setListByDimensionValue(salaryAcctEmployees); + } }); - List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noGroupingList)) { - Map noGrouping = new HashMap<>(); - noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); - noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(noGrouping); + if(dimensionValue == null ){ + List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(noGroupingList)) { + Map noGrouping = new HashMap<>(); + noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); + noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(noGrouping); + } + }else if( StringUtils.equals(dimensionValue, "无分组")){ + List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + data.setListByDimensionValue(noGroupingList); } result.setList(records); @@ -1651,14 +1809,20 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } else { groupBelong = SalaryStatisticsReportBO.G_ITEM; } + String dimensionValue = data.getDimensionValue(); groups.forEach(k -> { - List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - Map temp = new HashMap<>(); - temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + Map temp = new HashMap<>(); + temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if( StringUtils.equals(dimensionValue, k.getStartValue() + "-" + k.getEndValue()) ){ + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + data.setListByDimensionValue(salaryAcctEmployees); + } }); result.setList(records); @@ -1726,14 +1890,20 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary groupBelong = SalaryStatisticsReportBO.G_ITEM; } + String dimensionValue = data.getDimensionValue(); groups.forEach(k -> { - List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); - Map temp = new HashMap<>(); - temp.put(DM, k.getValue()); - temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); - records.add(temp); + if(dimensionValue == null ){ + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + Map temp = new HashMap<>(); + temp.put(DM, k.getValue()); + temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); + records.add(temp); + }else if( StringUtils.equals(dimensionValue, k.getValue()) ){ + List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); + data.setListByDimensionValue(salaryAcctEmployees); + } }); result.setList(records); diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index ce8f5d6e3..b752da69d 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -1,10 +1,7 @@ package com.engine.salary.report.web; import com.engine.common.util.ServiceUtil; -import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; -import com.engine.salary.report.entity.param.SalaryStatisticsReportQueryParam; -import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; -import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; +import com.engine.salary.report.entity.param.*; import com.engine.salary.report.wrapper.SalaryStatisticsReportWrapper; import com.engine.salary.util.ResponseResult; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -177,4 +174,17 @@ public class SalaryStatisticsReportController { throw e; } } + + /** + * 获取报表的透视数据信息 + * + * @return + */ + @GET + @Path("/getDataPerspective") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public String getDataPerspective(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsDataPerspectiveQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsReportWrapper(user)::getDataPerspective, param); + } } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index de401e667..c48908c4e 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -1,16 +1,21 @@ package com.engine.salary.report.wrapper; import com.alibaba.fastjson.JSONArray; +import com.cloudstore.eccom.constant.WeaBoolAttr; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.component.WeaFormOption; import com.engine.salary.component.WeaTableColumnGroup; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; 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.SalaryStatisticsReportDataQueryParam; -import com.engine.salary.report.entity.param.SalaryStatisticsReportQueryParam; -import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; -import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeDetailResultDTO; +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; @@ -22,9 +27,16 @@ import com.engine.salary.report.service.impl.SalaryStatisticsDimensionServiceImp 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.service.SalaryAcctEmployeeService; +import com.engine.salary.service.SalaryAcctResultService; +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.SalaryItemServiceImpl; import com.engine.salary.util.*; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; @@ -64,6 +76,18 @@ public class SalaryStatisticsReportWrapper extends Service { return ServiceUtil.getService(SubTableExportServiceImpl.class, user); } + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return (SalaryAcctResultService) ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + + private SalaryItemService getSalaryItemService(User user) { + return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + /** * 报表列表 * @@ -299,4 +323,60 @@ public class SalaryStatisticsReportWrapper extends Service { return map; } + + /** + * 获取报表透视数据 + * @param param + * @return + */ + public Map getDataPerspective(SalaryStatisticsDataPerspectiveQueryParam param) { + if (param.getId() == null || param.getDimensionId() == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); + if (po == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); + } + SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId()); + if (dimension == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); + } + // 查询自定义统计项目中所有薪资项目id + List salaryStatisticsItemPOS = getSalaryStatisticsItemService(user).listByStatisticsReportId(param.getId()); + List salaryItemIds = salaryStatisticsItemPOS.stream().filter(item -> StringUtils.isNotBlank(item.getItemValue())).map(p -> p.getItemValue().split(",")) + .flatMap(Arrays::stream).map(Long::valueOf).collect(Collectors.toList()); + + List> records = getSalaryStatisticsReportService(user).buildDataPerspectiveRecords(param, po, dimension, salaryStatisticsItemPOS); + PageInfo> pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), records); + + List itemList = getSalaryItemService(user).listByIds(salaryItemIds); + // 列表columns + List weaTableColumns = buildDataPerspectiveTableColumns(itemList); + + SalaryWeaTable table = new SalaryWeaTable(user, SalaryStatisticsEmployeeDetailResultDTO.class); + table.setColumns(weaTableColumns); + + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + + // 结果 + Map resultMap = Maps.newHashMap(); + resultMap.put("dataKey", result.getResultMap()); + resultMap.put("pageInfo", pageInfo); + return resultMap; + } + + private List buildDataPerspectiveTableColumns(List salaryItems) { + // 表格表头 + List columns = new ArrayList<>(); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(87614, "薪资所属月"), "salaryMonth")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "taxAgent")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "账套"), "salarySob")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "次数"), "acctTimes").setDisplay(WeaBoolAttr.FALSE)); + salaryItems.forEach(item -> { + columns.add(new WeaTableColumn("100px", item.getName(), item.getId() + SalaryConstant.DYNAMIC_SUFFIX)); + }); + return columns; + } } diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index 293d28c56..452339eef 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -14,7 +14,6 @@ import com.engine.salary.util.page.PageInfo; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Set; /** * 薪资核算结果 @@ -198,5 +197,5 @@ public interface SalaryAcctResultService { * @author Harryxzy * @date 2022/12/26 22:24 */ - List listByAcctEmployeeIdsAndSalaryItemIds(Set salaryAcctEmpIds, Set excelSalaryItemIds); + List listByAcctEmployeeIdsAndSalaryItemIds(Collection salaryAcctEmpIds, Collection salaryItemIds); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index c6b0979df..72d3ae969 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -961,7 +961,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } @Override - public List listByAcctEmployeeIdsAndSalaryItemIds(Set salaryAcctEmployeeIds, Set salaryItemIds) { + public List listByAcctEmployeeIdsAndSalaryItemIds(Collection salaryAcctEmployeeIds, Collection salaryItemIds) { SalaryAcctResultPO build = SalaryAcctResultPO.builder().salaryAcctEmpIds(salaryAcctEmployeeIds).salaryItemIds(salaryItemIds).build(); List list = getSalaryAcctResultMapper().listSome(build); // 数据解密 diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 15b9311b0..0fbefb388 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -544,5 +544,18 @@ public class SalaryBillController { } /******** 工资单发放 end ***********************************************************************************************/ +// /** +// * +// * +// * @param +// * @return +// */ +// @GET +// @Path("/mySalaryBillItemDetail") +// @Produces(MediaType.APPLICATION_JSON) +// public String mySalaryBillItemDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody) { +// +// } + } From dcb28b052f870598515ff68b6bd70a9fbb9b3d0a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 7 Jun 2023 16:50:09 +0800 Subject: [PATCH 142/245] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=80=8F=E8=A7=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD-=E5=88=86=E9=A1=B5+=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportService.java | 2 +- .../SalaryStatisticsReportServiceImpl.java | 22 +++++++++++++++++-- .../SalaryStatisticsReportWrapper.java | 6 ++--- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java index 88322266c..842317cf7 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java @@ -90,5 +90,5 @@ public interface SalaryStatisticsReportService { * @param salaryStatisticsItemPOS 自定义统计项目List * @return */ - List> buildDataPerspectiveRecords(SalaryStatisticsDataPerspectiveQueryParam param, SalaryStatisticsReportPO reportPO, SalaryStatisticsDimensionPO dimension, List salaryStatisticsItemPOS); + PageInfo> buildDataPerspectiveRecords(SalaryStatisticsDataPerspectiveQueryParam param, SalaryStatisticsReportPO reportPO, SalaryStatisticsDimensionPO dimension, List salaryStatisticsItemPOS); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index dd14011cc..787062253 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -29,6 +29,7 @@ import com.engine.salary.service.impl.*; import com.engine.salary.util.*; 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 com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -371,7 +372,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } @Override - public List> buildDataPerspectiveRecords(SalaryStatisticsDataPerspectiveQueryParam param, SalaryStatisticsReportPO reportPO, SalaryStatisticsDimensionPO dimension, List salaryStatisticsItemPOS) { + public PageInfo> buildDataPerspectiveRecords(SalaryStatisticsDataPerspectiveQueryParam param, SalaryStatisticsReportPO reportPO, SalaryStatisticsDimensionPO dimension, List salaryStatisticsItemPOS) { // 获取报表统计薪资项目 List salaryItemIds = salaryStatisticsItemPOS.stream().filter(item -> StringUtils.isNotBlank(item.getItemValue())).map(p -> p.getItemValue().split(",")) .flatMap(Arrays::stream).map(Long::valueOf).collect(Collectors.toList()); @@ -413,8 +414,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // 获取根据维度值过滤出的本次核算人员信息 calculateReportRecordsByDimension(dimension, SalaryStatisticsReportDataQueryParam.builder().build(), salaryStatisticsReportData, map); List listByDimensionValue = salaryStatisticsReportData.getListByDimensionValue(); + if(CollectionUtils.isEmpty(listByDimensionValue)){ + throw new SalaryRunTimeException("该维度值中无数据!"); + } + // 同一个人放在一起 + listByDimensionValue = listByDimensionValue.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getEmployeeId)).collect(Collectors.toList()); + PageInfo salaryAcctEmployeePOPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listByDimensionValue); // 构建核算结果数据 - return buildResultRecords(listByDimensionValue, map); + List> records = buildResultRecords(salaryAcctEmployeePOPageInfo.getList(), map); + PageInfo> pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), records); + pageInfo.setTotal(listByDimensionValue.size()); + return pageInfo; } /** @@ -423,6 +433,11 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary * @param map 薪资核算结果 */ private List> buildResultRecords(List listByDimensionValue, Map> map) { + // 获取人员信息 + Set employeeIds = listByDimensionValue.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toSet()); + List employeeList = getSalaryEmployeeService(user).listByIds(employeeIds.stream().collect(Collectors.toList())); + Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); + List taxAgentList = getTaxAgentService(user).listAll(); Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); @@ -440,7 +455,10 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary resultValueMap.forEach((k, v) -> { finalMap.put(k + SalaryConstant.DYNAMIC_SUFFIX, v); }); + DataCollectionEmployee emp = employeeMap.get(se.getEmployeeId()); resultMap.put("id", se.getId().toString()); + resultMap.put("username", emp == null ? "" : emp.getUsername()); + resultMap.put("departmentName", emp == null ? "" : emp.getDepartmentName()); resultMap.put("salaryMonth", SalaryDateUtil.getFormatYearMonth(se.getSalaryMonth())); resultMap.put("taxAgent", taxAgentMap.get(se.getTaxAgentId())); resultMap.put("salarySob",SalarySobMap.get(se.getSalarySobId())); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index c48908c4e..26bd561e7 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -36,7 +36,6 @@ import com.engine.salary.service.impl.SalaryItemServiceImpl; import com.engine.salary.util.*; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; -import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; @@ -346,8 +345,7 @@ public class SalaryStatisticsReportWrapper extends Service { List salaryItemIds = salaryStatisticsItemPOS.stream().filter(item -> StringUtils.isNotBlank(item.getItemValue())).map(p -> p.getItemValue().split(",")) .flatMap(Arrays::stream).map(Long::valueOf).collect(Collectors.toList()); - List> records = getSalaryStatisticsReportService(user).buildDataPerspectiveRecords(param, po, dimension, salaryStatisticsItemPOS); - PageInfo> pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), records); + PageInfo> pageInfo = getSalaryStatisticsReportService(user).buildDataPerspectiveRecords(param, po, dimension, salaryStatisticsItemPOS); List itemList = getSalaryItemService(user).listByIds(salaryItemIds); // 列表columns @@ -370,6 +368,8 @@ public class SalaryStatisticsReportWrapper extends Service { private List buildDataPerspectiveTableColumns(List salaryItems) { // 表格表头 List columns = new ArrayList<>(); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(87614, "姓名"), "userName")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(87614, "部门"), "departmentName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(87614, "薪资所属月"), "salaryMonth")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "taxAgent")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "账套"), "salarySob")); From 7701420430e751e1d3e9d7347d90b5444a4decd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 7 Jun 2023 17:19:00 +0800 Subject: [PATCH 143/245] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=8E=BB=E9=99=A4?= =?UTF-8?q?=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryBill/bo/SalaryBillBO.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index c2b3a6c58..8b062d538 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -425,7 +425,7 @@ public class SalaryBillBO { // 1.标题 emailContent.append("
"); // emailContent.append(salaryBillSendParam.getTitle()); - emailContent.append(getBillTitle(salaryBillSendParam.getSalaryTemplate().getTheme(), salaryBillSendParam.getSalaryDate(), (Long) e.get("employeeId"))); + emailContent.append(getBillTitle(salaryBillSendParam.getSalaryTemplate().getTheme(), salaryBillSendParam.getSalaryDate(), Long.valueOf(e.get("employeeId").toString()))); emailContent.append("
"); // 2.发送时间 emailContent.append("
"); @@ -438,11 +438,11 @@ public class SalaryBillBO { // emailContent.append("'/>
"); // } // 3.背景图-url - if (StringUtils.isNotEmpty(salaryBillSendParam.getSalaryTemplate().getBackground())) { - emailContent.append("
"); - } +// if (StringUtils.isNotEmpty(salaryBillSendParam.getSalaryTemplate().getBackground())) { +// emailContent.append("
"); +// } // 是否只有一个分组,如果是,则将文本内容放进薪资项目表格前后 boolean isOnlyOneGroup = salaryBillSendParam.getSalaryItemSetList().stream().filter(st -> CollectionUtils.isNotEmpty(st.getItems())).count() == 1; From 054d880afa076930417431304f69da640b0bce34 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 7 Jun 2023 18:40:55 +0800 Subject: [PATCH 144/245] =?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=8Clikecondition?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E5=8F=96=E6=B6=88mysql=E6=8C=87=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/siaccount/ExcelInsuranceDetailMapper.xml | 2 +- .../salary/mapper/siaccount/InsuranceAccountDetailMapper.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/mapper/siaccount/ExcelInsuranceDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/ExcelInsuranceDetailMapper.xml index 3f19abf57..d45fdec16 100644 --- a/src/com/engine/salary/mapper/siaccount/ExcelInsuranceDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/ExcelInsuranceDetailMapper.xml @@ -321,7 +321,7 @@ - + AND e.lastname like CONCAT('%',#{userName},'%') diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index b38affd70..8a647fd2b 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -767,7 +767,7 @@ - + AND e.lastname like CONCAT('%',#{userName},'%') From a4679d7a5b7d6e1d81e7355458c0709142a5ebee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 8 Jun 2023 10:14:37 +0800 Subject: [PATCH 145/245] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=BA=95=E5=B1=82?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/util/ResponseResult.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/util/ResponseResult.java b/src/com/engine/salary/util/ResponseResult.java index d2634a1d2..7755bc673 100644 --- a/src/com/engine/salary/util/ResponseResult.java +++ b/src/com/engine/salary/util/ResponseResult.java @@ -61,7 +61,15 @@ public class ResponseResult { } catch (ECException e) { log.error("salary api run fail , param {}", t, e); Throwable cause = e.getCause(); - return Error(cause.getMessage()); + String message = ""; + while (cause != null) { + Throwable causeTmp = cause.getCause(); + if (causeTmp == null) { + message = cause.getMessage(); + } + cause = causeTmp; + } + return Error(message); } catch (Exception e) { log.error("salary api run fail , param {}", t, e); return Error("系统异常!"); From 50fd5812d43e6fb218af0ce13bf29613152be8ea Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 8 Jun 2023 10:24:28 +0800 Subject: [PATCH 146/245] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=80=8F=E8=A7=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=94=B9=E4=B8=BApost?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/web/SalaryStatisticsReportController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index b752da69d..4b89b6bf0 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -180,7 +180,7 @@ public class SalaryStatisticsReportController { * * @return */ - @GET + @POST @Path("/getDataPerspective") @Produces(MediaType.APPLICATION_OCTET_STREAM) public String getDataPerspective(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsDataPerspectiveQueryParam param) { From 7b0648cc685bac6803cf1a8a8a4b2327eabc2211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 8 Jun 2023 10:40:00 +0800 Subject: [PATCH 147/245] =?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=B7=A5=E8=B5=84?= =?UTF-8?q?=E5=8D=95demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/CustomSalarySendWrapper.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 resource/com/customization/salary/CustomSalarySendWrapper.java diff --git a/resource/com/customization/salary/CustomSalarySendWrapper.java b/resource/com/customization/salary/CustomSalarySendWrapper.java new file mode 100644 index 000000000..04881dbdd --- /dev/null +++ b/resource/com/customization/salary/CustomSalarySendWrapper.java @@ -0,0 +1,66 @@ +package com.customization.salary; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.cfg.annotation.ServiceDynamicProxy; +import com.engine.core.cfg.annotation.ServiceMethodDynamicProxy; +import com.engine.core.impl.aop.AbstractServiceProxy; +import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; +import com.engine.salary.entity.salaryBill.param.SalarySendWithdrawParam; +import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.service.SalaryBillService; +import com.engine.salary.service.SalarySendRangeService; +import com.engine.salary.service.impl.SalaryBillServiceImpl; +import com.engine.salary.service.impl.SalarySendRangeServiceImpl; +import com.engine.salary.wrapper.SalarySendWrapper; +import com.engine.salary.wrapper.proxy.SalarySendWrapperProxy; +import weaver.hrm.User; + +import java.util.List; +import java.util.Map; + +@ServiceDynamicProxy(target = SalarySendWrapper.class, desc = "工资单发送") +public class CustomSalarySendWrapper extends AbstractServiceProxy implements SalarySendWrapperProxy { + + private SalaryBillService getSalaryBillService(User user) { + return ServiceUtil.getService(SalaryBillServiceImpl.class, user); + } + + + private SalarySendRangeService getSalarySendRangeService(User user) { + return ServiceUtil.getService(SalarySendRangeServiceImpl.class, user); + } + + @Override + @ServiceMethodDynamicProxy(desc = "拦截工资单发送方法") + public Map grant(SalarySendGrantParam queryParam) { + Long salarySendId = queryParam.getSalarySendId(); + List ids = queryParam.getIds(); + + if (queryParam.getSalarySendRangeIds() != null) { + //如果传了范围id,则使用范围id发放 + ids = getSalarySendRangeService(new User()) + .getSendInfoIdsBySendId(queryParam.getSalarySendId(), queryParam.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); + if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 + throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); + } + } + + List> sendInfoList = getSalaryBillService(new User()).getSendInfoList(salarySendId, ids); + //解析sendInfoList,拼接短信内容 + System.out.println("发送短信"); + + //todo do some thing + + Map result = (Map) executeMethod(queryParam); + + //todo do some thing + + return result; + } + + @Override + public Map withdraw(SalarySendWithdrawParam queryParam) { + return null; + } +} From dbb2a97be4efba5c4921563c0e6722a5a0195978 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 8 Jun 2023 11:10:40 +0800 Subject: [PATCH 148/245] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA=E6=94=B9?= =?UTF-8?q?=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryitem/dto/SysSalaryItemListDTO.java | 6 ++ .../mapper/salaryitem/SysSalaryItemMapper.xml | 74 +++++++++++++++- .../salary/service/SysSalaryItemService.java | 2 + .../impl/SysSalaryItemServiceImpl.java | 5 ++ src/com/engine/salary/util/db/DBType.java | 2 +- .../salary/web/SalaryItemController.java | 3 +- .../salary/wrapper/SysSalaryItemWrapper.java | 86 +++++++++---------- 7 files changed, 127 insertions(+), 51 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/dto/SysSalaryItemListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SysSalaryItemListDTO.java index 926373d75..1c892bd08 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SysSalaryItemListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SysSalaryItemListDTO.java @@ -3,6 +3,7 @@ package com.engine.salary.entity.salaryitem.dto; import com.cloudstore.eccom.pc.table.WeaTableType; import com.engine.salary.annotation.SalaryTable; import com.engine.salary.annotation.SalaryTableColumn; +import com.engine.salary.annotation.TableTitle; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; @@ -34,18 +35,23 @@ public class SysSalaryItemListDTO { private Long id; @SalaryTableColumn(text = "名称", width = "10%", column = "name") + @TableTitle(title = "名称", key = "name", dataIndex = "name") private String name; @SalaryTableColumn(text = "进位规则", width = "10%", column = "roundingMode",transmethod = "com.engine.salary.transmethod.TransMethod.roundingMode") + @TableTitle(title = "进位规则", key = "roundingMode", dataIndex = "roundingMode") private String roundingMode; @SalaryTableColumn(text = "保留小数位", width = "10%", column = "pattern") + @TableTitle(title = "保留小数位", key = "pattern", dataIndex = "pattern") private Integer pattern; @SalaryTableColumn(text = "取值方式", width = "10%", column = "valueType",transmethod = "com.engine.salary.transmethod.TransMethod.datasource") + @TableTitle(title = "取值方式", key = "valueType", dataIndex = "valueType") private String valueType; @SalaryTableColumn(text = "字段类型", width = "10%", column = "dataType",transmethod = "com.engine.salary.transmethod.TransMethod.dataType") + @TableTitle(title = "字段类型", key = "dataType", dataIndex = "dataType") private String dataType; // @SalaryTableColumn(text = "个税申报表对应字段", width = "10%", column = "taxDeclarationColumn") diff --git a/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.xml index c11b13ff7..a274e39bc 100644 --- a/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.xml @@ -54,7 +54,7 @@ SELECT FROM hrsa_sys_salary_item t - WHERE delete_type = 0 + WHERE delete_type = 0 order by id desc @@ -75,7 +75,77 @@ AND id = #{id} - AND name = #{name} + AND name like '%'+#{name}+'%' + + + AND code = #{code} + + + AND system_type = #{systemType} + + + AND use_default = #{useDefault} + + + AND use_in_employee_salary = #{useInEmployeeSalary} + + + AND rounding_mode = #{roundingMode} + + + AND pattern = #{pattern} + + + AND value_type = #{valueType} + + + AND formula_id = #{formulaId} + + + AND description = #{description} + + + AND can_edit = #{canEdit} + + + AND data_type = #{dataType} + + + AND creator = #{creator} + + + AND delete_type = #{deleteType} + + + AND tenant_key = #{tenantKey} + + + AND create_time = #{createTime} + + + AND update_time = #{updateTime} + + + AND id IN + + #{id} + + + ORDER BY id DESC + + + + + + + SELECT + + FROM hrsa_salary_bill_watermark t + WHERE delete_type = 0 + + + + + + + + + + + + INSERT INTO hrsa_salary_bill_watermark + + + + create_time, + + + creator, + + + delete_type, + + + id, + + + tenant_key, + + + update_time, + + + watermark_setting, + + + watermark_status, + + + watermark_type, + + + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{id}, + + + #{tenantKey}, + + + #{updateTime}, + + + #{watermarkSetting}, + + + #{watermarkStatus}, + + + #{watermarkType}, + + + + + + + UPDATE hrsa_salary_bill_watermark + + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + watermark_setting=#{watermarkSetting}, + watermark_status=#{watermarkStatus}, + watermark_type=#{watermarkType}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_bill_watermark + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + watermark_setting=#{watermarkSetting}, + + + watermark_status=#{watermarkStatus}, + + + watermark_type=#{watermarkType}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_bill_watermark + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + UPDATE hrsa_salary_bill_watermark + SET delete_type=1 + WHERE delete_type = 0 + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryBillBaseSetService.java b/src/com/engine/salary/service/SalaryBillBaseSetService.java new file mode 100644 index 000000000..d1fef8b2d --- /dev/null +++ b/src/com/engine/salary/service/SalaryBillBaseSetService.java @@ -0,0 +1,35 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; +import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; + +/** + * @Description: 工资单水印 + * @Author: Harryxzy + * @Date: 2023/06/09 10:14 + */ +public interface SalaryBillBaseSetService { + + /** + * 获取工资单水印设置 + * + * @return + */ + SalaryBillWatermarkDTO getWatermarkSetting(); + + /** + * 获取工资单确认和反馈设置 + * + * @param currentTenantKey + * @return + */ +// SalaryBillAckFeedbackDTO getAckFeedbackSetting(); + + /** + * 保存工资单水印设置 + * + * @param saveParam + * @return + */ + String saveBaseSet(SalaryBaseSetSaveParam saveParam); +} diff --git a/src/com/engine/salary/service/SalaryBillWatermarkService.java b/src/com/engine/salary/service/SalaryBillWatermarkService.java new file mode 100644 index 000000000..39c31a988 --- /dev/null +++ b/src/com/engine/salary/service/SalaryBillWatermarkService.java @@ -0,0 +1,64 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryBillWatermarkService + * @date 2023/06/09 11:09 + * @description + */ +public interface SalaryBillWatermarkService { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + List listSome(SalaryBillWatermarkPO po); + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryBillWatermarkPO getById(Long id); + + + /** + * 新增,忽略null字段 + * + * @param SalaryBillWatermarkPO 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryBillWatermarkPO SalaryBillWatermarkPO); + + + /** + * 修改,忽略null字段 + * + * @param SalaryBillWatermarkPO 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryBillWatermarkPO SalaryBillWatermarkPO); + + /** + * 删除记录 + * + * @param SalaryBillWatermarkPO 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryBillWatermarkPO SalaryBillWatermarkPO); + + /** + * 删除所有生效记录 + * + * @return 返回影响行数 + */ + void deleteAll(); +} diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java new file mode 100644 index 000000000..63cb1de4b --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -0,0 +1,106 @@ +package com.engine.salary.service.impl; + + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; +import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; +import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO; +import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum; +import com.engine.salary.service.SalaryBillBaseSetService; +import com.engine.salary.service.SalaryBillWatermarkService; +import com.engine.salary.util.JsonUtil; +import dm.jdbc.util.IdGenerator; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; + +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @Description: 工资单水印 + * @Author: wangxiangzhong + * @Date: 2023/5/16 11:10 + */ + +public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillBaseSetService { + + private SalaryBillWatermarkService getSalaryBillWatermarkService(User user) { + return ServiceUtil.getService(SalaryBillWatermarkServiceImpl.class, user); + } + + @Override + public SalaryBillWatermarkDTO getWatermarkSetting() { + List list = getSalaryBillWatermarkService(user).listAll(); + SalaryBillWatermarkPO watermarkPO = CollectionUtils.isNotEmpty(list) ? list.get(0) : null; + + if (Objects.isNull(watermarkPO)) { + return null; + } + return SalaryBillWatermarkDTO.builder() + .watermarkStatus(NumberUtils.INTEGER_ONE.equals(watermarkPO.getWatermarkStatus())) + .watermarkType(watermarkPO.getWatermarkType()) + .wmSetting(JsonUtil.parseMap(watermarkPO.getWatermarkSetting(), Object.class)) + .build(); + } + + @Override + public String saveBaseSet(SalaryBaseSetSaveParam saveParam) { + // 检查参数 + SalaryBaseSetSaveParam.checkParam(saveParam); + + Date now = new Date(); + // 工资单水印=========================================================== + Integer watermarkStatus = NumberUtils.INTEGER_ONE; + String watermark = null; + String wmSetting = StringUtils.EMPTY; + // 如果开启了 + if (saveParam.getWatermarkStatus()) { + if (SalaryTemplateWatermarkTypeEnum.CUSTOM.equals(saveParam.getWatermark())) { + wmSetting = JsonUtil.toJsonString(saveParam.getWmSetting()); + } + watermark = saveParam.getWatermark().getValue(); + } else { + watermarkStatus = NumberUtils.INTEGER_ZERO; + } + + // 将当前生效的水印信息都删除 + getSalaryBillWatermarkService(user).deleteAll(); + // 保存最新的水印信息 + getSalaryBillWatermarkService(user).insertIgnoreNull(SalaryBillWatermarkPO.builder() + .id(IdGenerator.generate()) + .watermarkStatus(watermarkStatus) + .watermarkType(watermark) + .watermarkSetting(wmSetting) + .createTime(now) + .updateTime(now) + .creator(Long.valueOf(user.getUID())) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + + +// // 工资单确认和反馈 =========================================================== +// new LambdaUpdateChainWrapper<>(salaryBillAckFeedbackMapper) +// .eq(SalaryBillAckFeedbackPO::getDeleteType, 0) +// .eq(SalaryBillAckFeedbackPO::getTenantKey, tenantKey) +// .set(SalaryBillAckFeedbackPO::getDeleteType, 3) +// .update(); +// salaryBillAckFeedbackMapper.insert(SalaryBillAckFeedbackPO.builder() +// .id(IdGenerator.generate()) +// .ackStatus(saveParam.getAckStatus() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO) +// .feedbackStatus(saveParam.getFeedbackStatus() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO) +// .createTime(now) +// .updateTime(now) +// .creator(employeeId) +// .deleteType(NumberUtils.INTEGER_ZERO) +// .tenantKey(tenantKey) +// .build()); + + return StringUtils.EMPTY; + } +} diff --git a/src/com/engine/salary/service/impl/SalaryBillWatermarkServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillWatermarkServiceImpl.java new file mode 100644 index 000000000..dfb5d0350 --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryBillWatermarkServiceImpl.java @@ -0,0 +1,57 @@ +package com.engine.salary.service.impl; + +import com.api.formmode.mybatis.util.SqlProxyHandle; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO; +import com.engine.salary.mapper.salarybill.SalaryBillWatermarkMapper; +import com.engine.salary.service.SalaryBillWatermarkService; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryBillWatermarkServiceImpl + * @date 2023/06/09 11:12 + * @description + */ +public class SalaryBillWatermarkServiceImpl extends Service implements SalaryBillWatermarkService { + + private SalaryBillWatermarkMapper getSalaryBillWatermarkMapper() { + return SqlProxyHandle.getProxy(SalaryBillWatermarkMapper.class); + } + + @Override + public List listAll() { + return getSalaryBillWatermarkMapper().listAll(); + } + + @Override + public List listSome(SalaryBillWatermarkPO po) { + return getSalaryBillWatermarkMapper().listSome(po); + } + + @Override + public SalaryBillWatermarkPO getById(Long id) { + return getSalaryBillWatermarkMapper().getById(id); + } + + @Override + public int insertIgnoreNull(SalaryBillWatermarkPO SalaryBillWatermarkPO) { + return getSalaryBillWatermarkMapper().insertIgnoreNull(SalaryBillWatermarkPO); + } + + @Override + public int updateIgnoreNull(SalaryBillWatermarkPO SalaryBillWatermarkPO) { + return getSalaryBillWatermarkMapper().updateIgnoreNull(SalaryBillWatermarkPO); + } + + @Override + public int delete(SalaryBillWatermarkPO SalaryBillWatermarkPO) { + return getSalaryBillWatermarkMapper().delete(SalaryBillWatermarkPO); + } + + @Override + public void deleteAll() { + getSalaryBillWatermarkMapper().deleteAll(); + } +} diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 46c7cdd0b..6e501eda1 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.bean.MessageBean; @@ -10,6 +11,7 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySendBiz; import com.engine.salary.biz.SalarySendInfoBiz; import com.engine.salary.constant.SalaryArchiveConstant; +import com.engine.salary.constant.SalaryBillConstant; import com.engine.salary.constant.SalaryItemConstant; import com.engine.salary.constant.SalaryTemplateSalaryItemSetGroupConstant; import com.engine.salary.encrypt.EncryptUtil; @@ -36,6 +38,7 @@ import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; import com.engine.salary.enums.salarybill.SalarySendStatusEnum; import com.engine.salary.enums.salarybill.SalaryTemplateReplenishRuleEnum; +import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -74,6 +77,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -571,12 +576,74 @@ public class SalarySendServiceImpl extends Service implements SalarySendService map.put("salaryGroups", itemSetListDTOS); salaryTemplate.setTheme(getBillTitle(salaryTemplate.getTheme(), salaryMonth, currentEmployeeId)); + // 工资单水印文本型动态变量 == 处理 + handleSalaryWatermark(salaryTemplate, salarySendInfo); map.put("salaryTemplate", salaryTemplate); map.put("salaryAcctResult", salaryAcctResultS); return map; } + + /** + * 工资单水印文本型动态变量 == 处理 + * + * @param salaryTemplate + * @param salarySendInfo + */ + private void handleSalaryWatermark(SalaryTemplatePO salaryTemplate, SalarySendInfoPO salarySendInfo) { + SalaryBillWatermarkDTO salaryBillWatermark = JsonUtil.parseObject(salaryTemplate.getSalaryWatermark(), SalaryBillWatermarkDTO.class); + if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() || !salaryBillWatermark.getWatermarkType().equals(SalaryTemplateWatermarkTypeEnum.CUSTOM.getValue())) { + return; + } + // 发送时已经处理好变量字段,可直接获取判断 + List wmTextFieldIds = (List) salaryBillWatermark.getWmSetting().getOrDefault("wmSelectedFieldIds", Lists.newArrayList()); + if (CollectionUtils.isEmpty(wmTextFieldIds)) { + return; + } + + boolean needQueryEmp = (boolean) salaryBillWatermark.getWmSetting().getOrDefault("needQueryEmp", false); + DataCollectionEmployee simpleEmployee = null; + if (needQueryEmp) { + simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salarySendInfo.getEmployeeId()); + } + + String wmText = salaryBillWatermark.getWmSetting().getOrDefault("wmText", StringUtils.EMPTY).toString(); + for (String wmTextFieldId : wmTextFieldIds) { + // 当前操作者姓名 + if (SalaryBillConstant.HRM_Name.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Name, Objects.isNull(simpleEmployee) ? StringUtils.EMPTY : simpleEmployee.getUsername()); + // 当前操作者编号 + } else if (SalaryBillConstant.HRM_Num.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Num, Objects.isNull(simpleEmployee) || StringUtils.isEmpty(simpleEmployee.getWorkcode()) ? StringUtils.EMPTY : simpleEmployee.getWorkcode()); + // 当前操作者移动电话 + } else if (SalaryBillConstant.HRM_Mobile.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Mobile, Objects.isNull(simpleEmployee) || StringUtils.isEmpty(simpleEmployee.getMobile()) ? StringUtils.EMPTY : simpleEmployee.getMobile()); + // 当前操作者电子邮件 + } else if (SalaryBillConstant.HRM_Email.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Email, Objects.isNull(simpleEmployee) || StringUtils.isEmpty(simpleEmployee.getEmail()) ? StringUtils.EMPTY : simpleEmployee.getEmail()); + // 当前操作者人员ID + } else if (SalaryBillConstant.HRM_CurrentOperatorId.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentOperatorId, Objects.isNull(simpleEmployee) ? StringUtils.EMPTY : simpleEmployee.getEmployeeId().toString()); + // 当前操作者部门 + } else if (SalaryBillConstant.HRM_Department.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Department, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getDepartmentName()) ? StringUtils.EMPTY : simpleEmployee.getDepartmentName()); + // 当前操作者分部 + } else if (SalaryBillConstant.HRM_SecondDepartment.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_SecondDepartment, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getSubcompanyName()) ? StringUtils.EMPTY : simpleEmployee.getSubcompanyName()); + // 当前日期 + } else if (SalaryBillConstant.HRM_CurrentDate.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentDate, SalaryDateUtil.getFormatLocalDate(LocalDate.now())); + // 当前时间 + } else if (SalaryBillConstant.HRM_CurrentTime.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentTime, SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now())); + } + } + // 重新设回水印 + salaryBillWatermark.getWmSetting().put("wmText", wmText); + salaryTemplate.setSalaryWatermark(JSON.toJSONString(salaryBillWatermark)); + } + @Override public PageInfo salarySendInfoListPage(SalarySendInfoQueryParam queryParam) { @@ -677,6 +744,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService .emailStatus(Integer.valueOf(map.getOrDefault("emailStatus", "0").toString())) .sendEmailId(Long.valueOf(map.getOrDefault("sendEmailId", "0").toString())) .msgStatus(Integer.valueOf(map.getOrDefault("msgStatus", "0").toString())) + .salaryWatermark(map.getOrDefault("salaryWatermark", StringUtils.EMPTY).toString()) .theme(map.getOrDefault("theme", "").toString()) .background(map.getOrDefault("background", "").toString()) .textContent(map.getOrDefault("textContent", "").toString()) diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 33678fb49..71eb1441a 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -8,6 +8,7 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.page.PageInfo; +import com.engine.salary.wrapper.SalaryBillBaseSetWrapper; import com.engine.salary.wrapper.SalarySendWrapper; import com.engine.salary.wrapper.SalaryTemplateWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -48,6 +49,11 @@ public class SalaryBillController { return ServiceUtil.getService(SalarySendWrapper.class, user); } + private SalaryBillBaseSetWrapper getSalaryBillBaseSetWrapper(User user) { + return ServiceUtil.getService(SalaryBillBaseSetWrapper.class, user); + } + + /******** 工资单模板 start ***********************************************************************************************/ /** * 工资单模板列表 @@ -544,5 +550,37 @@ public class SalaryBillController { } /******** 工资单发放 end ***********************************************************************************************/ + /******** 工资单基础设置 start ***********************************************************************************************/ + + /** + * 获取工资单基础设置表单 + * + * @return + */ + @GET + @Path("/baseSet/getForm") + @Produces(MediaType.APPLICATION_JSON) +// @ApiOperation("获取工资单基础设置表单") + public String getBaseSetForm( @Context HttpServletRequest request, @Context HttpServletResponse response ) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryBillBaseSetWrapper(user)::getBaseSetForm); + } + + /** + * 保存工资单基础设置 + * + * @param saveParam 保存参数 + * @return + */ + @POST + @Path("/baseSet/save") + @Produces(MediaType.APPLICATION_JSON) +// @ApiOperation("保存工资单基础设置") + public String saveBaseSet( @Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryBaseSetSaveParam saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryBillBaseSetWrapper(user)::saveBaseSet, saveParam); + } + /******** 工资单基础设置 end ***********************************************************************************************/ + } diff --git a/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java new file mode 100644 index 000000000..b9409018e --- /dev/null +++ b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java @@ -0,0 +1,77 @@ +package com.engine.salary.wrapper; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryBill.dto.SalaryBaseSetFormDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; +import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; +import com.engine.salary.service.SalaryBillBaseSetService; +import com.engine.salary.service.impl.SalaryBillBaseSetServiceImpl; +import com.google.common.collect.Maps; +import weaver.hrm.User; + +import java.util.Map; +import java.util.Objects; + +/** + * @Description: 工资单水印 + * @Author: wangxiangzhong + * @Date: 2023/5/16 10:17 + */ + +public class SalaryBillBaseSetWrapper extends Service { + + private SalaryBillBaseSetService getSalaryBillBaseSetService(User user) { + return ServiceUtil.getService(SalaryBillBaseSetServiceImpl.class, user); + } + + + /** + * 是否具备工资单水印权限 + * + * @param currentEmployeeId + * @param currentTenantKey + * @return + */ +// public Boolean isBaseSetHasRight(Long currentEmployeeId, String currentTenantKey) { +// return taxAgentService.isHasPermission(SalaryBillWatermarkBO.PERMISSION_SET_CODE, currentEmployeeId, currentTenantKey); +// } + + /** + * 获取工资单水印设置表单 + * + * @return + */ + public SalaryBaseSetFormDTO getBaseSetForm() { + SalaryBaseSetFormDTO dto = new SalaryBaseSetFormDTO(); + SalaryBillWatermarkDTO salaryBillWatermark = getSalaryBillBaseSetService(user).getWatermarkSetting(); +// SalaryBillAckFeedbackDTO salaryBillAckFeedback = salaryBillBaseSetService.getAckFeedbackSetting(); + + if (Objects.isNull(salaryBillWatermark)) { + dto.setWatermarkStatus(false); + Map wmSetting = Maps.newHashMap(); + wmSetting.put("wmClassify", "text"); + dto.setWatermarkSetting(wmSetting); + } else { + dto.setWatermarkStatus(salaryBillWatermark.getWatermarkStatus()); + dto.setWatermarkSetting(salaryBillWatermark.getWmSetting()); + dto.setWatermark(salaryBillWatermark.getWatermarkType()); + } +// if (Objects.nonNull(salaryBillAckFeedback)) { +// data.put("ackStatus", salaryBillAckFeedback.getAckStatus()); +// data.put("feedbackStatus", salaryBillAckFeedback.getFeedbackStatus()); +// } + + return dto; + } + + /** + * 保存工资单水印设置 + * + * @param saveParam + * @return + */ + public String saveBaseSet(SalaryBaseSetSaveParam saveParam) { + return getSalaryBillBaseSetService(user).saveBaseSet(saveParam); + } +} From c37750b5382e56be522e4b9ae34588e4cb1d8bb3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 12 Jun 2023 10:40:01 +0800 Subject: [PATCH 157/245] =?UTF-8?q?=E6=92=A4=E5=9B=9E=E4=B8=AA=E7=A8=8E?= =?UTF-8?q?=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/TaxDeclarationSaveParam.java | 5 +++++ .../taxdeclaration/TaxDeclarationMapper.xml | 2 +- .../salary/service/TaxDeclarationService.java | 5 +++++ .../impl/TaxDeclarationServiceImpl.java | 20 +++++++++++++++++++ .../salary/web/TaxDeclarationController.java | 9 +++++++++ .../salary/wrapper/TaxDeclarationWrapper.java | 8 +++++++- 6 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationSaveParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationSaveParam.java index 33edb1c8e..18b8c28c8 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationSaveParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationSaveParam.java @@ -21,6 +21,11 @@ import java.time.YearMonth; @AllArgsConstructor public class TaxDeclarationSaveParam { + /** + * 个税申报id + */ + private Long taxDeclarationId; + /** * 薪资所属月 */ diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml index 6d37dab71..1810e8970 100644 --- a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml @@ -34,7 +34,7 @@ UPDATE hrsa_tax_declaration - SET delete_type = 3 + SET delete_type = 1 WHERE delete_type = 0 AND id = #{id} diff --git a/src/com/engine/salary/service/TaxDeclarationService.java b/src/com/engine/salary/service/TaxDeclarationService.java index bc9f3fdb3..7537c1c06 100644 --- a/src/com/engine/salary/service/TaxDeclarationService.java +++ b/src/com/engine/salary/service/TaxDeclarationService.java @@ -45,4 +45,9 @@ public interface TaxDeclarationService { */ boolean checkByAuthority(TaxDeclarationPO taxDeclarationPO, Long employeeId); + /** + * 撤回个税申报单 + * @param taxDeclarationId + */ + void withDrawTaxDeclaration(Long taxDeclarationId); } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java index 976e3d35b..6f66a9b54 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java @@ -315,4 +315,24 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration return true; } + @Override + public void withDrawTaxDeclaration(Long taxDeclarationId) { + TaxDeclarationPO po = getTaxDeclarationMapper().getById(taxDeclarationId); + if(Objects.isNull(po)){ + throw new SalaryRunTimeException("个税申报表不存在"); + } + // 获取当前个税扣缴义务人下的薪资账套 + List salarySobPOS = getSalarySobService(user).listByTaxAgentId(po.getTaxAgentId()); + List salarySobIds = salarySobPOS.stream().map(SalarySobPO::getId).collect(Collectors.toList()); + // 获取记录 + LocalDateRange dateRange = new LocalDateRange(po.getSalaryMonth(), po.getSalaryMonth()); + List salaryAcctRecords = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, dateRange); + List salaryAcctRecordIds = salaryAcctRecords.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + // 删除个税申报表 + getTaxDeclarationMapper().deleteByIdZj(po.getId()); + // 修改薪资核算记录状态为已归档 + if(CollectionUtils.isNotEmpty(salaryAcctRecordIds)){ + getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds,SalaryAcctRecordStatusEnum.ARCHIVED); + } + } } diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 9de5d8f5e..6d2332dd4 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -65,6 +65,15 @@ public class TaxDeclarationController { return new ResponseResult>(user).run(getTaxDeclarationWrapper(user)::listPage, queryParam); } + @POST + @Path("/withDrawTaxDeclaration") + @Produces(MediaType.APPLICATION_JSON) + public String deleteTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::withDrawTaxDeclaration, param.getTaxDeclarationId()); + } + + //个税申报表表单 @GET @Path("/getForm") diff --git a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java index c29ee4f46..38670737a 100644 --- a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java @@ -151,5 +151,11 @@ public class TaxDeclarationWrapper extends Service { getTaxDeclarationService(user).save(saveParam); } - + /** + * 撤回个税申报 + * @param taxDeclarationId + */ + public void withDrawTaxDeclaration(Long taxDeclarationId) { + getTaxDeclarationService(user).withDrawTaxDeclaration(taxDeclarationId); + } } From 155a00623aa4613fa4dd6387dd4aaec8809da1b3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 12 Jun 2023 10:45:01 +0800 Subject: [PATCH 158/245] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=94=81=E5=AE=9A=20=E6=A0=B9=E6=8D=AEconfVa?= =?UTF-8?q?lue=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctExcelServiceImpl.java | 2 +- .../engine/salary/service/impl/SalaryAcctResultServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 2877350c7..6801cb415 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -1082,7 +1082,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } } SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); - if(autoLock != null){ + if(autoLock != null && StringUtils.equals(autoLock.getConfValue(),"1")){ // 导入的列都自动锁定 SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() .salaryItemIds(excelSalaryItemIds) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 92d335c4f..2c04d6137 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -541,7 +541,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 保存参数转换成薪资核算结果po List salaryAcctResultPOS = SalaryAcctResultBO.convert2PO(salaryAcctResultPOSOld, saveParam, salaryAcctEmployeePO, (long) user.getUID()); SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); - if(autoLock != null){ + if(autoLock != null && StringUtils.equals(autoLock.getConfValue(),"1")){ // 对比核算结果提取修改了哪些薪资项目 Set needLockItems = new HashSet<>(); Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); From 34046646b37a4782d4bbd548cec32ff37f31022f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 12 Jun 2023 15:17:21 +0800 Subject: [PATCH 159/245] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sql/薪酬还原脚本-sqlserver.sql | 177 ++++++++++++++++++++++++ resource/sql/薪酬还原脚本.sql | 97 ++++++++----- 2 files changed, 240 insertions(+), 34 deletions(-) create mode 100644 resource/sql/薪酬还原脚本-sqlserver.sql diff --git a/resource/sql/薪酬还原脚本-sqlserver.sql b/resource/sql/薪酬还原脚本-sqlserver.sql new file mode 100644 index 000000000..85f179fd6 --- /dev/null +++ b/resource/sql/薪酬还原脚本-sqlserver.sql @@ -0,0 +1,177 @@ +delete from hrsa_acct_result_temp where 1=1 +GO +delete from hrsa_add_up_deduction where 1=1 +GO +delete from hrsa_add_up_situation where 1=1 +GO +delete from hrsa_attend_quote where 1=1 +GO +delete from hrsa_attend_quote_data where 1=1 +GO +delete from hrsa_attend_quote_data_value where 1=1 +GO +delete from hrsa_attend_quote_field where 1=1 +GO +delete from hrsa_attend_quote_sync_set where 1=1 +GO + + +delete from hrsa_scheme_detail where 1=1 +GO +delete from hrsa_social_archives where 1=1 +GO +delete from hrsa_fund_archives where 1=1 +GO +delete from hrsa_other_archives where 1=1 +GO + + +delete from hrsa_bill_batch where 1=1 +GO + +delete from hrsa_bill_detail where 1=1 +GO +delete from hrsa_bill_detail_temp where 1=1 +GO +delete from hrsa_bill_inspect where 1=1 +GO + +-- delete from hrsa_insurance_category where 1=1 +-- GO + +delete from hrsa_check_result where 1=1 +GO +delete from hrsa_check_result_record where 1=1 +GO +delete from hrsa_ck_result_detail_temp where 1=1 +GO +delete from hrsa_excel_acct_result where 1=1 +GO + +delete from hrsa_other_deduction where 1=1 +GO +delete from hrsa_salary_acct_emp where 1=1 +GO +delete from hrsa_salary_acct_record where 1=1 +GO +delete from hrsa_salary_acct_result where 1=1 +GO +delete from hrsa_salary_archive where 1=1 +GO +delete from hrsa_salary_archive_dimission where 1=1 +GO +delete from hrsa_salary_archive_item where 1=1 +GO +delete from hrsa_salary_archive_tax_agent where 1=1 +GO +delete from hrsa_salary_item where 1=1 +GO +delete from hrsa_salary_send where 1=1 +GO +delete from hrsa_salary_send_info where 1=1 +GO +delete from hrsa_salary_sob where 1=1 +GO +delete from hrsa_salary_sob_adjust_rule where 1=1 +GO +delete from hrsa_salary_sob_emp_field where 1=1 +GO +delete from hrsa_salary_sob_item where 1=1 +GO +delete from hrsa_salary_sob_item_group where 1=1 +GO +delete from hrsa_salary_sob_range where 1=1 +GO +delete from hrsa_salary_template where 1=1 +GO + +delete from hrsa_social_security_scheme where 1=1 +GO +delete from hrsa_sys_tax_rate_base where 1=1 +GO +delete from hrsa_sys_tax_rate_detail where 1=1 +GO +delete from hrsa_tax_agent where 1=1 +GO +delete from hrsa_tax_agent_emp where 1=1 +GO +delete from hrsa_tax_agent_emp_change where 1=1 +GO +delete from hrsa_tax_agent_admin where 1=1 +GO +delete from hrsa_tax_agent_manage_range where 1=1 +GO +delete from hrsa_tax_agent_base where 1=1 +GO +delete from hrsa_tax_agent_sub_admin where 1=1 +GO +delete from hrsa_tax_agent_sub_admin_emp where 1=1 +GO + +delete from hrsa_tax_declaration where 1=1 +GO +delete from hrsa_tax_declaration_detail where 1=1 +GO +delete from hrsa_tax_rate_base where 1=1 +GO +delete from hrsa_tax_rate_detail where 1=1 +GO +delete from hrsa_salary_acct_result_report where 1=1 +GO + +delete from hrsa_insurance_base_info where 1=1 +GO + +delete from hrsa_salary_item_hide where 1=1 +GO + +delete from hrsa_special_add_deduction where 1=1 +GO + +delete from hrsa_excel_bill_detail where 1=1 +GO + +delete from hrsa_salary_send_range where 1=1 +GO + +delete from hrsa_salary_send_range_obj where 1=1 +GO + +delete from hrsa_compensation_log where 1=1 +GO + +delete from hrsa_compensation_config where 1=1 +GO + +delete from hrsa_salary_sob_back_item where 1=1 +GO + +delete from hrsa_sub_table where 1=1 +GO + +delete from hrsa_sub_table_item where 1=1 +GO + +delete from hrsa_salary_stats_dim where 1=1 +GO + +delete from hrsa_salary_stats_report where 1=1 +GO + +delete from hrsa_salary_statistics_item where 1=1 +GO + +delete from hrsa_charts_setting where 1=1 +GO + +delete from hrsa_salary_echarts_setting where 1=1 +GO + +delete from hrsa_statreportlogs_detail where 1=1 +GO + +delete from hrsa_statreportlogs where 1=1 +GO + +INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams') +GO diff --git a/resource/sql/薪酬还原脚本.sql b/resource/sql/薪酬还原脚本.sql index d61bc2c31..a3d95426a 100644 --- a/resource/sql/薪酬还原脚本.sql +++ b/resource/sql/薪酬还原脚本.sql @@ -146,46 +146,75 @@ delete from hrsa_compensation_config where 1=1 delete from hrsa_salary_sob_back_item where 1=1 ; - -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, '养老保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, '医疗保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '工伤保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, '失业保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '生育保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, '住房公积金', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, '企业年金', 3, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, '补充住房公积金', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +delete from hrsa_sub_table where 1=1 ; +delete from hrsa_sub_table_item where 1=1 +; + +delete from hrsa_salary_stats_dim where 1=1 +; + +delete from hrsa_salary_stats_report where 1=1 +; + +delete from hrsa_salary_statistics_item where 1=1 +; + +delete from hrsa_charts_setting where 1=1 +; + +delete from hrsa_salary_echarts_setting where 1=1 +; + +delete from hrsa_statreportlogs_detail where 1=1 +; + +delete from hrsa_statreportlogs where 1=1 +; INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams'); +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, '养老保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, '医疗保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '工伤保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, '失业保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '生育保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, '住房公积金', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, '企业年金', 3, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, '补充住房公积金', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +-- ; + + + + ---oracle -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, '养老保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, '医疗保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '工伤保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, '失业保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '生育保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, '住房公积金', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, '企业年金', 3, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') -; -INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, '补充住房公积金', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') -; - - INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 1, 0, 'all_teams'); + +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, '养老保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, '医疗保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '工伤保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, '失业保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '生育保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, '住房公积金', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, '企业年金', 3, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +-- ; +-- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, '补充住房公积金', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +-- ; + + From 7a40a31d6f0fb74064fa2a55f2dfe64a7ca25b8d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 12 Jun 2023 15:19:24 +0800 Subject: [PATCH 160/245] =?UTF-8?q?=E6=B0=B4=E5=8D=B0=20-=20=E6=9A=82?= =?UTF-8?q?=E5=AD=982?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryBill/bo/SalaryBillBO.java | 185 +++++++++++++++++- .../impl/SalaryBillBaseSetServiceImpl.java | 2 + .../service/impl/SalaryBillServiceImpl.java | 28 ++- .../service/impl/SalarySendServiceImpl.java | 3 +- 4 files changed, 209 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 8b062d538..f7646c6ae 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -8,6 +8,7 @@ import com.engine.salary.constant.SalaryArchiveConstant; import com.engine.salary.constant.SalaryTemplateSalaryItemSetGroupConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemListDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; @@ -31,6 +32,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; @@ -38,6 +40,7 @@ import java.util.*; public class SalaryBillBO { private static final Logger log = LoggerFactory.getLogger(SalaryBillBO.class); + @Override public String toString() { return "SalaryBillBO{}"; @@ -251,16 +254,22 @@ public class SalaryBillBO { } public static void sendEmail(Map e, Map allEmployeeMap, SalaryBillSendDTO salaryBillSendParam) { + StringBuilder emailContent = new StringBuilder(); + emailContent.append("
"); // 消息接收者 String receivers = Optional.ofNullable(e.get("email")).orElse("").toString(); String title = getBillTitle(salaryBillSendParam.getSalaryTemplate().getTheme(), salaryBillSendParam.getSalaryDate(), Long.valueOf(e.get("employeeId").toString())); - String emailContent = SalaryBillBO.buildEmailContent(e, salaryBillSendParam); + SalaryBillBO.buildEmailContent(emailContent, e, salaryBillSendParam); + // 构建水印内容 + buildEmailWatermarkContent(emailContent, e, salaryBillSendParam); + emailContent.append("
"); if (StringUtils.isNotBlank(receivers)) { - MessageUtil.sendEmail(receivers, title, emailContent); + MessageUtil.sendEmail(receivers, title, emailContent.toString()); } } + public static void sendSMS(SalaryBillSendDTO salaryBillSendParam, Long id, Long employeeId) { // try { @@ -419,8 +428,7 @@ public class SalaryBillBO { * @param salaryBillSendParam * @return */ - public static String buildEmailContent(Map e, SalaryBillSendDTO salaryBillSendParam) { - StringBuilder emailContent = new StringBuilder(); + public static void buildEmailContent(StringBuilder emailContent, Map e, SalaryBillSendDTO salaryBillSendParam) { emailContent.append("
"); // 1.标题 emailContent.append("
"); @@ -453,7 +461,6 @@ public class SalaryBillBO { } emailContent.append("
"); - return emailContent.toString(); } /** @@ -619,4 +626,172 @@ public class SalaryBillBO { } emailContent.append("
"); } + + + public static String HRM_Name = "HRM_Name"; + public static String HRM_Num = "HRM_Num"; + public static String HRM_Mobile = "HRM_Mobile"; + public static String HRM_Email = "HRM_Email"; + public static String HRM_CurrentOperatorId = "HRM_CurrentOperatorId"; + public static String HRM_Department = "HRM_Department"; + public static String HRM_SecondDepartment = "HRM_SecondDepartment"; + public static String HRM_CurrentDate = "HRM_CurrentDate"; + public static String HRM_CurrentTime = "HRM_CurrentTime"; + public static String HRM_prefix = "$"; + + /** + * 构建水印 + * + * 当前所拥有的变量 + * "HRM_Name",当前操作者姓名 + * "HRM_Num",当前操作者编号 + * "HRM_Mobile",当前操作者移动电话 + * "HRM_Email",当前操作者电子邮件 + * "HRM_CurrentOperatorId",当前操作者人员ID + * "HRM_Department",当前操作者部门 + * "HRM_SecondDepartment",当前操作者分部 + * "HRM_CurrentDate",当前日期 + * "HRM_CurrentTime"当前时间 + * + * @param emailContent + * @param e + * @param salaryBillSendParam + */ + private static void buildEmailWatermarkContent(StringBuilder emailContent, Map e, SalaryBillSendDTO salaryBillSendParam) { + if (Objects.isNull(salaryBillSendParam.getWatermarkSetting())) { + return; + } + String emailWmContentTemplate = salaryBillSendParam.getEmailWmContentTemplate(); + List wmTextFieldIds = salaryBillSendParam.getWmTextFieldIds(); + // 没有变量,则直接返回 + if (CollectionUtils.isEmpty(wmTextFieldIds)) { + emailContent.append(emailWmContentTemplate); + } else { + for (String wmTextFieldId : wmTextFieldIds) { + // 当前操作者姓名 + if (HRM_Name.equals(wmTextFieldId)) { + emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Name, Optional.ofNullable(e.get("username")).orElse(StringUtils.EMPTY).toString()); + // 当前操作者编号 + } else if (HRM_Num.equals(wmTextFieldId)) { + emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Num, Optional.ofNullable(e.get("jobNum")).orElse(StringUtils.EMPTY).toString()); + // 当前操作者移动电话 + } else if (HRM_Mobile.equals(wmTextFieldId)) { + emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Mobile, Optional.ofNullable(e.get("mobile")).orElse(StringUtils.EMPTY).toString()); + // 当前操作者电子邮件 + } else if (HRM_Email.equals(wmTextFieldId)) { + emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Email, Optional.ofNullable(e.get("email")).orElse(StringUtils.EMPTY).toString()); + // 当前操作者人员ID + } else if (HRM_CurrentOperatorId.equals(wmTextFieldId)) { + emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_CurrentOperatorId, Optional.ofNullable(e.get("id")).orElse(StringUtils.EMPTY).toString()); + // 当前操作者分部 + } else if (HRM_Department.equals(wmTextFieldId)) { + emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Department, Optional.ofNullable(e.get("department")).orElse(StringUtils.EMPTY).toString()); + } else if (HRM_SecondDepartment.equals(wmTextFieldId)) { + emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_SecondDepartment, Optional.ofNullable(e.get("subCompanyName")).orElse(StringUtils.EMPTY).toString()); + // 当前日期 + } else if (HRM_CurrentDate.equals(wmTextFieldId)) { + emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_CurrentDate, SalaryDateUtil.getFormatLocalDate(LocalDate.now())); + // 当前时间 + } else if (HRM_CurrentTime.equals(wmTextFieldId)) { + emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_CurrentTime, SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now())); + } + } + emailContent.append(emailWmContentTemplate); + } + } + + + /** + * 获取工资单水印文本动态变量 + * + * @param domain + * @param salaryBillWatermark + * @return + */ + public static List getWmTextFieldIds(String domain, SalaryBillWatermarkDTO salaryBillWatermark) { + List wmTextFieldIds = Collections.emptyList(); + // 没有水印、关闭水印、或者系统水印,则不拼接 +// if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() || !SalaryTemplateWatermarkTypeEnum.CUSTOM.getValue().equals(salaryBillWatermark.getWatermarkType())) { + if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() ) { + return wmTextFieldIds; + } + String wmClassify = salaryBillWatermark.getWmSetting().getOrDefault("wmClassify", StringUtils.EMPTY).toString(); + if ("text".equals(wmClassify)) { + wmTextFieldIds = (List) salaryBillWatermark.getWmSetting().getOrDefault("wmSelectedFieldIds", Collections.emptyList()); + + List empFields = Arrays.asList(HRM_Name, HRM_Num, HRM_Mobile, HRM_Email, HRM_CurrentOperatorId, HRM_Department); + if (wmTextFieldIds.contains(HRM_SecondDepartment)) { + // 需要查分部 + salaryBillWatermark.getWmSetting().put("needQuerySubDepart", true); + } + // 需要查人员 + salaryBillWatermark.getWmSetting().put("needQueryEmp", wmTextFieldIds.stream().anyMatch(empFields::contains)); + + salaryBillWatermark.getWmSetting().remove("wmImg"); + } else if ("image".equals(wmClassify)) { + List> wmImgs = Collections.emptyList(); + try { + wmImgs = (List>) salaryBillWatermark.getWmSetting().getOrDefault("wmImg", Collections.emptyList()); + } catch (Exception exception) { + log.error("工资单水印图片转换失败"); + } + if (CollectionUtils.isNotEmpty(wmImgs)) { + Map map = wmImgs.get(0); + String fileid = map.getOrDefault("fileid", StringUtils.EMPTY).toString(); + if (StringUtils.isNotEmpty(fileid)) { + String imgSrc = domain + String.format("/papi/file/preview?type=imgs&fileId=%s&random=123456", fileid); + salaryBillWatermark.getWmSetting().put("wmImg", imgSrc); + } + } + + salaryBillWatermark.getWmSetting().remove("wmText"); + salaryBillWatermark.getWmSetting().remove("wmSelectedFieldIds"); + } + // 作为快照,去掉不必要的属性,节省空间 + salaryBillWatermark.getWmSetting().remove("wmOriginText"); + salaryBillWatermark.getWmSetting().remove("pureWmText"); + return wmTextFieldIds; + } + + + public static String buildEmailWmContentTemplate(boolean isEnableEmail, SalaryBillWatermarkDTO watermarkSetting) { + String emailWmContentTemplate = StringUtils.EMPTY; + // 没有水印、关闭水印,则不拼接 + if (!isEnableEmail || Objects.isNull(watermarkSetting) || !watermarkSetting.getWatermarkStatus() ) { + return emailWmContentTemplate; + } + String wmClassify = watermarkSetting.getWmSetting().getOrDefault("wmClassify", StringUtils.EMPTY).toString(); + String variable = StringUtils.EMPTY; + if ("text".equals(wmClassify)) { + variable = watermarkSetting.getWmSetting().getOrDefault("wmText", StringUtils.EMPTY).toString(); + } else if ("image".equals(wmClassify)) { + String imgSrc = watermarkSetting.getWmSetting().getOrDefault("wmImg", StringUtils.EMPTY).toString(); + variable = ""; + watermarkSetting.getWmSetting().put("wmImg", imgSrc); + } + if (StringUtils.isEmpty(variable)) { + return emailWmContentTemplate; + } + + String wmNoTransparent = watermarkSetting.getWmSetting().getOrDefault("wmNoTransparent", "0.15").toString(); + String wmRotate = watermarkSetting.getWmSetting().getOrDefault("wmRotate", 0).toString(); + double deg = new Double(wmRotate) / 100.00; + StringBuilder emailWmContentTemp = new StringBuilder(); + emailWmContentTemp.append("
"); + emailWmContentTemp.append("
"); + for (int i = 0; i < 20; i++) { + emailWmContentTemp.append("
"); + for (int j = 0; j < 10; j++) { + emailWmContentTemp.append("
"); + // 赋值 + emailWmContentTemp.append(variable); + emailWmContentTemp.append("
"); + } + emailWmContentTemp.append("
"); + } + emailWmContentTemp.append("
"); + emailWmContentTemp.append("
"); + return emailWmContentTemp.toString(); + } + } diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index 63cb1de4b..276c3ec87 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -62,6 +62,8 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB if (saveParam.getWatermarkStatus()) { if (SalaryTemplateWatermarkTypeEnum.CUSTOM.equals(saveParam.getWatermark())) { wmSetting = JsonUtil.toJsonString(saveParam.getWmSetting()); + }else{ + // 系统默认水印 给一个默认的json } watermark = saveParam.getWatermark().getValue(); } else { diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index b3b0b26fe..a7c6c21db 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -12,6 +12,7 @@ import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO; import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.dto.SalarySendInfoListDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO; import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; @@ -25,6 +26,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salarybill.MessageChannelEnum; import com.engine.salary.enums.salarybill.SalarySendStatusEnum; +import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum; import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarybill.SalarySendInfoMapper; @@ -107,6 +109,11 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private SalaryBillBaseSetService getSalaryBillBaseSetService(User user) { + return ServiceUtil.getService(SalaryBillBaseSetServiceImpl.class, user); + } + + private SalarySendInfoBiz salarySendInfoMapper = new SalarySendInfoBiz(); private SalarySendBiz mapper = new SalarySendBiz(); @@ -214,7 +221,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService List successIds = sendMessage(enableSendList, salaryBillSendParam); // 4.发放 - grantSendInfo(successIds, salarySend, salaryTemplate); + grantSendInfo(successIds, salarySend, salaryTemplate, salaryBillSendParam); // 5.更新数量 updateSendNum(salarySend, salarySob); @@ -290,6 +297,14 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService .setTextContent(salaryTemplate.getTextContent().replace("${salaryMonth}", salaryMonth.getYear() + yearI18n + salaryMonth.getMonth() + monthI18n)); } + // 工资单水印设置 + SalaryBillWatermarkDTO salaryBillWatermark = getSalaryBillBaseSetService(user).getWatermarkSetting(); + // 工资单水印文本动态变量 + List wmTextFieldIds = SalaryBillBO.getWmTextFieldIds(domain, salaryBillWatermark); + // 邮件水印模板 + boolean isEnableEmail = salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()); + String emailWmContentTemplate = SalaryBillBO.buildEmailWmContentTemplate(isEnableEmail, salaryBillWatermark); + return SalaryBillSendDTO.builder() .salaryDate(salaryMonth) // 消息标题 @@ -326,6 +341,12 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // .incomeCategorys(incomeCategorys) //薪资项目收入所得类型 // .salaryItemIncomeCategoryMap(salaryItemIncomeCategoryMap) + // 工资单水印设置 + .watermarkSetting(salaryBillWatermark) + // 工资单水印文本动态变量 + .wmTextFieldIds(wmTextFieldIds) + // 邮件水印模板 + .emailWmContentTemplate(emailWmContentTemplate) .build(); } @@ -599,7 +620,10 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * @param salarySend * @param salaryTemplate */ - private void grantSendInfo(List ids, SalarySendPO salarySend, SalaryTemplatePO salaryTemplate) { + private void grantSendInfo(List ids, SalarySendPO salarySend, SalaryTemplatePO salaryTemplate, SalaryBillSendDTO salaryBillSendDTO) { + // 水印设置 + salaryTemplate.setSalaryWatermark(JsonUtil.toJsonString(salaryBillSendDTO.getWatermarkSetting())); + List> partition = Lists.partition(ids, 500); Date sendTime = new Date(); SalarySendInfoPO po = new SalarySendInfoPO(); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 6e501eda1..359c6a92b 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -38,7 +38,6 @@ import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; import com.engine.salary.enums.salarybill.SalarySendStatusEnum; import com.engine.salary.enums.salarybill.SalaryTemplateReplenishRuleEnum; -import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -593,7 +592,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService */ private void handleSalaryWatermark(SalaryTemplatePO salaryTemplate, SalarySendInfoPO salarySendInfo) { SalaryBillWatermarkDTO salaryBillWatermark = JsonUtil.parseObject(salaryTemplate.getSalaryWatermark(), SalaryBillWatermarkDTO.class); - if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() || !salaryBillWatermark.getWatermarkType().equals(SalaryTemplateWatermarkTypeEnum.CUSTOM.getValue())) { + if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() ) { return; } // 发送时已经处理好变量字段,可直接获取判断 From 8bde871286f8517f3c66a989756f3e69de6550e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 12 Jun 2023 15:36:27 +0800 Subject: [PATCH 161/245] =?UTF-8?q?=E6=A1=A3=E6=A1=88=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/wrapper/SalaryArchiveWrapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 8cb70e415..42496ef08 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -166,6 +166,7 @@ public class SalaryArchiveWrapper extends Service { datas.put("pageInfo", pageInfos); datas.put("dataKey", result.getResultMap()); datas.put("salaryArchives", salaryArchives); + datas.put("listType", listTypeEnum.getValue()); return datas; } From b60904cc0357694106829bce9b8fc6efb83b444d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 12 Jun 2023 18:55:27 +0800 Subject: [PATCH 162/245] =?UTF-8?q?=E6=B0=B4=E5=8D=B0=20-=20=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E6=B0=B4=E5=8D=B0=E4=B8=8D=E6=94=AF=E6=8C=81=E5=9B=BE?= =?UTF-8?q?=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryBill/bo/SalaryBillBO.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index f7646c6ae..56077f3d7 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -739,7 +739,9 @@ public class SalaryBillBO { Map map = wmImgs.get(0); String fileid = map.getOrDefault("fileid", StringUtils.EMPTY).toString(); if (StringUtils.isNotEmpty(fileid)) { - String imgSrc = domain + String.format("/papi/file/preview?type=imgs&fileId=%s&random=123456", fileid); + + String imgSrc = domain + String.format("/weaver/weaver.file.FileDownload?fileid=%s", fileid); +// String imgSrc = domain + String.format("/papi/file/preview?type=imgs&fileId=%s&random=123456", fileid); salaryBillWatermark.getWmSetting().put("wmImg", imgSrc); } } @@ -765,24 +767,26 @@ public class SalaryBillBO { if ("text".equals(wmClassify)) { variable = watermarkSetting.getWmSetting().getOrDefault("wmText", StringUtils.EMPTY).toString(); } else if ("image".equals(wmClassify)) { - String imgSrc = watermarkSetting.getWmSetting().getOrDefault("wmImg", StringUtils.EMPTY).toString(); - variable = ""; - watermarkSetting.getWmSetting().put("wmImg", imgSrc); +// String imgSrc = watermarkSetting.getWmSetting().getOrDefault("wmImg", StringUtils.EMPTY).toString(); +// variable = ""; +// watermarkSetting.getWmSetting().put("wmImg", imgSrc); + // 邮件不支持图片水印 + return emailWmContentTemplate; } if (StringUtils.isEmpty(variable)) { return emailWmContentTemplate; } String wmNoTransparent = watermarkSetting.getWmSetting().getOrDefault("wmNoTransparent", "0.15").toString(); - String wmRotate = watermarkSetting.getWmSetting().getOrDefault("wmRotate", 0).toString(); - double deg = new Double(wmRotate) / 100.00; + double wmRotate = new Double(watermarkSetting.getWmSetting().getOrDefault("wmRotate", 0).toString()); + double noTransparent = new Double(wmNoTransparent) / 100.00; StringBuilder emailWmContentTemp = new StringBuilder(); emailWmContentTemp.append("
"); emailWmContentTemp.append("
"); for (int i = 0; i < 20; i++) { - emailWmContentTemp.append("
"); - for (int j = 0; j < 10; j++) { - emailWmContentTemp.append("
"); + emailWmContentTemp.append("
"); + for (int j = 0; j < 8; j++) { + emailWmContentTemp.append("
"); // 赋值 emailWmContentTemp.append(variable); emailWmContentTemp.append("
"); From b544c5e2c18c77dbce32ae047b23874472b51473 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 13 Jun 2023 10:02:11 +0800 Subject: [PATCH 163/245] =?UTF-8?q?=E6=B0=B4=E5=8D=B0=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryBill/bo/SalaryBillBO.java | 35 ++++++++++++++++++ .../SalaryTemplateWatermarkTypeEnum.java | 6 ++- .../service/SalaryBillBaseSetService.java | 9 +++++ .../impl/SalaryBillBaseSetServiceImpl.java | 20 ++++++++++ .../service/impl/SalarySendServiceImpl.java | 37 ++----------------- .../salary/web/SalaryBillController.java | 13 +++++++ .../wrapper/SalaryBillBaseSetWrapper.java | 8 ++++ 7 files changed, 93 insertions(+), 35 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 56077f3d7..894a561ae 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -5,6 +5,7 @@ import com.cloudstore.dev.api.bean.MessageType; import com.cloudstore.dev.api.util.Util_Message; import com.engine.salary.annotation.SalaryFormulaVar; import com.engine.salary.constant.SalaryArchiveConstant; +import com.engine.salary.constant.SalaryBillConstant; import com.engine.salary.constant.SalaryTemplateSalaryItemSetGroupConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO; @@ -798,4 +799,38 @@ public class SalaryBillBO { return emailWmContentTemp.toString(); } + public static String handleWmText(String wmText, List wmTextFieldIds, DataCollectionEmployee simpleEmployee){ + for (String wmTextFieldId : wmTextFieldIds) { + // 当前操作者姓名 + if (SalaryBillConstant.HRM_Name.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Name, Objects.isNull(simpleEmployee) ? StringUtils.EMPTY : simpleEmployee.getUsername()); + // 当前操作者编号 + } else if (SalaryBillConstant.HRM_Num.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Num, Objects.isNull(simpleEmployee) || StringUtils.isEmpty(simpleEmployee.getWorkcode()) ? StringUtils.EMPTY : simpleEmployee.getWorkcode()); + // 当前操作者移动电话 + } else if (SalaryBillConstant.HRM_Mobile.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Mobile, Objects.isNull(simpleEmployee) || StringUtils.isEmpty(simpleEmployee.getMobile()) ? StringUtils.EMPTY : simpleEmployee.getMobile()); + // 当前操作者电子邮件 + } else if (SalaryBillConstant.HRM_Email.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Email, Objects.isNull(simpleEmployee) || StringUtils.isEmpty(simpleEmployee.getEmail()) ? StringUtils.EMPTY : simpleEmployee.getEmail()); + // 当前操作者人员ID + } else if (SalaryBillConstant.HRM_CurrentOperatorId.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentOperatorId, Objects.isNull(simpleEmployee) ? StringUtils.EMPTY : simpleEmployee.getEmployeeId().toString()); + // 当前操作者部门 + } else if (SalaryBillConstant.HRM_Department.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Department, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getDepartmentName()) ? StringUtils.EMPTY : simpleEmployee.getDepartmentName()); + // 当前操作者分部 + } else if (SalaryBillConstant.HRM_SecondDepartment.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_SecondDepartment, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getSubcompanyName()) ? StringUtils.EMPTY : simpleEmployee.getSubcompanyName()); + // 当前日期 + } else if (SalaryBillConstant.HRM_CurrentDate.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentDate, SalaryDateUtil.getFormatLocalDate(LocalDate.now())); + // 当前时间 + } else if (SalaryBillConstant.HRM_CurrentTime.equals(wmTextFieldId)) { + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentTime, SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now())); + } + } + return wmText; + } + } diff --git a/src/com/engine/salary/enums/salarybill/SalaryTemplateWatermarkTypeEnum.java b/src/com/engine/salary/enums/salarybill/SalaryTemplateWatermarkTypeEnum.java index 6d146b079..00a3834f1 100644 --- a/src/com/engine/salary/enums/salarybill/SalaryTemplateWatermarkTypeEnum.java +++ b/src/com/engine/salary/enums/salarybill/SalaryTemplateWatermarkTypeEnum.java @@ -1,11 +1,13 @@ package com.engine.salary.enums.salarybill; +import com.engine.salary.enums.BaseEnum; + /** * @Description: 水印类型 * @Author: wangxiangzhong * @Date: 2021/12/9 13:13 */ -public enum SalaryTemplateWatermarkTypeEnum { +public enum SalaryTemplateWatermarkTypeEnum implements BaseEnum { DEFAULT("DEFAULT", "系统默认水印", 220057), CUSTOM("CUSTOM", "自定义水印", 220058); @@ -30,7 +32,7 @@ public enum SalaryTemplateWatermarkTypeEnum { return defaultLabel; } - public int getLabelId() { + public Integer getLabelId() { return labelId; } } diff --git a/src/com/engine/salary/service/SalaryBillBaseSetService.java b/src/com/engine/salary/service/SalaryBillBaseSetService.java index d1fef8b2d..42a2b5f45 100644 --- a/src/com/engine/salary/service/SalaryBillBaseSetService.java +++ b/src/com/engine/salary/service/SalaryBillBaseSetService.java @@ -3,6 +3,8 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; +import java.util.Map; + /** * @Description: 工资单水印 * @Author: Harryxzy @@ -32,4 +34,11 @@ public interface SalaryBillBaseSetService { * @return */ String saveBaseSet(SalaryBaseSetSaveParam saveParam); + + /** + * 预览水印 + * @param wmSetting 水印设置 + * @return + */ + String previewWaterMark(Map wmSetting); } diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index 276c3ec87..12bbbae2f 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -4,13 +4,17 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO; import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum; import com.engine.salary.service.SalaryBillBaseSetService; import com.engine.salary.service.SalaryBillWatermarkService; +import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.util.JsonUtil; +import com.google.common.collect.Lists; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.math.NumberUtils; @@ -19,6 +23,7 @@ import weaver.hrm.User; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -33,6 +38,10 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB return ServiceUtil.getService(SalaryBillWatermarkServiceImpl.class, user); } + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + @Override public SalaryBillWatermarkDTO getWatermarkSetting() { List list = getSalaryBillWatermarkService(user).listAll(); @@ -105,4 +114,15 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB return StringUtils.EMPTY; } + + @Override + public String previewWaterMark(Map wmSetting) { + String wmText = wmSetting.getOrDefault("wmText", StringUtils.EMPTY).toString(); + List wmTextFieldIds = (List) wmSetting.getOrDefault("wmSelectedFieldIds", Lists.newArrayList()); + if (CollectionUtils.isEmpty(wmTextFieldIds) || StringUtils.isEmpty(wmText)) { + return wmText; + } + DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(Long.valueOf(user.getUID())); + return SalaryBillBO.handleWmText(wmText, wmTextFieldIds, simpleEmployee); + } } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 359c6a92b..4cb22ee32 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -11,11 +11,11 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySendBiz; import com.engine.salary.biz.SalarySendInfoBiz; import com.engine.salary.constant.SalaryArchiveConstant; -import com.engine.salary.constant.SalaryBillConstant; import com.engine.salary.constant.SalaryItemConstant; import com.engine.salary.constant.SalaryTemplateSalaryItemSetGroupConstant; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.dto.*; import com.engine.salary.entity.salaryBill.param.*; import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; @@ -76,8 +76,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -608,41 +606,14 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } String wmText = salaryBillWatermark.getWmSetting().getOrDefault("wmText", StringUtils.EMPTY).toString(); - for (String wmTextFieldId : wmTextFieldIds) { - // 当前操作者姓名 - if (SalaryBillConstant.HRM_Name.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Name, Objects.isNull(simpleEmployee) ? StringUtils.EMPTY : simpleEmployee.getUsername()); - // 当前操作者编号 - } else if (SalaryBillConstant.HRM_Num.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Num, Objects.isNull(simpleEmployee) || StringUtils.isEmpty(simpleEmployee.getWorkcode()) ? StringUtils.EMPTY : simpleEmployee.getWorkcode()); - // 当前操作者移动电话 - } else if (SalaryBillConstant.HRM_Mobile.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Mobile, Objects.isNull(simpleEmployee) || StringUtils.isEmpty(simpleEmployee.getMobile()) ? StringUtils.EMPTY : simpleEmployee.getMobile()); - // 当前操作者电子邮件 - } else if (SalaryBillConstant.HRM_Email.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Email, Objects.isNull(simpleEmployee) || StringUtils.isEmpty(simpleEmployee.getEmail()) ? StringUtils.EMPTY : simpleEmployee.getEmail()); - // 当前操作者人员ID - } else if (SalaryBillConstant.HRM_CurrentOperatorId.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentOperatorId, Objects.isNull(simpleEmployee) ? StringUtils.EMPTY : simpleEmployee.getEmployeeId().toString()); - // 当前操作者部门 - } else if (SalaryBillConstant.HRM_Department.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Department, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getDepartmentName()) ? StringUtils.EMPTY : simpleEmployee.getDepartmentName()); - // 当前操作者分部 - } else if (SalaryBillConstant.HRM_SecondDepartment.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_SecondDepartment, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getSubcompanyName()) ? StringUtils.EMPTY : simpleEmployee.getSubcompanyName()); - // 当前日期 - } else if (SalaryBillConstant.HRM_CurrentDate.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentDate, SalaryDateUtil.getFormatLocalDate(LocalDate.now())); - // 当前时间 - } else if (SalaryBillConstant.HRM_CurrentTime.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentTime, SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now())); - } - } + wmText = SalaryBillBO.handleWmText(wmText, wmTextFieldIds, simpleEmployee); + // 重新设回水印 salaryBillWatermark.getWmSetting().put("wmText", wmText); salaryTemplate.setSalaryWatermark(JSON.toJSONString(salaryBillWatermark)); } + @Override public PageInfo salarySendInfoListPage(SalarySendInfoQueryParam queryParam) { diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 71eb1441a..ae6c6447a 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -566,6 +566,19 @@ public class SalaryBillController { return new ResponseResult(user).run(getSalaryBillBaseSetWrapper(user)::getBaseSetForm); } + /** + * 预览水印 + * + * @return + */ + @POST + @Path("/baseSet/previewWaterMark") + @Produces(MediaType.APPLICATION_JSON) + public String getBaseSetForm( @Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryBaseSetSaveParam saveParam ) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryBillBaseSetWrapper(user)::previewWaterMark, saveParam); + } + /** * 保存工资单基础设置 * diff --git a/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java index b9409018e..033dbd18e 100644 --- a/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java @@ -74,4 +74,12 @@ public class SalaryBillBaseSetWrapper extends Service { public String saveBaseSet(SalaryBaseSetSaveParam saveParam) { return getSalaryBillBaseSetService(user).saveBaseSet(saveParam); } + + /** + * 获取水印预览内容 + * @param salaryBaseSetSaveParam + */ + public String previewWaterMark(SalaryBaseSetSaveParam salaryBaseSetSaveParam) { + return getSalaryBillBaseSetService(user).previewWaterMark(salaryBaseSetSaveParam.getWmSetting()); + } } From 1460d32ae4c8c46849dfabd8f9d0101aded11a6a Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 13 Jun 2023 14:49:26 +0800 Subject: [PATCH 164/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E7=A6=8F=E5=88=A9=EF=BC=8C=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E3=80=81=E5=AF=BC=E5=87=BA=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E8=A1=A8=E5=A4=B4=E5=86=85=E5=AE=B9=E5=92=8C=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=8C=85=E6=8B=AC=E8=87=AA=E9=80=89=E8=A1=A8?= =?UTF-8?q?=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 20 +++++- .../service/impl/ColumnBuildServiceImpl.java | 62 ++++++++++++++++--- .../service/impl/SIExportServiceImpl.java | 60 +++++++++++++++--- .../service/impl/SIImportServiceImpl.java | 6 +- .../service/impl/SISchemeServiceImpl.java | 20 +++++- 5 files changed, 142 insertions(+), 26 deletions(-) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index ca60b7460..dac9c3f20 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -1195,9 +1195,23 @@ public class SIArchivesBiz { } }); - result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialMap); - result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundMap); - result.put(WelfareTypeEnum.OTHER.getValue(), otherMap); + // map根据key排序 + LinkedHashMap socialMapWithAscKey = socialMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundMapWithAscKey = fundMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherMapWithAscKey = otherMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + + result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialMapWithAscKey); + result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundMapWithAscKey); + result.put(WelfareTypeEnum.OTHER.getValue(), otherMapWithAscKey); return result; } finally { sqlSession.close(); diff --git a/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java b/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java index 34a3d99f6..37cbfd652 100644 --- a/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/ColumnBuildServiceImpl.java @@ -52,8 +52,8 @@ public class ColumnBuildServiceImpl extends Service implements ColumnBuildServic list.add(employeeIdColumn); list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 86185, "部门"), "department")); list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 86186, "手机号"), "mobile")); - list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 86187, "员工状态"), "employeeStatus")); list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 1933, "工号"), "workcode")); + list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 86187, "员工状态"), "employeeStatus")); list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 100377, "数据来源"), "sourceFrom")); if (paymentStatus.equals(PaymentStatusEnum.REPAIR.getValue())) { list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 100379, "补缴月份"), "supplementaryMonth")); @@ -166,9 +166,23 @@ public class ColumnBuildServiceImpl extends Service implements ColumnBuildServic otherColumns.put(categoryIdNameMap.get(social) + SalaryI18nUtil.getI18nLabel( 100293, "申报基数"), social + "otherBase"); } }); - result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumns); - result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumns); - result.put(WelfareTypeEnum.OTHER.getValue(), otherColumns); + // map根据value排序 + LinkedHashMap socialColumnsWithAscValue = socialColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundColumnsWithAscValue = fundColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherColumnsWithAscValue = otherColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + + result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumnsWithAscValue); + result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumnsWithAscValue); + result.put(WelfareTypeEnum.OTHER.getValue(), otherColumnsWithAscValue); return result; } @@ -225,9 +239,23 @@ public class ColumnBuildServiceImpl extends Service implements ColumnBuildServic otherColumns.put(categoryIdNameMap.get(social) + SalaryI18nUtil.getI18nLabel( 87159, "个人"), social + "otherPer"); } }); - result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumns); - result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumns); - result.put(WelfareTypeEnum.OTHER.getValue(), otherColumns); + // map根据value排序 + LinkedHashMap socialColumnsWithAscValue = socialColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundColumnsWithAscValue = fundColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherColumnsWithAscValue = otherColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + + result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumnsWithAscValue); + result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumnsWithAscValue); + result.put(WelfareTypeEnum.OTHER.getValue(), otherColumnsWithAscValue); return result; } @@ -284,9 +312,23 @@ public class ColumnBuildServiceImpl extends Service implements ColumnBuildServic otherColumns.put(categoryIdNameMap.get(social) + SalaryI18nUtil.getI18nLabel( 100289, "单位"), social + "otherCom"); } }); - result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumns); - result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumns); - result.put(WelfareTypeEnum.OTHER.getValue(), otherColumns); + // map根据value排序 + LinkedHashMap socialColumnsWithAscValue = socialColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundColumnsWithAscValue = fundColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherColumnsWithAscValue = otherColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + + result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumnsWithAscValue); + result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumnsWithAscValue); + result.put(WelfareTypeEnum.OTHER.getValue(), otherColumnsWithAscValue); return result; } diff --git a/src/com/engine/salary/service/impl/SIExportServiceImpl.java b/src/com/engine/salary/service/impl/SIExportServiceImpl.java index 9faa7fd87..ae330912a 100644 --- a/src/com/engine/salary/service/impl/SIExportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIExportServiceImpl.java @@ -392,9 +392,23 @@ public class SIExportServiceImpl extends Service implements SIExportService { social + "otherCom"); } }); - result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumns); - result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumns); - result.put(WelfareTypeEnum.OTHER.getValue(), otherColumns); + // map根据value排序 + LinkedHashMap socialColumnsWithAscValue = socialColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundColumnsWithAscValue = fundColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherColumnsWithAscValue = otherColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + + result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumnsWithAscValue); + result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumnsWithAscValue); + result.put(WelfareTypeEnum.OTHER.getValue(), otherColumnsWithAscValue); return result; } @@ -454,9 +468,23 @@ public class SIExportServiceImpl extends Service implements SIExportService { social + "otherPer"); } }); - result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumns); - result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumns); - result.put(WelfareTypeEnum.OTHER.getValue(), otherColumns); + // map根据value排序 + LinkedHashMap socialColumnsWithAscValue = socialColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundColumnsWithAscValue = fundColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherColumnsWithAscValue = otherColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + + result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumnsWithAscValue); + result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumnsWithAscValue); + result.put(WelfareTypeEnum.OTHER.getValue(), otherColumnsWithAscValue); return result; } @@ -605,9 +633,23 @@ public class SIExportServiceImpl extends Service implements SIExportService { otherColumns.put(categoryIdNameMap.get(social) + SalaryI18nUtil.getI18nLabel(100293, "申报基数"), social + "otherBase"); } }); - result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumns); - result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumns); - result.put(WelfareTypeEnum.OTHER.getValue(), otherColumns); + // map根据value排序 + LinkedHashMap socialColumnsWithAscValue = socialColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundColumnsWithAscValue = fundColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherColumnsWithAscValue = otherColumns.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + + result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialColumnsWithAscValue); + result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundColumnsWithAscValue); + result.put(WelfareTypeEnum.OTHER.getValue(), otherColumnsWithAscValue); return result; } } diff --git a/src/com/engine/salary/service/impl/SIImportServiceImpl.java b/src/com/engine/salary/service/impl/SIImportServiceImpl.java index 4a5ffae54..ae235c3fc 100644 --- a/src/com/engine/salary/service/impl/SIImportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIImportServiceImpl.java @@ -225,7 +225,11 @@ public class SIImportServiceImpl extends Service implements SIImportService { * @return */ public Map welfareNameIdMap(WelfareTypeEnum welfareTypeEnum) { - return getICategoryMapper().listByWelfareType(welfareTypeEnum.getValue(),null).stream().collect(Collectors.toMap(ICategoryPO::getInsuranceName, ICategoryPO::getId)); +// return getICategoryMapper().listByWelfareType(welfareTypeEnum.getValue(),null).stream().collect(Collectors.toMap(ICategoryPO::getInsuranceName, ICategoryPO::getId)); + return getICategoryMapper().listByWelfareType(welfareTypeEnum.getValue(),null) + .stream() + .sorted(Comparator.comparing(ICategoryPO::getId)) + .collect(LinkedHashMap::new, (map, item) -> map.put(item.getInsuranceName(), item.getId()), LinkedHashMap::putAll); } public Map welfareMap() { diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index d98a6d746..a3fdc6cc0 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -578,9 +578,23 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } }); - result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialMap); - result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundMap); - result.put(WelfareTypeEnum.OTHER.getValue(), otherMap); + // map根据key排序 + LinkedHashMap socialMapWithAscKey = socialMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap fundMapWithAscKey = fundMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + LinkedHashMap otherMapWithAscKey = otherMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, + LinkedHashMap::new)); + + result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialMapWithAscKey); + result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundMapWithAscKey); + result.put(WelfareTypeEnum.OTHER.getValue(), otherMapWithAscKey); return result; } From 12b4977067bb08eaee2f9cd6b24b3226018ee858 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 13 Jun 2023 15:43:10 +0800 Subject: [PATCH 165/245] =?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=E9=80=80=E5=B7=AE?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SIRecessionServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIRecessionServiceImpl.java b/src/com/engine/salary/service/impl/SIRecessionServiceImpl.java index 3a6476889..e1cf27275 100644 --- a/src/com/engine/salary/service/impl/SIRecessionServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIRecessionServiceImpl.java @@ -219,7 +219,7 @@ public class SIRecessionServiceImpl extends Service implements SIRecessionServic String socialComJson = insuranceAccountDetailPO.getSocialComJson(); if (StringUtils.isNotBlank(socialComJson)) { HashMap jsonMap = new HashMap<>(); - HashMap hashMap = JSON.parseObject(socialPerJson, new HashMap().getClass()); + HashMap hashMap = JSON.parseObject(socialComJson, new HashMap().getClass()); hashMap.forEach((k, v) -> { if (StringUtils.isNotBlank(v)) { v = new BigDecimal(v).negate().toPlainString(); @@ -254,7 +254,7 @@ public class SIRecessionServiceImpl extends Service implements SIRecessionServic String fundComJson = insuranceAccountDetailPO.getFundComJson(); if (StringUtils.isNotBlank(fundComJson)) { HashMap jsonMap = new HashMap<>(); - HashMap hashMap = JSON.parseObject(fundPerJson, new HashMap().getClass()); + HashMap hashMap = JSON.parseObject(fundComJson, new HashMap().getClass()); hashMap.forEach((k, v) -> { if (StringUtils.isNotBlank(v)) { v = new BigDecimal(v).negate().toPlainString(); @@ -290,7 +290,7 @@ public class SIRecessionServiceImpl extends Service implements SIRecessionServic String otherComJson = insuranceAccountDetailPO.getOtherComJson(); if (StringUtils.isNotBlank(otherComJson)) { HashMap jsonMap = new HashMap<>(); - HashMap hashMap = JSON.parseObject(otherPerJson, new HashMap().getClass()); + HashMap hashMap = JSON.parseObject(otherComJson, new HashMap().getClass()); hashMap.forEach((k, v) -> { if (StringUtils.isNotBlank(v)) { v = new BigDecimal(v).negate().toPlainString(); From 3638fb469f884dee57f1b41b222569c0e19701c1 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 14 Jun 2023 10:33:26 +0800 Subject: [PATCH 166/245] =?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=A1=A3=E6=A1=88=EF=BC=8C=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E3=80=81=E5=AF=BC=E5=87=BA=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E8=A1=A8=E5=A4=B4=E5=86=85=E5=AE=B9=E5=92=8C=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=8C=85=E6=8B=AC=E8=87=AA=E9=80=89=E8=A1=A8?= =?UTF-8?q?=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryArchiveExcelServiceImpl.java | 7 +++++-- .../salary/service/impl/SalaryArchiveServiceImpl.java | 9 ++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 9e95a4c43..2ce7e1916 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -42,6 +42,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import weaver.file.ImageFileManager; +import weaver.general.Util; import weaver.hrm.User; import java.io.InputStream; @@ -278,8 +279,9 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // header.add(SalaryI18nUtil.getI18nLabel(87889, "薪资账套")); // header.add(SalaryI18nUtil.getI18nLabel(86319, "入职日期")); header.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); + header.add(SalaryI18nUtil.getI18nLabel(1933, "工号")); header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); - header.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); + header.add(SalaryI18nUtil.getI18nLabel(15890, "员工状态")); // if (enableHr) { // header.add(SalaryI18nUtil.getI18nLabel(106277, "身份证号码")); // } @@ -350,8 +352,9 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // row.add(e.get("salarySob").toString()); // row.add(e.get("hiredate")); row.add(e.get("departmentName")); - row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); row.add(Optional.ofNullable(e.get("workcode")).orElse("").toString()); + row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); + row.add(Util.null2String(e.get("employeeStatus"))); // if (enableHr) { // row.add(Optional.ofNullable(e.get("idNo")).orElse("").toString()); // } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 1dcf84c18..1c73dc8ce 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -459,7 +459,14 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资档案"); // 获取所有可被引用的薪资项目 List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); - String[] header = {SalaryI18nUtil.getI18nLabel(85429, "姓名"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), SalaryI18nUtil.getI18nLabel(86185, "部门"), SalaryI18nUtil.getI18nLabel(86176, "工号"), SalaryI18nUtil.getI18nLabel(86186, "手机号"), SalaryI18nUtil.getI18nLabel(91075, "状态"), SalaryI18nUtil.getI18nLabel(91075, "起始发薪日期"), SalaryI18nUtil.getI18nLabel(91075, "最后发薪日期")}; + String[] header = {SalaryI18nUtil.getI18nLabel(85429, "姓名"), + SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), + SalaryI18nUtil.getI18nLabel(86185, "部门"), + SalaryI18nUtil.getI18nLabel(86176, "工号"), + SalaryI18nUtil.getI18nLabel(86186, "手机号"), + SalaryI18nUtil.getI18nLabel(15890, "员工状态"), + SalaryI18nUtil.getI18nLabel(91075, "起始发薪日期"), + SalaryI18nUtil.getI18nLabel(91075, "最后发薪日期")}; // 2.表头 List headerList = new ArrayList<>(Arrays.asList(header)); for (SalaryItemPO salaryItem : salaryItems) { From 57798a8e3e7515cfd55fee9948397d91dfa678c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 14 Jun 2023 15:51:26 +0800 Subject: [PATCH 167/245] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/cache/SalaryCacheKey.java | 5 ++ .../salaryBill/param/SMSCodeCheckParam.java | 32 +++++++++ .../salaryBill/param/SMSCodeSendParam.java | 28 ++++++++ .../salarybill/SalarySendInfoMapper.xml | 2 +- .../salary/service/SalarySendService.java | 12 ++++ .../service/impl/SalarySendServiceImpl.java | 71 +++++++++++++++++++ .../impl/TaxAgentManageRangeServiceImpl.java | 5 +- .../salary/web/SalaryBillController.java | 45 +++++++----- .../salary/wrapper/SalarySendWrapper.java | 22 ++++++ 9 files changed, 202 insertions(+), 20 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryBill/param/SMSCodeCheckParam.java create mode 100644 src/com/engine/salary/entity/salaryBill/param/SMSCodeSendParam.java diff --git a/src/com/engine/salary/cache/SalaryCacheKey.java b/src/com/engine/salary/cache/SalaryCacheKey.java index 76d19ea7d..27017f24b 100644 --- a/src/com/engine/salary/cache/SalaryCacheKey.java +++ b/src/com/engine/salary/cache/SalaryCacheKey.java @@ -35,6 +35,11 @@ public class SalaryCacheKey { */ public final static String SALARY_WITHDRAW_PROGRESS = "SALARY_WITHDRAW_PROGRESS"; + /** + * 短信验证码缓存 + */ + public final static String SALARY_CACHE_SMS_CODE = "SALARY_CACHE_SMS_CODE"; + /** * ecology系统的token */ diff --git a/src/com/engine/salary/entity/salaryBill/param/SMSCodeCheckParam.java b/src/com/engine/salary/entity/salaryBill/param/SMSCodeCheckParam.java new file mode 100644 index 000000000..322db1253 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SMSCodeCheckParam.java @@ -0,0 +1,32 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 短信验证码发送参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SMSCodeCheckParam { + + /** + * 工资单id + */ + private Long id; + + /** + * 验证码 + */ + private String mobileCode; + +} diff --git a/src/com/engine/salary/entity/salaryBill/param/SMSCodeSendParam.java b/src/com/engine/salary/entity/salaryBill/param/SMSCodeSendParam.java new file mode 100644 index 000000000..9d25ea87a --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SMSCodeSendParam.java @@ -0,0 +1,28 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 短信验证码发送参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SMSCodeSendParam { + + /** + * 工资单id + */ + private Long id; + + +} diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml index d609b4e03..95a44fd54 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml @@ -50,7 +50,7 @@ diff --git a/src/com/engine/salary/service/SalarySendService.java b/src/com/engine/salary/service/SalarySendService.java index d85b9cd5d..36864da21 100644 --- a/src/com/engine/salary/service/SalarySendService.java +++ b/src/com/engine/salary/service/SalarySendService.java @@ -175,4 +175,16 @@ public interface SalarySendService { * @param ids */ void deleteBySalaryAcctRecordIds(Collection ids); + + /** + * 发送短信验证码 + * @param param + */ + void sendMobileCode(SMSCodeSendParam param); + + /** + * 校验验证码 + * @param param + */ + Boolean checkMobileCode(SMSCodeCheckParam param); } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 46c7cdd0b..581d9adce 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.lang.Validator; import com.alibaba.fastjson.JSONArray; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.bean.MessageBean; @@ -65,6 +66,7 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import weaver.common.MessageUtil; import weaver.hrm.User; import weaver.hrm.company.SubCompanyComInfo; import weaver.hrm.resource.ResourceComInfo; @@ -74,9 +76,13 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneOffset; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.cache.SalaryCacheKey.SALARY_CACHE_SMS_CODE; + /** * @Description: 工资单发放 * @Author: wangxiangzhong @@ -167,6 +173,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService return ServiceUtil.getService(SalaryBillServiceImpl.class, user); } + private SalaryCacheService getSalaryCacheService(User user) { + return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); + } @Override public SalarySendPO getById(Long salarySendId) { @@ -1436,4 +1445,66 @@ public class SalarySendServiceImpl extends Service implements SalarySendService getSalarySendInfoMapper().deleteBySalaryAcctRecordIds(ids); } } + + @Override + public void sendMobileCode(SMSCodeSendParam param) { + Long id = param.getId(); + SalarySendInfoPO po = getSalarySendInfoMapper().getById(id); + if (po == null) { + throw new SalaryRunTimeException("未获取工资单发放信息"); + } + + Long employeeId = po.getEmployeeId(); + DataCollectionEmployee employee = getSalaryEmployeeService(user).getEmployeeById(employeeId); + if (employee == null) { + throw new SalaryRunTimeException("未获取人员信息"); + } + + String mobile = employee.getMobile(); + if (Validator.isMobile(mobile)) { + throw new SalaryRunTimeException("手机号信息有误"); + } + + boolean checkSendSMS = MessageUtil.checkSendSMS(); + if (!checkSendSMS) { + throw new SalaryRunTimeException("短信服务异常"); + } + + //1、生成6位验证码 + String mobileCode = (int) ((Math.random() * 9 + 1) * 100000) + ""; + //失效时间 + long expirationTime = LocalDateTime.now().plusMinutes(10L).toInstant(ZoneOffset.ofHours(8)).toEpochMilli(); + String cacheValue = mobileCode + "_" + expirationTime; + + //2、验证码缓存,10分钟失效 + getSalaryCacheService(user).set(SALARY_CACHE_SMS_CODE + "_" + id, cacheValue); + + //3、发送短信 + MessageUtil.sendSMS(mobile, "验证码:" + mobileCode + "有效时间10分钟,用于查看工资单,请不要告诉他人。"); + } + + @Override + public Boolean checkMobileCode(SMSCodeCheckParam param) { + Long id = param.getId(); + + String mobileCode = param.getMobileCode(); + + //取出验证码 + String cacheValue = getSalaryCacheService(user).get(SALARY_CACHE_SMS_CODE + "_" + id); + String[] cache = cacheValue.split("_"); + String code = cache[0]; + //失效时间 + long expirationTime = Long.parseLong(cache[1]); + + long nowTime = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli(); + if (nowTime > expirationTime) { + throw new SalaryRunTimeException("验证码已失效,请重新发送"); + } + + if (!StringUtils.equals(code, mobileCode)) { + throw new SalaryRunTimeException("验证码错误"); + } + + return true; + } } diff --git a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java index 680eb9337..44fcad1c8 100644 --- a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java @@ -4,7 +4,6 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.EmployBiz; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; import com.engine.salary.entity.hrm.HrmStatus; @@ -462,8 +461,8 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM List allSalaryEmployees = this.getManageRangeSalaryEmployees(taxAgentId, allRanges, salaryEmployees); taxAgentEmpSaveParamList.add(getTaxAgentEmpSyncParam(taxAgentId, allSalaryEmployees)); - List allSubAdminRanges = Optional.ofNullable(allRangeMap.get(taxAgentId + "-" + TaxAgentRangeTypeEnum.SUBADMIN.getValue())).orElse(Collections.emptyList()); - subAdminEmpSaveParamList.addAll(getTaxAgentSubAdminEmpSyncParam(taxAgentId, allSubAdminRanges, salaryEmployees)); +// List allSubAdminRanges = Optional.ofNullable(allRangeMap.get(taxAgentId + "-" + TaxAgentRangeTypeEnum.SUBADMIN.getValue())).orElse(Collections.emptyList()); +// subAdminEmpSaveParamList.addAll(getTaxAgentSubAdminEmpSyncParam(taxAgentId, allSubAdminRanges, salaryEmployees)); }); Long employeeId = 0L; // 同步管理员的人员 diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 477a173c7..46b1ad642 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -512,10 +512,6 @@ public class SalaryBillController { @Produces(MediaType.APPLICATION_JSON) public String mySalaryBillList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryBillQueryParam queryParam) { User user = HrmUserVarify.getUser(request, response); -// if (StringUtils.isEmpty(queryParam.getToken())) { -// throw new SalaryRunTimeException(SalrayCheckSecondAuthConstant.CHECK_SECOND_FAIL_NO_TOKEN); -// } -// queryParam.setEmployeeId((long) user.getUID()); return new ResponseResult>(user).run(getSalarySendWrapper(user)::mySalaryBillList, queryParam); } @@ -544,18 +540,35 @@ public class SalaryBillController { } /******** 工资单发放 end ***********************************************************************************************/ -// /** -// * -// * -// * @param -// * @return -// */ -// @GET -// @Path("/mySalaryBillItemDetail") -// @Produces(MediaType.APPLICATION_JSON) -// public String mySalaryBillItemDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody) { -// -// } + + /** + * 短信验证码 + * + * @param param + * @return + */ + @POST + @Path("/sendMobileCode") + @Produces(MediaType.APPLICATION_JSON) + public String sendSMSCode(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SMSCodeSendParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::sendMobileCode, param); + } + + /** + * 校验验证码 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/checkMobileCode") + @Produces(MediaType.APPLICATION_JSON) + public String checkMobileCode(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SMSCodeCheckParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalarySendWrapper(user)::checkMobileCode, param); + } } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 19dc48f78..914ca60d5 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -646,4 +646,26 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy return datas; } + + /** + * 发送短信验证码 + * @param param 短信验证码发送参数 + */ + public void sendMobileCode(SMSCodeSendParam param) { + getSalarySendService(user).sendMobileCode(param); + } + + /** + * 校验短信验证码 + * @param param + * @return + */ + public Boolean checkMobileCode(SMSCodeCheckParam param) { + return getSalarySendService(user).checkMobileCode(param); + } } + + + + + From 912c80c97f7b410dd7a9c4ef2328ac82d68f9111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 14 Jun 2023 16:15:05 +0800 Subject: [PATCH 168/245] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/constant/SalarySysConstant.java | 5 ++ .../sys/enums/PayrollCheckTypeEnum.java | 55 +++++++++++++++++++ .../salary/web/SalaryBillController.java | 13 +++++ .../salary/wrapper/SalarySendWrapper.java | 19 +++++++ 4 files changed, 92 insertions(+) create mode 100644 src/com/engine/salary/sys/enums/PayrollCheckTypeEnum.java diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index 082a9568f..4008693af 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -61,4 +61,9 @@ public class SalarySysConstant { */ public static final String EDIT_IMPORT_AUTO_LOCK = "EditImportAutoLock"; + /** + * 工资单二次验证方式 + */ + public static final String SALARY_PAYROLL_CHECK_TYPE = "SALARY_PAYROLL_CHECK_TYPE"; + } diff --git a/src/com/engine/salary/sys/enums/PayrollCheckTypeEnum.java b/src/com/engine/salary/sys/enums/PayrollCheckTypeEnum.java new file mode 100644 index 000000000..266424adb --- /dev/null +++ b/src/com/engine/salary/sys/enums/PayrollCheckTypeEnum.java @@ -0,0 +1,55 @@ +package com.engine.salary.sys.enums; + +import com.engine.salary.enums.BaseEnum; +import org.apache.commons.lang3.StringUtils; + +/** + * 排序枚举 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum PayrollCheckTypeEnum implements BaseEnum { + + PWD("PWD", "密码验证", 1), + SMS("SMS", "短信验证", 1); + + private String value; + + private String defaultLabel; + + private int labelId; + + + PayrollCheckTypeEnum(String value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public String getValue() { + return value; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + public static PayrollCheckTypeEnum parseByValue(String value) { + for (PayrollCheckTypeEnum payrollCheckTypeEnum : PayrollCheckTypeEnum.values()) { + if (StringUtils.equals(payrollCheckTypeEnum.getValue(), value)) { + return payrollCheckTypeEnum; + } + } + return PWD; + } +} diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 46b1ad642..c058de8d3 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -5,6 +5,7 @@ import com.engine.salary.entity.salaryBill.dto.*; import com.engine.salary.entity.salaryBill.param.*; import com.engine.salary.enums.salarybill.SalarySendStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.sys.enums.PayrollCheckTypeEnum; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.page.PageInfo; @@ -540,6 +541,18 @@ public class SalaryBillController { } /******** 工资单发放 end ***********************************************************************************************/ + /** + * 获取验证方式 + * + * @return + */ + @GET + @Path("/payrollCheckType") + @Produces(MediaType.APPLICATION_JSON) + public String payrollCheckType(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalarySendWrapper(user)::payrollCheckType); + } /** * 短信验证码 diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 914ca60d5..21b2389c9 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -26,6 +26,11 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarybill.SalarySendMapper; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; +import com.engine.salary.sys.constant.SalarySysConstant; +import com.engine.salary.sys.entity.po.SalarySysConfPO; +import com.engine.salary.sys.enums.PayrollCheckTypeEnum; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -78,6 +83,10 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + /** * 工资单发放列表 @@ -663,6 +672,16 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy public Boolean checkMobileCode(SMSCodeCheckParam param) { return getSalarySendService(user).checkMobileCode(param); } + + public PayrollCheckTypeEnum payrollCheckType() { + SalarySysConfPO conf = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_PAYROLL_CHECK_TYPE); + + if(conf == null){ + return PayrollCheckTypeEnum.PWD; + } + + return PayrollCheckTypeEnum.parseByValue(conf.getConfValue()); + } } From 1cdbe4d19da7699d55684fe60f3dec28ca1588b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 14 Jun 2023 16:26:25 +0800 Subject: [PATCH 169/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E5=BC=80=E5=85=B3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sql/薪酬开关配置 | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 resource/sql/薪酬开关配置 diff --git a/resource/sql/薪酬开关配置 b/resource/sql/薪酬开关配置 new file mode 100644 index 000000000..d394b544b --- /dev/null +++ b/resource/sql/薪酬开关配置 @@ -0,0 +1,8 @@ + +-- 核算结果编辑导入自动锁定 +INSERT INTO hrsa_salary_sys_conf (id, conf_key, conf_value, title, module, order_weight, description, delete_type, create_time, update_time) VALUES +(1680514369215, 'EditImportAutoLock', '1', '核算结果编辑导入自动锁定', 'app', 0, NULL, 0, '2023-06-02 15:19:39', '2023-06-02 15:19:45'); + +-- 工资单验证方式 PWD SMS +INSERT INTO hrsa_salary_sys_conf (id, conf_key, conf_value, title, module, order_weight, description, delete_type, create_time, update_time) VALUES +(1680514369777, 'SALARY_PAYROLL_CHECK_TYPE', 'PWD', '工资单验证方式', 'app', 0, NULL, 0, '2023-06-02 15:19:39', '2023-06-02 15:19:45'); \ No newline at end of file From d0c04688a8d5bdea5bb716c46a9e1a4d9111a964 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 15 Jun 2023 10:05:27 +0800 Subject: [PATCH 170/245] =?UTF-8?q?=E5=81=9C=E8=96=AAaction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/action/StopSalaryAction.java | 166 ++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 src/com/engine/salary/action/StopSalaryAction.java diff --git a/src/com/engine/salary/action/StopSalaryAction.java b/src/com/engine/salary/action/StopSalaryAction.java new file mode 100644 index 000000000..d5ecaa293 --- /dev/null +++ b/src/com/engine/salary/action/StopSalaryAction.java @@ -0,0 +1,166 @@ +package com.engine.salary.action; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; +import com.engine.salary.mapper.archive.SalaryArchiveMapper; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.wrapper.SalaryArchiveWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author Harryxzy + * @ClassName stopSalaryAction + * @date 2023/06/15 9:17 + * @description 停薪处理 + */ +@Slf4j +public class StopSalaryAction implements Action { + + private SalaryArchiveWrapper getSalaryArchiveWrapper(User user) { + return ServiceUtil.getService(SalaryArchiveWrapper.class, user); + } + + private SalaryArchiveService getSalaryArchiveService(User user) { + return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + private SalaryArchiveMapper getSalaryArchiveMapper() { + return MapperProxyFactory.getProxy(SalaryArchiveMapper.class); + } + + private String tableName; + + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + @Override + public String execute(RequestInfo requestInfo) { + try { + + Property[] properties = requestInfo.getMainTableInfo().getProperty(); + Map fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName, + property -> Util.null2String(property.getValue()))); + + RecordSet rs = new RecordSet(); + + String queryImageId = "select salaryname,processfield from " + tableName + " where workflowid = ?"; + rs.executeQuery(queryImageId, requestInfo.getWorkflowid()); + + List list = new ArrayList<>(); + while (rs.next()) { + String processField = rs.getString("processfield"); + String salaryName = rs.getString("salaryname"); + String value = fieldMap.get(processField); + list.add(new StopSalaryAction.SalaryField(processField, salaryName, value)); + } + List> importData = new ArrayList<>(); + Map importDataMap = SalaryEntityUtil.convert2Map(list, StopSalaryAction.SalaryField::getSalaryName, StopSalaryAction.SalaryField::getValue); + Long taxAgentId = Long.valueOf(importDataMap.getOrDefault("个税扣缴义务人", "0").toString()); + Long employeeId = Long.valueOf(importDataMap.getOrDefault("员工id", "-1").toString()); + if( importDataMap.get("最后发薪日期") == null || StringUtils.isBlank(importDataMap.get("最后发薪日期").toString())){ + requestInfo.getRequestManager().setMessage("缺少最后发薪日期字段!"); + return FAILURE_AND_CONTINUE; + }else if(SalaryDateUtil.stringToDate(importDataMap.get("最后发薪日期").toString()) == null){ + requestInfo.getRequestManager().setMessage("最后发薪日期格式错误,格式为yyyy-MM-dd"); + return FAILURE_AND_CONTINUE; + } + + //操作人 + String uid = importDataMap.getOrDefault("操作人","1").toString(); + User user = new User(Integer.parseInt(uid)); + // 获取薪资档案 + List salaryArchiveList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(employeeId).deleteType(NumberUtils.INTEGER_ZERO).build()); + if(CollectionUtils.isEmpty(salaryArchiveList)){ + requestInfo.getRequestManager().setMessage("该个税扣缴义务人下该员工不存在薪资档案,请检查后重试!"); + return FAILURE_AND_CONTINUE; + } + if(salaryArchiveList.size() > 1){ + requestInfo.getRequestManager().setMessage("该个税扣缴义务人下该员工存在多条薪资档案记录,请检查后重试!"); + return FAILURE_AND_CONTINUE; + } + // 设置最后发薪日期 + SalaryArchivePO salaryArchivePO = salaryArchiveList.get(0); + SalaryArchivePO updatePO = SalaryArchivePO.builder().id(salaryArchivePO.getId()).build(); + if(StringUtils.equals(salaryArchivePO.getRunStatus(), SalaryArchiveStatusEnum.FIXED.getValue()) || StringUtils.equals(salaryArchivePO.getRunStatus(), SalaryArchiveStatusEnum.SUSPEND.getValue())){ + // 发薪、待停薪员工设置最后发薪日期 + updatePO.setRunStatus(SalaryArchiveStatusEnum.SUSPEND.getValue()); + updatePO.setPayEndDate(SalaryDateUtil.stringToDate(importDataMap.get("最后发薪日期").toString())); + updatePO.setUpdateTime(new Date()); + getSalaryArchiveMapper().update(updatePO); + // 停薪 + getSalaryArchiveService(user).gotoStop(Collections.singletonList(updatePO.getId())); + }else{ + // 待定薪员工 + getSalaryArchiveService(user).deletePendingTodo(Collections.singletonList(updatePO.getId())); + } + } 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; + } + } +} From 9905f406c0eb08cd32bbe379dde4a36a05bc2979 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 15 Jun 2023 10:07:06 +0800 Subject: [PATCH 171/245] =?UTF-8?q?=E5=81=9C=E8=96=AAaction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/action/StopSalaryAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/action/StopSalaryAction.java b/src/com/engine/salary/action/StopSalaryAction.java index d5ecaa293..074195a7d 100644 --- a/src/com/engine/salary/action/StopSalaryAction.java +++ b/src/com/engine/salary/action/StopSalaryAction.java @@ -76,7 +76,7 @@ public class StopSalaryAction implements Action { String value = fieldMap.get(processField); list.add(new StopSalaryAction.SalaryField(processField, salaryName, value)); } - List> importData = new ArrayList<>(); + // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, StopSalaryAction.SalaryField::getSalaryName, StopSalaryAction.SalaryField::getValue); Long taxAgentId = Long.valueOf(importDataMap.getOrDefault("个税扣缴义务人", "0").toString()); Long employeeId = Long.valueOf(importDataMap.getOrDefault("员工id", "-1").toString()); From c87a754888eb5c1747a1c78f9f0a9efd04da4383 Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 15 Jun 2023 10:23:03 +0800 Subject: [PATCH 172/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=EF=BC=8C=E8=96=AA=E8=B5=84=E8=B4=A6=E5=A5=97=E3=80=81=E4=B8=AA?= =?UTF-8?q?=E7=A8=8E=E6=89=A3=E7=BC=B4=E4=B9=89=E5=8A=A1=E4=BA=BA=E3=80=81?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8=E6=8C=89?= =?UTF-8?q?=E7=85=A7=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4=E9=99=8D=E5=BA=8F?= =?UTF-8?q?=E6=8E=92=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml | 2 +- src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml | 2 +- src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index 59e4d3e1b..557ff7364 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -462,7 +462,7 @@ WHERE delete_type = 0 - ORDER BY sorted_index DESC, id DESC + ORDER BY sorted_index DESC, create_time DESC diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml index b68b5c25d..84e424805 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml @@ -45,7 +45,7 @@ FROM hrsa_tax_agent t WHERE delete_type = 0 - ORDER BY sorted_index DESC + ORDER BY sorted_index DESC, create_time DESC From 2480525fa655d753181a03c623c72237efea8786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 15 Jun 2023 10:44:31 +0800 Subject: [PATCH 173/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=A1=A3=E6=A1=88bug=20=E7=BC=93=E5=AD=98=E5=85=AC=E5=85=B1?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryArchiveServiceImpl.java | 5 +--- .../impl/TaxAgentManageRangeServiceImpl.java | 11 +++++++-- .../engine/salary/util/SalaryEnumUtil.java | 1 - .../salary/web/SalaryCommonController.java | 23 +++++++++++++++++++ .../salary/wrapper/SalaryCommonWrapper.java | 23 +++++++++++++++++++ .../salary/wrapper/TaxAgentWrapper.java | 10 -------- 6 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 src/com/engine/salary/wrapper/SalaryCommonWrapper.java diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 1dcf84c18..9b14cb822 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -259,8 +259,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe * @param currentEmployeeId */ public void handleChangeData(Long currentEmployeeId) { - //开始同步中.... - Util_DataCache.setObjVal("salaryArchiveChangeSign", "1"); + // 所有增量人员列表 List taxAgentEmpChangeList = getTaxAgentEmpChangeService(user).listAllByModule(TaxAgentEmpChangeModuleEnum.SALARY_ARCHIVE); if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) { @@ -303,8 +302,6 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe } /** 增量处理 end ***/ - //同步结束.... - Util_DataCache.setObjVal("salaryArchiveChangeSign", "0"); } diff --git a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java index 680eb9337..e1e9bd340 100644 --- a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java @@ -4,7 +4,6 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.biz.EmployBiz; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; import com.engine.salary.entity.hrm.HrmStatus; @@ -352,7 +351,15 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM //生成薪资档案 String salaryArchiveChangeSign = (String) Util_DataCache.getObjVal("salaryArchiveChangeSign"); if (salaryArchiveChangeSign == null || "0".equals(salaryArchiveChangeSign)) { - getSalaryArchiveService(user).handleChangeData(1L); + try { + //开始同步中.... + Util_DataCache.setObjVal("salaryArchiveChangeSign", "1"); + getSalaryArchiveService(user).handleChangeData(1L); + }finally { + //同步结束.... + Util_DataCache.setObjVal("salaryArchiveChangeSign", "0"); + } + } //生成社保福利档案 String welSign = (String) Util_DataCache.getObjVal("welfareChangeSign"); diff --git a/src/com/engine/salary/util/SalaryEnumUtil.java b/src/com/engine/salary/util/SalaryEnumUtil.java index cf2abcd2c..0294bd14c 100644 --- a/src/com/engine/salary/util/SalaryEnumUtil.java +++ b/src/com/engine/salary/util/SalaryEnumUtil.java @@ -88,5 +88,4 @@ public class SalaryEnumUtil { } - } diff --git a/src/com/engine/salary/web/SalaryCommonController.java b/src/com/engine/salary/web/SalaryCommonController.java index 30b4dc313..ca7a439dc 100644 --- a/src/com/engine/salary/web/SalaryCommonController.java +++ b/src/com/engine/salary/web/SalaryCommonController.java @@ -1,7 +1,9 @@ package com.engine.salary.web; +import com.engine.common.util.ServiceUtil; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryEnumUtil; +import com.engine.salary.wrapper.SalaryCommonWrapper; import lombok.extern.slf4j.Slf4j; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -20,6 +22,10 @@ import java.util.Map; @Slf4j public class SalaryCommonController { + private SalaryCommonWrapper getSalaryCommonWrapper(User user) { + return ServiceUtil.getService(SalaryCommonWrapper.class, user); + } + @GET @Path("/enum/list") @Produces(MediaType.APPLICATION_JSON) @@ -29,4 +35,21 @@ public class SalaryCommonController { } + @GET + @Path("/cache/info") + @Produces(MediaType.APPLICATION_JSON) + public String getCacheInfo(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "key") String key) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryCommonWrapper(user)::getCacheInfo, key); + } + + @GET + @Path("/cache/remove") + @Produces(MediaType.APPLICATION_JSON) + public String removeCache(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "key") String key) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryCommonWrapper(user)::removeCache, key); + } + + } diff --git a/src/com/engine/salary/wrapper/SalaryCommonWrapper.java b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java new file mode 100644 index 000000000..baec86d91 --- /dev/null +++ b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java @@ -0,0 +1,23 @@ +package com.engine.salary.wrapper; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.service.SalaryCacheService; +import com.engine.salary.service.impl.SalaryCacheServiceImpl; +import weaver.hrm.User; + + +public class SalaryCommonWrapper extends Service { + + private SalaryCacheService getSalaryCacheService(User user) { + return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); + } + + public String getCacheInfo(String key) { + return getSalaryCacheService(user).get(key); + } + + public void removeCache(String key) { + getSalaryCacheService(user).remove(key); + } +} diff --git a/src/com/engine/salary/wrapper/TaxAgentWrapper.java b/src/com/engine/salary/wrapper/TaxAgentWrapper.java index 86df32a70..a59de95cc 100644 --- a/src/com/engine/salary/wrapper/TaxAgentWrapper.java +++ b/src/com/engine/salary/wrapper/TaxAgentWrapper.java @@ -382,11 +382,6 @@ public class TaxAgentWrapper extends Service { String syncRange = Util.null2String(Util_DataCache.getObjVal(index)); if (StringUtils.isEmpty(syncRange)) { getTaxAgentManageRangeService(user).syncManageRange(taxAgentIds, index); -// try { -// TimeUnit.SECONDS.sleep(2); -// } catch (InterruptedException e) { -// -// } } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(135788, "人员范围同步过于频繁,请稍后再试")); } @@ -403,11 +398,6 @@ public class TaxAgentWrapper extends Service { String syncRange = Util.null2String(Util_DataCache.getObjVal(SalaryCacheKey.TAX_AGENT_MANAGE_RANGE_SYNC)); if (StringUtils.isEmpty(syncRange)) { getTaxAgentManageRangeService(user).syncManageRange(null, SalaryCacheKey.TAX_AGENT_MANAGE_RANGE_SYNC); -// try { -// TimeUnit.SECONDS.sleep(2); -// } catch (InterruptedException e) { -// -// } } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(135788, "人员范围同步过于频繁,请稍后再试")); } From a044335406addea246fd9a7c8964d8af86e4231d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 15 Jun 2023 11:12:12 +0800 Subject: [PATCH 174/245] =?UTF-8?q?=E5=81=9C=E8=96=AAactionCheck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/action/CheckStopSalaryAction.java | 144 ++++++++++++++++++ .../salary/action/StopSalaryAction.java | 8 +- 2 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 src/com/engine/salary/action/CheckStopSalaryAction.java diff --git a/src/com/engine/salary/action/CheckStopSalaryAction.java b/src/com/engine/salary/action/CheckStopSalaryAction.java new file mode 100644 index 000000000..f425741ce --- /dev/null +++ b/src/com/engine/salary/action/CheckStopSalaryAction.java @@ -0,0 +1,144 @@ +package com.engine.salary.action; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author Harryxzy + * @ClassName stopSalaryAction + * @date 2023/06/15 9:17 + * @description 校验停薪参数 + */ +@Slf4j +public class CheckStopSalaryAction implements Action { + + private SalaryArchiveService getSalaryArchiveService(User user) { + return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + + private String tableName; + + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + @Override + public String execute(RequestInfo requestInfo) { + try { + + Property[] properties = requestInfo.getMainTableInfo().getProperty(); + Map fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName, + property -> Util.null2String(property.getValue()))); + + RecordSet rs = new RecordSet(); + + String queryImageId = "select salaryname,processfield from " + tableName + " where workflowid = ?"; + rs.executeQuery(queryImageId, requestInfo.getWorkflowid()); + + List list = new ArrayList<>(); + while (rs.next()) { + String processField = rs.getString("processfield"); + String salaryName = rs.getString("salaryname"); + String value = fieldMap.get(processField); + list.add(new CheckStopSalaryAction.SalaryField(processField, salaryName, value)); + } + // 流程数据 + Map importDataMap = SalaryEntityUtil.convert2Map(list, CheckStopSalaryAction.SalaryField::getSalaryName, CheckStopSalaryAction.SalaryField::getValue); + Long taxAgentId = Long.valueOf(importDataMap.getOrDefault("个税扣缴义务人", "0").toString()); + Long employeeId = Long.valueOf(importDataMap.getOrDefault("员工id", "-1").toString()); + if( importDataMap.get("最后发薪日期") == null || StringUtils.isBlank(importDataMap.get("最后发薪日期").toString())){ + requestInfo.getRequestManager().setMessage("缺少最后发薪日期字段!"); + return FAILURE_AND_CONTINUE; + }else if(SalaryDateUtil.stringToDate(importDataMap.get("最后发薪日期").toString()) == null){ + requestInfo.getRequestManager().setMessage("最后发薪日期格式错误,格式为yyyy-MM-dd"); + return FAILURE_AND_CONTINUE; + } + + //操作人 + String uid = importDataMap.getOrDefault("操作人","1").toString(); + User user = new User(Integer.parseInt(uid)); + // 获取薪资档案 + List salaryArchiveList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(employeeId).deleteType(NumberUtils.INTEGER_ZERO).build()); + if(CollectionUtils.isEmpty(salaryArchiveList)){ + requestInfo.getRequestManager().setMessage("该个税扣缴义务人下该员工不存在薪资档案,请检查后重试!"); + return FAILURE_AND_CONTINUE; + } + if(salaryArchiveList.size() > 1){ + requestInfo.getRequestManager().setMessage("该个税扣缴义务人下该员工存在多条薪资档案记录,请检查后重试!"); + return FAILURE_AND_CONTINUE; + } + + } 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/action/StopSalaryAction.java b/src/com/engine/salary/action/StopSalaryAction.java index 074195a7d..0ed2f9d19 100644 --- a/src/com/engine/salary/action/StopSalaryAction.java +++ b/src/com/engine/salary/action/StopSalaryAction.java @@ -9,7 +9,7 @@ import com.engine.salary.service.impl.SalaryArchiveServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.db.MapperProxyFactory; -import com.engine.salary.wrapper.SalaryArchiveWrapper; +import com.mzlion.core.utils.BeanUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -33,9 +33,6 @@ import java.util.stream.Collectors; @Slf4j public class StopSalaryAction implements Action { - private SalaryArchiveWrapper getSalaryArchiveWrapper(User user) { - return ServiceUtil.getService(SalaryArchiveWrapper.class, user); - } private SalaryArchiveService getSalaryArchiveService(User user) { return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); @@ -103,7 +100,8 @@ public class StopSalaryAction implements Action { } // 设置最后发薪日期 SalaryArchivePO salaryArchivePO = salaryArchiveList.get(0); - SalaryArchivePO updatePO = SalaryArchivePO.builder().id(salaryArchivePO.getId()).build(); + SalaryArchivePO updatePO = new SalaryArchivePO(); + BeanUtils.copyProperties(salaryArchivePO,updatePO); if(StringUtils.equals(salaryArchivePO.getRunStatus(), SalaryArchiveStatusEnum.FIXED.getValue()) || StringUtils.equals(salaryArchivePO.getRunStatus(), SalaryArchiveStatusEnum.SUSPEND.getValue())){ // 发薪、待停薪员工设置最后发薪日期 updatePO.setRunStatus(SalaryArchiveStatusEnum.SUSPEND.getValue()); From b30c08d3ffb8c4f6ce05e80555635409fc12e2e8 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 15 Jun 2023 14:48:58 +0800 Subject: [PATCH 175/245] =?UTF-8?q?=E5=81=9C=E8=96=AAaction=E4=BC=A0?= =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E6=89=A3=E7=BC=B4=E4=B9=89=E5=8A=A1=E4=BA=BA?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/action/CheckStopSalaryAction.java | 14 ++++++++++- .../salary/action/StopSalaryAction.java | 23 +++++++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/action/CheckStopSalaryAction.java b/src/com/engine/salary/action/CheckStopSalaryAction.java index f425741ce..f4cdc0fb2 100644 --- a/src/com/engine/salary/action/CheckStopSalaryAction.java +++ b/src/com/engine/salary/action/CheckStopSalaryAction.java @@ -2,10 +2,13 @@ package com.engine.salary.action; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.SalaryArchiveService; import com.engine.salary.service.impl.SalaryArchiveServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -36,6 +39,9 @@ public class CheckStopSalaryAction implements Action { return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); } + private TaxAgentMapper getTaxAgentMapper() { + return MapperProxyFactory.getProxy(TaxAgentMapper.class); + } private String tableName; @@ -70,7 +76,13 @@ public class CheckStopSalaryAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, CheckStopSalaryAction.SalaryField::getSalaryName, CheckStopSalaryAction.SalaryField::getValue); - Long taxAgentId = Long.valueOf(importDataMap.getOrDefault("个税扣缴义务人", "0").toString()); + String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); + List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); + if(CollectionUtils.isEmpty(taxAgentPOS)){ + requestInfo.getRequestManager().setMessage("个税扣缴义务人不存在!"); + return FAILURE_AND_CONTINUE; + } + Long taxAgentId = Long.valueOf( taxAgentPOS.get(0).getId() ); Long employeeId = Long.valueOf(importDataMap.getOrDefault("员工id", "-1").toString()); if( importDataMap.get("最后发薪日期") == null || StringUtils.isBlank(importDataMap.get("最后发薪日期").toString())){ requestInfo.getRequestManager().setMessage("缺少最后发薪日期字段!"); diff --git a/src/com/engine/salary/action/StopSalaryAction.java b/src/com/engine/salary/action/StopSalaryAction.java index 0ed2f9d19..77e6c1d2b 100644 --- a/src/com/engine/salary/action/StopSalaryAction.java +++ b/src/com/engine/salary/action/StopSalaryAction.java @@ -2,8 +2,10 @@ package com.engine.salary.action; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; import com.engine.salary.mapper.archive.SalaryArchiveMapper; +import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.SalaryArchiveService; import com.engine.salary.service.impl.SalaryArchiveServiceImpl; import com.engine.salary.util.SalaryDateUtil; @@ -42,6 +44,11 @@ public class StopSalaryAction implements Action { return MapperProxyFactory.getProxy(SalaryArchiveMapper.class); } + private TaxAgentMapper getTaxAgentMapper() { + return MapperProxyFactory.getProxy(TaxAgentMapper.class); + } + + private String tableName; @@ -63,6 +70,7 @@ public class StopSalaryAction implements Action { RecordSet rs = new RecordSet(); + String queryImageId = "select salaryname,processfield from " + tableName + " where workflowid = ?"; rs.executeQuery(queryImageId, requestInfo.getWorkflowid()); @@ -75,7 +83,17 @@ public class StopSalaryAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, StopSalaryAction.SalaryField::getSalaryName, StopSalaryAction.SalaryField::getValue); - Long taxAgentId = Long.valueOf(importDataMap.getOrDefault("个税扣缴义务人", "0").toString()); + //操作人 + String uid = importDataMap.getOrDefault("操作人","1").toString(); + User user = new User(Integer.parseInt(uid)); + + String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); + List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); + if(CollectionUtils.isEmpty(taxAgentPOS)){ + requestInfo.getRequestManager().setMessage("个税扣缴义务人不存在!"); + return FAILURE_AND_CONTINUE; + } + Long taxAgentId = Long.valueOf( taxAgentPOS.get(0).getId() ); Long employeeId = Long.valueOf(importDataMap.getOrDefault("员工id", "-1").toString()); if( importDataMap.get("最后发薪日期") == null || StringUtils.isBlank(importDataMap.get("最后发薪日期").toString())){ requestInfo.getRequestManager().setMessage("缺少最后发薪日期字段!"); @@ -85,9 +103,6 @@ public class StopSalaryAction implements Action { return FAILURE_AND_CONTINUE; } - //操作人 - String uid = importDataMap.getOrDefault("操作人","1").toString(); - User user = new User(Integer.parseInt(uid)); // 获取薪资档案 List salaryArchiveList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(employeeId).deleteType(NumberUtils.INTEGER_ZERO).build()); if(CollectionUtils.isEmpty(salaryArchiveList)){ From 36fc2abffcf0e2c292f7e6874cef75f95b7e5708 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 15 Jun 2023 15:23:54 +0800 Subject: [PATCH 176/245] =?UTF-8?q?=E5=81=9C=E8=96=AAaction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/action/StopSalaryAction.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/action/StopSalaryAction.java b/src/com/engine/salary/action/StopSalaryAction.java index 77e6c1d2b..7eafe84bb 100644 --- a/src/com/engine/salary/action/StopSalaryAction.java +++ b/src/com/engine/salary/action/StopSalaryAction.java @@ -126,7 +126,10 @@ public class StopSalaryAction implements Action { // 停薪 getSalaryArchiveService(user).gotoStop(Collections.singletonList(updatePO.getId())); }else{ - // 待定薪员工 + // 待定薪员工,保存最后发薪日期 + updatePO.setPayEndDate(SalaryDateUtil.stringToDate(importDataMap.get("最后发薪日期").toString())); + updatePO.setUpdateTime(new Date()); + getSalaryArchiveMapper().update(updatePO); getSalaryArchiveService(user).deletePendingTodo(Collections.singletonList(updatePO.getId())); } } catch (Exception e) { From ee14b0435b2f154f69a8a4f3017639d6686cfb7a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 15 Jun 2023 16:18:24 +0800 Subject: [PATCH 177/245] =?UTF-8?q?=E4=B8=80=E9=94=AE=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../timer/AutoAddAllSpecialAddDeductionJob.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java b/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java index 4de300e71..f08fe4b3a 100644 --- a/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java +++ b/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java @@ -4,10 +4,13 @@ import cn.hutool.core.date.DateUtil; import com.engine.common.util.ServiceUtil; import com.engine.salary.service.AddUpDeductionService; import com.engine.salary.service.impl.AddUpDeductionServiceImpl; +import com.engine.salary.util.SalaryDateUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; import weaver.interfaces.schedule.BaseCronJob; +import java.time.LocalDate; import java.util.Date; @Slf4j @@ -17,9 +20,14 @@ public class AutoAddAllSpecialAddDeductionJob extends BaseCronJob { return ServiceUtil.getService(AddUpDeductionServiceImpl.class, user); } + private String salaryTaxMonth; + @Override public void execute() { - Date date = new Date(); - getAddUpDeductionService(null).autoAddAll(DateUtil.beginOfMonth(date), Boolean.TRUE); + LocalDate localDate = SalaryDateUtil.dateToLocalDate(new Date()); + if(StringUtils.isNotBlank(salaryTaxMonth)){ + localDate = localDate.plusMonths(Integer.valueOf(salaryTaxMonth.trim())); + } + getAddUpDeductionService(null).autoAddAll(DateUtil.beginOfMonth(SalaryDateUtil.localDateToDate(localDate)), Boolean.TRUE); } } From 5926697c295890559b88987166cab9b6ef423056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 15 Jun 2023 17:34:52 +0800 Subject: [PATCH 178/245] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/cache/SalaryCacheKey.java | 9 +++ .../SalaryStatisticsReportDataQueryParam.java | 6 +- .../SalaryStatisticsReportService.java | 6 ++ .../SalaryStatisticsReportServiceImpl.java | 23 ++++++++ .../SalaryStatisticsReportWrapper.java | 56 +++++++++++++++---- 5 files changed, 86 insertions(+), 14 deletions(-) diff --git a/src/com/engine/salary/cache/SalaryCacheKey.java b/src/com/engine/salary/cache/SalaryCacheKey.java index 76d19ea7d..c5acbdfba 100644 --- a/src/com/engine/salary/cache/SalaryCacheKey.java +++ b/src/com/engine/salary/cache/SalaryCacheKey.java @@ -55,5 +55,14 @@ public class SalaryCacheKey { */ public final static String CUSTOM_DATA = "CUSTOM_DATA"; + /** + * 报表主键 + */ + public final static String SALARY_REPORT_IDS = "SALARY_REPORT_IDS"; + + public final static String SALARY_REPORT_CONDITIONS = "SALARY_REPORT_CONDITIONS_"; + + public final static String SALARY_REPORT_DATA = "SALARY_REPORT_DATA_"; + } diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index 3874c0cac..e5882d3df 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -2,10 +2,7 @@ package com.engine.salary.report.entity.param; import com.engine.salary.common.BaseQueryParam; import com.fasterxml.jackson.annotation.JsonIgnore; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; import java.util.Date; import java.util.List; @@ -22,6 +19,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor +@ToString //"薪酬统计报表数据查询参数 public class SalaryStatisticsReportDataQueryParam extends BaseQueryParam { //报表id diff --git a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java index 842317cf7..2d0e144a2 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java @@ -91,4 +91,10 @@ public interface SalaryStatisticsReportService { * @return */ PageInfo> buildDataPerspectiveRecords(SalaryStatisticsDataPerspectiveQueryParam param, SalaryStatisticsReportPO reportPO, SalaryStatisticsDimensionPO dimension, List salaryStatisticsItemPOS); + + + /** + * 清除报表缓存 + */ + void removeReportCache(); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index ce8491b15..7cee8bc4b 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -3,6 +3,7 @@ package com.engine.salary.report.service.impl; import com.alibaba.fastjson.JSON; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -41,6 +42,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import weaver.general.Util; import weaver.hrm.User; +import weaver.wechat.util.Utils; import java.util.*; import java.util.stream.Collectors; @@ -95,6 +97,10 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); } + private SalaryCacheService getSalaryCacheService(User user) { + return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); + } + // private ExtEmployeeService extEmployeeService; // // private HrmCommonEmployeeService hrmCommonEmployeeService; @@ -431,6 +437,23 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return pageInfo; } + @Override + public void removeReportCache() { + //获取所有缓存报表的id + String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); + Arrays.asList(salaryReportIds.split(",")).forEach(id -> { + //报表下条件id + String salaryReportConditions = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id); + Arrays.asList(salaryReportConditions.split(",")).forEach(paramMd5 -> + //条件对应的结果 + getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5) + ); + getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id); + }); + getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_IDS); + } + + /** * 获取根据维度值过滤出的本次核算人员信息 * @param listByDimensionValue 根据维度筛选后的薪资核算人员 diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 32d0e7914..ce1d797ec 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -1,11 +1,13 @@ package com.engine.salary.report.wrapper; +import cn.hutool.crypto.SecureUtil; import com.alibaba.fastjson.JSONArray; import com.cloudstore.eccom.pc.table.WeaTable; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.component.WeaFormOption; import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -26,9 +28,11 @@ import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl; import com.engine.salary.report.service.impl.SubTableExportServiceImpl; 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.util.*; import com.engine.salary.util.excel.ExcelUtilPlus; @@ -41,10 +45,12 @@ import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.general.PageIdConst; import weaver.hrm.User; +import weaver.wechat.util.Utils; import java.util.*; import java.util.stream.Collectors; + /** * 薪酬统计维度 *

Copyright: Copyright (c) 2022

@@ -78,11 +84,15 @@ public class SalaryStatisticsReportWrapper extends Service { } private SalaryAcctResultService getSalaryAcctResultService(User user) { - return (SalaryAcctResultService) ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } private SalaryItemService getSalaryItemService(User user) { - return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user); + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + private SalaryCacheService getSalaryCacheService(User user) { + return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); } /** @@ -136,11 +146,11 @@ public class SalaryStatisticsReportWrapper extends Service { List salaryStatisticsReports = getSalaryStatisticsReportService(user).listAll(); salaryStatisticsReports.stream().forEach(report -> Collections.addAll(haveUsedDimIds, report.getDimension().split(","))); statsDimOptions.stream().forEach(option -> { - if (defaultDimensionIds.contains(Long.valueOf(option.getId()))){ + if (defaultDimensionIds.contains(Long.valueOf(option.getId()))) { // 默认维度不允许修改、删除 option.setCanDelete(false); option.setCanEdit(false); - }else if(haveUsedDimIds.contains(option.getId())){ + } else if (haveUsedDimIds.contains(option.getId())) { // 被薪资统计报表引用的不能删除 option.setCanEdit(true); option.setCanDelete(false); @@ -234,8 +244,8 @@ public class SalaryStatisticsReportWrapper extends Service { * @return */ public Map getData(SalaryStatisticsReportDataQueryParam param) { - - if (param.getId() == null || param.getDimensionId() == null) { + Long id = param.getId(); + if (id == null || param.getDimensionId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId()); @@ -245,10 +255,26 @@ public class SalaryStatisticsReportWrapper extends Service { // weaTable对象 Map weaTable = new HashMap<>(); // 查询报表配置 - SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); + SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(id); if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } + + + String paramMd5 = SecureUtil.md5(param.toString()); + + //已缓存的报表id + String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); + String salaryReportConditions = ""; + if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { + //报表中缓存的条件 + salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); + if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { + return getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5); + } + } + + // 查询自定义统计项目 List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); // 列表data @@ -265,10 +291,19 @@ public class SalaryStatisticsReportWrapper extends Service { resultMap.put("columns", weaTableColumns); resultMap.put("pageInfo", page); resultMap.put("countResult", countResultMap); - resultMap.put("reportId", param.getId()); + resultMap.put("reportId", id); + + + getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_IDS, salaryReportIds + "," + id); + getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id, salaryReportConditions + "," + paramMd5); + getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5, resultMap); + + return resultMap; } + + /** * 导出报表数据 * @@ -344,6 +379,7 @@ public class SalaryStatisticsReportWrapper extends Service { /** * 获取报表透视数据 + * * @param param * @return */ @@ -371,9 +407,9 @@ public class SalaryStatisticsReportWrapper extends Service { List weaTableColumns = buildDataPerspectiveTableColumns(itemList); WeaTable table = new WeaTable(); - String pageId="a4f85an7-9576-4125-adn9-7d06e7sy69f2"; + String pageId = "a4f85an7-9576-4125-adn9-7d06e7sy69f2"; table.setPageID(pageId); - table.setPageUID(pageId+user.getUID()); + table.setPageUID(pageId + user.getUID()); table.setPagesize(PageIdConst.getPageSize(pageId, user.getUID())); table.setBackfields(""); From 5e6a65e47e7808038485158c72eaa5afe562b749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 15 Jun 2023 18:48:31 +0800 Subject: [PATCH 179/245] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E7=BC=93=E5=AD=98=EF=BC=8C=E6=9A=82=E5=AD=98=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/dto/SalaryReportCacheInfo.java | 34 ++++ .../SalaryStatisticsReportService.java | 5 +- .../SalaryStatisticsReportServiceImpl.java | 186 +++++++++--------- .../SalaryStatisticsReportWrapper.java | 12 +- .../impl/SalaryAcctResultServiceImpl.java | 24 +++ 5 files changed, 166 insertions(+), 95 deletions(-) create mode 100644 src/com/engine/salary/report/entity/dto/SalaryReportCacheInfo.java diff --git a/src/com/engine/salary/report/entity/dto/SalaryReportCacheInfo.java b/src/com/engine/salary/report/entity/dto/SalaryReportCacheInfo.java new file mode 100644 index 000000000..855a73542 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryReportCacheInfo.java @@ -0,0 +1,34 @@ +package com.engine.salary.report.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * 分析图数据展示范围设置 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//"报表查询入参") +public class SalaryReportCacheInfo { + + List reports; + + class Report { + String key; + List conditions; + } + + + class Condition { + String key; + Map result; + } + +} diff --git a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java index 2d0e144a2..e15572e0d 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java @@ -75,11 +75,10 @@ public interface SalaryStatisticsReportService { * * @param dimension * @param param - * @param salaryStatisticsReport * @param salaryStatisticsItemList * @return */ - PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO salaryStatisticsReport, List salaryStatisticsItemList); + PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, List salaryStatisticsItemList); /** * 构建数据透视记录 @@ -97,4 +96,6 @@ public interface SalaryStatisticsReportService { * 清除报表缓存 */ void removeReportCache(); + + } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 7cee8bc4b..c9a2711e9 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -181,18 +181,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98080, "名称不允许重复")); } Long id = IdGenerator.generate(); - SalaryStatisticsReportPO poNew = SalaryStatisticsReportPO.builder() - .id(id) - .reportName(saveParam.getReportName()) - .dimension(StringUtils.join(saveParam.getDimensionIds(), ",")) - .createTime(now) - .creator((long) user.getUID()) - .updateTime(now) - .deleteType(0) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .salaryStartMonth(SalaryDateUtil.getFirstDayDateOfYear(new Date())) - .salaryEndMonth(SalaryDateUtil.getLastDayOfYear(new Date())) - .build(); + SalaryStatisticsReportPO poNew = SalaryStatisticsReportPO.builder().id(id).reportName(saveParam.getReportName()).dimension(StringUtils.join(saveParam.getDimensionIds(), ",")).createTime(now).creator((long) user.getUID()).updateTime(now).deleteType(0).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).salaryStartMonth(SalaryDateUtil.getFirstDayDateOfYear(new Date())).salaryEndMonth(SalaryDateUtil.getLastDayOfYear(new Date())).build(); getSalaryStatisticsReportMapper().insertIgnoreNull(poNew); // 记录日志 @@ -213,14 +202,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary if (Objects.isNull(param.getSalaryStartMonth()) || Objects.isNull(param.getSalaryEndMonth())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100294, "薪资所属月必传")); } - if ((CollectionUtils.isNotEmpty(param.getTaxAgent()) && param.getTaxAgent().size() > 10) - || (CollectionUtils.isNotEmpty(param.getIncomeCategory()) && param.getIncomeCategory().size() > 10) - || (CollectionUtils.isNotEmpty(param.getSubCompany()) && param.getSubCompany().size() > 10) - || (CollectionUtils.isNotEmpty(param.getGrade()) && param.getGrade().size() > 10) - || (CollectionUtils.isNotEmpty(param.getPosition()) && param.getPosition().size() > 10) - || (CollectionUtils.isNotEmpty(param.getStatus()) && param.getStatus().size() > 10) - || (CollectionUtils.isNotEmpty(param.getEmployee()) && param.getEmployee().size() > 10) - ) { + if ((CollectionUtils.isNotEmpty(param.getTaxAgent()) && param.getTaxAgent().size() > 10) || (CollectionUtils.isNotEmpty(param.getIncomeCategory()) && param.getIncomeCategory().size() > 10) || (CollectionUtils.isNotEmpty(param.getSubCompany()) && param.getSubCompany().size() > 10) || (CollectionUtils.isNotEmpty(param.getGrade()) && param.getGrade().size() > 10) || (CollectionUtils.isNotEmpty(param.getPosition()) && param.getPosition().size() > 10) || (CollectionUtils.isNotEmpty(param.getStatus()) && param.getStatus().size() > 10) || (CollectionUtils.isNotEmpty(param.getEmployee()) && param.getEmployee().size() > 10)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182014, "统计数据范围条件数量过多")); } @@ -318,8 +300,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String resultType = "success"; // 单个设为定薪提示 if (total > 1) { - resultMsg = SalaryI18nUtil.getI18nLabel(134807, "成功条数") + ": " + (success) + "; " - + SalaryI18nUtil.getI18nLabel(134808, "失败条数") + ": " + (total - success); + resultMsg = SalaryI18nUtil.getI18nLabel(134807, "成功条数") + ": " + (success) + "; " + SalaryI18nUtil.getI18nLabel(134808, "失败条数") + ": " + (total - success); if ((total - success) > 0) { resultType = "info"; } @@ -332,14 +313,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } @Override - public PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, SalaryStatisticsReportPO po, List salaryStatisticsItemList) { + public PageInfo> buildReportRecords(SalaryStatisticsDimensionPO dimension, SalaryStatisticsReportDataQueryParam param, List salaryStatisticsItemList) { Map checkMap = SalaryStatisticsReportBO.checkLoad(salaryStatisticsItemList); // 如果一个都没有,直接返回 if (!checkMap.get("isNow")) { return new PageInfo>(); } - // 参数转换 - SalaryStatisticsReportBO.poToQueryParam(param, po); + // 获取本期报表分权后的核算人员 List list = getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(param); @@ -350,14 +330,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // 获取去年同期报表分权后的核算人员 List sameList = checkMap.get("isSame") ? getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(sameParam) : Lists.newArrayList(); - SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder() - .list(list) - .lastList(lastList) - .sameList(sameList) - .salaryStatisticsItemList(salaryStatisticsItemList) - .employeeId((long) user.getUID()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); + SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder().list(list).lastList(lastList).sameList(sameList).salaryStatisticsItemList(salaryStatisticsItemList).employeeId((long) user.getUID()).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).build(); List allList = Lists.newArrayList(); allList.addAll(list); @@ -380,8 +353,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary @Override public PageInfo> buildDataPerspectiveRecords(SalaryStatisticsDataPerspectiveQueryParam param, SalaryStatisticsReportPO reportPO, SalaryStatisticsDimensionPO dimension, List salaryStatisticsItemPOS) { // 获取报表统计薪资项目 - List salaryItemIds = salaryStatisticsItemPOS.stream().filter(item -> StringUtils.isNotBlank(item.getItemValue())).map(p -> p.getItemValue().split(",")) - .flatMap(Arrays::stream).map(Long::valueOf).collect(Collectors.toList()); + List salaryItemIds = salaryStatisticsItemPOS.stream().filter(item -> StringUtils.isNotBlank(item.getItemValue())).map(p -> p.getItemValue().split(",")).flatMap(Arrays::stream).map(Long::valueOf).collect(Collectors.toList()); // 参数转换 param.setSalaryStartMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryStartMonth())); param.setSalaryEndMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryEndMonth())); @@ -392,25 +364,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary param.setEmployee(((List) JSON.parseArray(reportPO.getEmployeeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); param.setHiredate(JSON.parseArray(reportPO.getHiredateSetting(), Date.class)); SalaryStatisticsReportDataQueryParam queryParam = new SalaryStatisticsReportDataQueryParam(); - com.mzlion.core.utils.BeanUtils.copyProperties(param,queryParam); + com.mzlion.core.utils.BeanUtils.copyProperties(param, queryParam); // 获取本期报表分权后的核算人员 List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(queryParam); // 设置dimensionValue为维度值 - SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder() - .list(salaryAcctEmployeeList) - .lastList(Collections.emptyList()) - .sameList(Collections.emptyList()) - .salaryStatisticsItemList(salaryStatisticsItemPOS) - .employeeId((long) user.getUID()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .dimensionValue(param.getDimensionValue()) - .build(); + SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder().list(salaryAcctEmployeeList).lastList(Collections.emptyList()).sameList(Collections.emptyList()).salaryStatisticsItemList(salaryStatisticsItemPOS).employeeId((long) user.getUID()).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).dimensionValue(param.getDimensionValue()).build(); // 获取根据维度值过滤出的本次核算人员信息 calculateReportRecordsByDimension(dimension, SalaryStatisticsReportDataQueryParam.builder().build(), salaryStatisticsReportData, Collections.EMPTY_MAP); List listByDimensionValue = salaryStatisticsReportData.getListByDimensionValue(); - if(CollectionUtils.isEmpty(listByDimensionValue)){ + if (CollectionUtils.isEmpty(listByDimensionValue)) { throw new SalaryRunTimeException("该维度值中无数据!"); } // 同一个人放在一起 @@ -441,23 +405,65 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary public void removeReportCache() { //获取所有缓存报表的id String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); - Arrays.asList(salaryReportIds.split(",")).forEach(id -> { - //报表下条件id - String salaryReportConditions = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id); - Arrays.asList(salaryReportConditions.split(",")).forEach(paramMd5 -> - //条件对应的结果 - getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5) - ); - getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id); - }); - getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_IDS); + if (StringUtils.isNotBlank(salaryReportIds)) { + Arrays.asList(salaryReportIds.split(",")).forEach(id -> { + if (StringUtils.isNotBlank(id)) { + //报表下条件id + String salaryReportConditions = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id); + if (StringUtils.isNotBlank(salaryReportConditions)) { + Arrays.asList(salaryReportConditions.split(",")).forEach(paramMd5 -> { + if (StringUtils.isNotBlank(paramMd5)) { + //条件对应的结果 + getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5); + } + } + ); + getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id); + } + } + }); + getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_IDS); + } + + } + + public List getReportCache() { + List report = new ArrayList<>(); + + //获取所有缓存报表的id + String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); + if (StringUtils.isNotBlank(salaryReportIds)) { + Arrays.asList(salaryReportIds.split(",")).forEach(id -> { + if (StringUtils.isNotBlank(id)) { + //报表下条件id + String salaryReportConditions = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id); + List c= new ArrayList<>(); + if (StringUtils.isNotBlank(salaryReportConditions)) { + Arrays.asList(salaryReportConditions.split(",")).forEach(paramMd5 -> { + if (StringUtils.isNotBlank(paramMd5)) { + Map data = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5); + Map kv= new HashMap<>(); + kv.put(paramMd5,data); + c.add(kv); + } + } + ); + report.add(c); + } + } + }); + } + + return report; + } /** * 获取根据维度值过滤出的本次核算人员信息 + * * @param listByDimensionValue 根据维度筛选后的薪资核算人员 - * @param map 薪资核算结果 + * @param map 薪资核算结果 */ private List> buildResultRecords(List listByDimensionValue, Map> map) { // 获取人员信息 @@ -488,7 +494,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary resultMap.put("departmentName", emp == null ? "" : emp.getDepartmentName()); resultMap.put("salaryMonth", SalaryDateUtil.getFormatYearMonth(se.getSalaryMonth())); resultMap.put("taxAgent", taxAgentMap.get(se.getTaxAgentId())); - resultMap.put("salarySob",SalarySobMap.get(se.getSalarySobId())); + resultMap.put("salarySob", SalarySobMap.get(se.getSalarySobId())); resultMap.put("acctTimes", salaryAcctRecordMap.get(se.getSalaryAcctRecordId())); resultList.add(resultMap); } @@ -571,12 +577,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList()); String dimensionValue = data.getDimensionValue(); salaryMonthList.forEach(k -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { Map temp = new HashMap<>(); temp.put(DM, SalaryDateUtil.getFormatYearMonth(k)); temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if( StringUtils.equals(dimensionValue,SalaryDateUtil.getFormatYearMonth(k)) ){ + } else if (StringUtils.equals(dimensionValue, SalaryDateUtil.getFormatYearMonth(k))) { data.setListByDimensionValue(listMap.get(k)); } }); @@ -596,12 +602,12 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); String dimensionValue = data.getDimensionValue(); listMap.forEach((k, v) -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { Map temp = new HashMap<>(); temp.put(DM, taxAgentMap.get(k)); temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastListMap.get(k), sameListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if(StringUtils.equals(dimensionValue, taxAgentMap.get(k))){ + } else if (StringUtils.equals(dimensionValue, taxAgentMap.get(k))) { data.setListByDimensionValue(v); } }); @@ -668,7 +674,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String dimensionValue = data.getDimensionValue(); subComIds.forEach(subComId -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); @@ -676,13 +682,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary temp.put(DM, subComIdNameMap.get(subComId)); temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if( StringUtils.equals(dimensionValue, subComIdNameMap.get(subComId)) ){ + } else if (StringUtils.equals(dimensionValue, subComIdNameMap.get(subComId))) { List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); data.setListByDimensionValue(subComEmployeePOS); } }); - if(dimensionValue == null){ + if (dimensionValue == null) { List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); @@ -692,7 +698,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(noGrouping); } - }else if( StringUtils.equals(dimensionValue, "无分组") ){ + } else if (StringUtils.equals(dimensionValue, "无分组")) { List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); data.setListByDimensionValue(noGroupingList); } @@ -737,7 +743,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String dimensionValue = data.getDimensionValue(); departIds.forEach(departId -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); @@ -745,13 +751,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary temp.put(DM, departIdNameMap.get(departId)); temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if( StringUtils.equals(dimensionValue, departIdNameMap.get(departId)) ){ + } else if (StringUtils.equals(dimensionValue, departIdNameMap.get(departId))) { List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); data.setListByDimensionValue(departEmployeePOS); } }); - if(dimensionValue == null ){ + if (dimensionValue == null) { List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); @@ -761,7 +767,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(noGrouping); } - }else if( StringUtils.equals(dimensionValue, "无分组") ){ + } else if (StringUtils.equals(dimensionValue, "无分组")) { List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); data.setListByDimensionValue(noGroupingList); } @@ -979,13 +985,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String dimensionValue = data.getDimensionValue(); employeeListMap.forEach((k, v) -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { Map temp = new HashMap<>(); // temp.put(DM, Objects.nonNull(employeeByIdMap.get(k)) ? employeeByIdMap.get(k) : employeeExtByIdMap.get(k)); temp.put(DM, employeeByIdMap.get(k)); temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if( StringUtils.equals(dimensionValue, employeeByIdMap.get(k)) ){ + } else if (StringUtils.equals(dimensionValue, employeeByIdMap.get(k))) { data.setListByDimensionValue(v); } }); @@ -1006,7 +1012,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String dimensionValue = data.getDimensionValue(); quarters.forEach(k -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 3)))).collect(Collectors.toList()); List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 12)))).collect(Collectors.toList()); @@ -1014,7 +1020,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary temp.put(DM, k); temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if(StringUtils.equals(dimensionValue, k)){ + } else if (StringUtils.equals(dimensionValue, k)) { List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getQuarter(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); data.setListByDimensionValue(listYear); } @@ -1035,7 +1041,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String dimensionValue = data.getDimensionValue(); halfYears.forEach(k -> { - if(dimensionValue == null){ + if (dimensionValue == null) { List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); List lastListHalfYear = data.getLastList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 6)))).collect(Collectors.toList()); List sameListHalfYear = data.getSameList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(ReportTimeUtil.getPlusYearMonth(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth()), 12)))).collect(Collectors.toList()); @@ -1043,7 +1049,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary temp.put(DM, k); temp.putAll(SalaryStatisticsReportBO.calculateItem(listHalfYear, lastListHalfYear, sameListHalfYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if(StringUtils.equals(dimensionValue, k)){ + } else if (StringUtils.equals(dimensionValue, k)) { List listHalfYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getHalfYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); data.setListByDimensionValue(listHalfYear); } @@ -1064,7 +1070,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String dimensionValue = data.getDimensionValue(); years.forEach(k -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); List lastListYear = data.getLastList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); List sameListYear = data.getSameList().stream().filter(sa -> Objects.equals(ReportTimeUtil.getLastYear(k), ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); @@ -1072,7 +1078,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary temp.put(DM, k); temp.putAll(SalaryStatisticsReportBO.calculateItem(listYear, lastListYear, sameListYear, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if( StringUtils.equals(dimensionValue, k) ){ + } else if (StringUtils.equals(dimensionValue, k)) { List listYear = data.getList().stream().filter(sa -> Objects.equals(k, ReportTimeUtil.getYear(SalaryDateUtil.getFormatYearMonth(sa.getSalaryMonth())))).collect(Collectors.toList()); data.setListByDimensionValue(listYear); } @@ -1720,7 +1726,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String dimensionValue = data.getDimensionValue(); workYears.forEach(k -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); @@ -1728,13 +1734,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary temp.put(DM, k); temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if( Double.compare(Double.valueOf(dimensionValue), k) == 0 ){ + } else if (Double.compare(Double.valueOf(dimensionValue), k) == 0) { List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdWorkYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); data.setListByDimensionValue(salaryAcctEmployees); } }); - if(dimensionValue == null ){ + if (dimensionValue == null) { List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); @@ -1744,7 +1750,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(noGrouping); } - }else if( StringUtils.equals(dimensionValue, "无分组") ){ + } else if (StringUtils.equals(dimensionValue, "无分组")) { List noGroupingList = data.getList().stream().filter(po -> empIdWorkYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); data.setListByDimensionValue(noGroupingList); } @@ -1788,7 +1794,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String dimensionValue = data.getDimensionValue(); companyYears.forEach(k -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); List lastSalaryAcctEmployees = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); List sameSalaryAcctEmployees = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); @@ -1796,13 +1802,13 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary temp.put(DM, k); temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if( StringUtils.equals(dimensionValue, k) ){ + } else if (StringUtils.equals(dimensionValue, k)) { List salaryAcctEmployees = data.getList().stream().filter(po -> Objects.equals(empIdCompanyYearMap.get(po.getEmployeeId()), k)).collect(Collectors.toList()); data.setListByDimensionValue(salaryAcctEmployees); } }); - if(dimensionValue == null ){ + if (dimensionValue == null) { List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); @@ -1812,7 +1818,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary noGrouping.putAll(SalaryStatisticsReportBO.calculateItem(noGroupingList, lastNoGroupingList, sameNoGroupingList, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(noGrouping); } - }else if( StringUtils.equals(dimensionValue, "无分组")){ + } else if (StringUtils.equals(dimensionValue, "无分组")) { List noGroupingList = data.getList().stream().filter(po -> empIdCompanyYearMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); data.setListByDimensionValue(noGroupingList); } @@ -1856,7 +1862,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } String dimensionValue = data.getDimensionValue(); groups.forEach(k -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); @@ -1864,7 +1870,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary temp.put(DM, k.getStartValue() + "-" + k.getEndValue()); temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if( StringUtils.equals(dimensionValue, k.getStartValue() + "-" + k.getEndValue()) ){ + } else if (StringUtils.equals(dimensionValue, k.getStartValue() + "-" + k.getEndValue())) { List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupSpacing(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); data.setListByDimensionValue(salaryAcctEmployees); } @@ -1937,7 +1943,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary String dimensionValue = data.getDimensionValue(); groups.forEach(k -> { - if(dimensionValue == null ){ + if (dimensionValue == null) { List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); List sameSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getSameList(), sameEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); @@ -1945,7 +1951,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary temp.put(DM, k.getValue()); temp.putAll(SalaryStatisticsReportBO.calculateItem(salaryAcctEmployees, lastSalaryAcctEmployees, sameSalaryAcctEmployees, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); - }else if( StringUtils.equals(dimensionValue, k.getValue()) ){ + } else if (StringUtils.equals(dimensionValue, k.getValue())) { List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, groupBelong, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); data.setListByDimensionValue(salaryAcctEmployees); } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index ce1d797ec..8b2f1b08b 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -260,6 +260,9 @@ public class SalaryStatisticsReportWrapper extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } + // 参数转换 + SalaryStatisticsReportBO.poToQueryParam(param, po); + String paramMd5 = SecureUtil.md5(param.toString()); @@ -278,7 +281,7 @@ public class SalaryStatisticsReportWrapper extends Service { // 查询自定义统计项目 List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); // 列表data - PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList); + PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, salaryStatisticsItemList); // 组装合计 Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); @@ -303,7 +306,6 @@ public class SalaryStatisticsReportWrapper extends Service { } - /** * 导出报表数据 * @@ -323,10 +325,14 @@ public class SalaryStatisticsReportWrapper extends Service { if (dimension == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } + + // 参数转换 + SalaryStatisticsReportBO.poToQueryParam(param, po); + // 查询自定义统计项目 List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); // 列表data - PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList); + PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, salaryStatisticsItemList); // 组装合计 Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); List> list = page.getList(); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 2c04d6137..b23942d95 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -29,6 +29,8 @@ import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctResultMapper; +import com.engine.salary.report.service.SalaryStatisticsReportService; +import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl; import com.engine.salary.service.*; import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.sys.entity.po.SalarySysConfPO; @@ -167,6 +169,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } + private SalaryStatisticsReportService getSalaryStatisticsReportService(User user) { + return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; @@ -584,6 +590,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); } + //删除报表缓存 + getSalaryStatisticsReportService(user).removeReportCache(); + // 存储薪资核算结果数据来源日志 salaryAcctResultPOS = getSalaryAcctRecordService(user).listBySalaryAcctEmpId(saveParam.getSalaryAcctEmpId()); saveSalaryAcctResultLog(salaryAcctResultPOSOld,salaryAcctResultPOS); @@ -638,6 +647,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe encryptUtil.encryptList(list, SalaryAcctResultPO.class); List> partition = Lists.partition(list, 100); partition.forEach(getSalaryAcctResultMapper()::batchInsert); + + //删除报表缓存 + getSalaryStatisticsReportService(user).removeReportCache(); } } @@ -645,17 +657,26 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public void deleteBySalaryAcctEmployeeIds(Collection salaryAcctEmployeeIds) { getSalaryAcctResultMapper().deleteBySalaryAcctEmpIds(salaryAcctEmployeeIds); + + //删除报表缓存 + getSalaryStatisticsReportService(user).removeReportCache(); } @Override public void deleteByAcctEmployeeIdsAndSalaryItemIds(Collection salaryAcctEmployeeIds, Collection salaryItemIds) { getSalaryAcctResultMapper().deleteByAcctEmpIdsAndSalaryItemIds(salaryAcctEmployeeIds, salaryItemIds); + + //删除报表缓存 + getSalaryStatisticsReportService(user).removeReportCache(); } @Override public void deleteBySalaryAcctRecordIds(Collection salaryAcctRecordIds) { getSalaryAcctResultMapper().deleteBySalaryAcctRecordIds(salaryAcctRecordIds); + + //删除报表缓存 + getSalaryStatisticsReportService(user).removeReportCache(); } @Override @@ -976,6 +997,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe for (List subSalaryAcctResultValues : partition) { getSalaryAcctResultMapper().batchUpdateOriginResultValue(subSalaryAcctResultValues); } + + //删除报表缓存 + getSalaryStatisticsReportService(user).removeReportCache(); } private Set canLockSalaryItemIds(Long salarySobId) { From f4b3a742f00c3172c60dc0b07fee0e605dcf97b9 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 16 Jun 2023 09:58:54 +0800 Subject: [PATCH 180/245] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E6=B0=B4=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryBillBaseSetServiceImpl.java | 1 + .../engine/salary/service/impl/SalaryBillServiceImpl.java | 3 ++- .../engine/salary/service/impl/SalarySendServiceImpl.java | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index 12bbbae2f..28d96c728 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -73,6 +73,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB wmSetting = JsonUtil.toJsonString(saveParam.getWmSetting()); }else{ // 系统默认水印 给一个默认的json + wmSetting = "{\"wmWidth\":100,\"wmRotate\":30,\"wmSelectedFieldIds\":[\"HRM_Name\"],\"pureWmText\":\" 当前操作者姓名 \",\"wmText\":\"

 $HRM_Name 

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

 当前操作者姓名 

\",\"wmNoTransparent\":15}"; } watermark = saveParam.getWatermark().getValue(); } else { diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index a7c6c21db..8700fb87f 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -621,8 +621,9 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * @param salaryTemplate */ private void grantSendInfo(List ids, SalarySendPO salarySend, SalaryTemplatePO salaryTemplate, SalaryBillSendDTO salaryBillSendDTO) { + String waterMarkJson = salaryBillSendDTO.getWatermarkSetting() == null ? "" : JsonUtil.toJsonString(salaryBillSendDTO.getWatermarkSetting()); // 水印设置 - salaryTemplate.setSalaryWatermark(JsonUtil.toJsonString(salaryBillSendDTO.getWatermarkSetting())); + salaryTemplate.setSalaryWatermark(waterMarkJson); List> partition = Lists.partition(ids, 500); Date sendTime = new Date(); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 4cb22ee32..19281ed19 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -574,7 +574,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService salaryTemplate.setTheme(getBillTitle(salaryTemplate.getTheme(), salaryMonth, currentEmployeeId)); // 工资单水印文本型动态变量 == 处理 - handleSalaryWatermark(salaryTemplate, salarySendInfo); + handleSalaryWatermark(salaryTemplate, salarySendInfo, currentEmployeeId); map.put("salaryTemplate", salaryTemplate); map.put("salaryAcctResult", salaryAcctResultS); @@ -588,7 +588,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService * @param salaryTemplate * @param salarySendInfo */ - private void handleSalaryWatermark(SalaryTemplatePO salaryTemplate, SalarySendInfoPO salarySendInfo) { + private void handleSalaryWatermark(SalaryTemplatePO salaryTemplate, SalarySendInfoPO salarySendInfo, Long currentEmployeeId) { SalaryBillWatermarkDTO salaryBillWatermark = JsonUtil.parseObject(salaryTemplate.getSalaryWatermark(), SalaryBillWatermarkDTO.class); if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() ) { return; @@ -602,7 +602,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService boolean needQueryEmp = (boolean) salaryBillWatermark.getWmSetting().getOrDefault("needQueryEmp", false); DataCollectionEmployee simpleEmployee = null; if (needQueryEmp) { - simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salarySendInfo.getEmployeeId()); + simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(currentEmployeeId); } String wmText = salaryBillWatermark.getWmSetting().getOrDefault("wmText", StringUtils.EMPTY).toString(); From 1805726387c3b1d628eed7eaffbc8dd4ae7a247d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 16 Jun 2023 10:14:28 +0800 Subject: [PATCH 181/245] =?UTF-8?q?=E9=99=90=E5=88=B6=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=89=93=E5=BC=80=E4=BB=96=E4=BA=BA=E5=B7=A5=E8=B5=84=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SalarySendServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 19281ed19..5cabd4d8a 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -453,6 +453,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService if (CollectionUtils.isEmpty(salarySendInfos)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "工资单信息不存在")); } + if(currentEmployeeId.compareTo(salarySendInfos.get(0).getEmployeeId()) != 0){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "当前账号无法查看此工资单")); + } SalarySendInfoPO salarySendInfo = salarySendInfos.get(0); // List salarySends = new LambdaQueryChainWrapper<>(mapper) // .eq(SalarySendPO::getDeleteType, 0) From 512510c623f43fe4f70ba25a8395d1fc30f99f02 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 16 Jun 2023 11:49:23 +0800 Subject: [PATCH 182/245] =?UTF-8?q?=E8=80=83=E5=8B=A4=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E8=83=BD=E5=A4=9F=E5=90=A6=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datacollection/dto/AttendQuoteListDTO.java | 10 ++++++++++ .../mapper/datacollection/AttendQuoteMapper.xml | 2 +- .../salary/service/SalaryAcctRecordService.java | 2 +- .../service/impl/AttendQuoteServiceImpl.java | 15 +++++++++++++++ .../service/impl/SalaryAcctRecordServiceImpl.java | 5 +++++ 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/dto/AttendQuoteListDTO.java b/src/com/engine/salary/entity/datacollection/dto/AttendQuoteListDTO.java index a90d70267..f058c3d91 100644 --- a/src/com/engine/salary/entity/datacollection/dto/AttendQuoteListDTO.java +++ b/src/com/engine/salary/entity/datacollection/dto/AttendQuoteListDTO.java @@ -69,4 +69,14 @@ public class AttendQuoteListDTO { * 薪资核算状态。0:未核算、1:已核算 */ private Integer salaryAccountingStatus; + + /** + * 能否删除 + */ + private Boolean canDelete; + + /** + * 薪资账套id + */ + private Long salarySobId; } diff --git a/src/com/engine/salary/mapper/datacollection/AttendQuoteMapper.xml b/src/com/engine/salary/mapper/datacollection/AttendQuoteMapper.xml index 2398a8325..68424e89e 100644 --- a/src/com/engine/salary/mapper/datacollection/AttendQuoteMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/AttendQuoteMapper.xml @@ -245,7 +245,7 @@ id , t1.salary_year_month, - t1.salary_sob_id, + t1.salary_sob_id AS salarySobId, t2.name AS salary_sob_name, t1.source_type, t1.attend_cycle, diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index 5e1f16cbf..1ba3419bf 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -206,5 +206,5 @@ public interface SalaryAcctRecordService { List listBySalaryAcctEmpId(Long salaryAcctEmpId); - + List listSome(SalaryAcctRecordPO po); } diff --git a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java index 177cca276..e9919b070 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java @@ -5,6 +5,7 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.AttendQuoteBiz; import com.engine.salary.biz.AttendQuoteDataBiz; import com.engine.salary.biz.AttendQuoteDataValueBiz; +import com.engine.salary.common.LocalDateRange; import com.engine.salary.entity.datacollection.dto.AttendQuoteListDTO; import com.engine.salary.entity.datacollection.param.AttendQuoteDataQueryParam; import com.engine.salary.entity.datacollection.param.AttendQuoteQueryParam; @@ -62,9 +63,13 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic public PageInfo listPage(AttendQuoteQueryParam queryParam) { List declareMonth = queryParam.getSalaryYearMonth(); + SalaryAcctRecordPO queryRecordParam = new SalaryAcctRecordPO(); if (CollectionUtils.isNotEmpty(declareMonth)) { queryParam.setSalaryYearMonth(declareMonth.stream().map(e -> e + "-01 00:00:00").collect(Collectors.toList())); queryParam.setSalaryYearMonthDate(declareMonth.stream().map(e -> e + "-01 00:00:00").map(SalaryDateUtil::dateStrToLocalTime).collect(Collectors.toList())); + LocalDateRange salaryMonth = LocalDateRange.builder().fromDate(SalaryDateUtil.dateStrToLocalDate(declareMonth.get(0)+"-01 00:00:00")) + .endDate(SalaryDateUtil.dateStrToLocalTime(declareMonth.get(1)+"-01 00:00:00")).build(); + queryRecordParam.setSalaryMonths(salaryMonth); } @@ -77,9 +82,19 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic return new PageInfo<>(AttendQuoteListDTO.class); } queryParam.setSalarySobIds(salarySobIds); + queryRecordParam.setSalarySobIds(salarySobIds); } + // 获取已经归档的记录 + List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listSome(queryRecordParam); + List archivedRecords = salaryAcctRecordPOS.stream().filter(PO -> PO.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()) + .map(PO -> SalaryDateUtil.getFormatYearMonth(PO.getSalaryMonth()) + PO.getSalarySobId()) + .collect(Collectors.toList()); + + List list = getAttendQuoteMapper().list(queryParam); + list.stream().forEach(DTO -> DTO.setCanDelete( !archivedRecords.contains( (SalaryDateUtil.getFormatYearMonth(DTO.getSalaryYearMonth()) + DTO.getSalarySobId().toString()) ) )); + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, AttendQuoteListDTO.class); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 434b74638..af5b48f39 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -789,4 +789,9 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe public List listBySalaryAcctEmpId(Long salaryAcctEmpId) { return getSalaryAcctResultService(user).listBySalaryAcctEmployeeId(salaryAcctEmpId); } + + @Override + public List listSome(SalaryAcctRecordPO po) { + return getSalaryAcctRecordMapper().listSome(po); + } } From ee7936a9bf07aeea1b277540818bb578665cc64e Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 16 Jun 2023 13:33:38 +0800 Subject: [PATCH 183/245] =?UTF-8?q?=E8=80=83=E5=8B=A4=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E8=83=BD=E5=A4=9F=E5=90=A6=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AttendQuoteServiceImpl.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java index e9919b070..7f4b96a60 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java @@ -5,7 +5,6 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.AttendQuoteBiz; import com.engine.salary.biz.AttendQuoteDataBiz; import com.engine.salary.biz.AttendQuoteDataValueBiz; -import com.engine.salary.common.LocalDateRange; import com.engine.salary.entity.datacollection.dto.AttendQuoteListDTO; import com.engine.salary.entity.datacollection.param.AttendQuoteDataQueryParam; import com.engine.salary.entity.datacollection.param.AttendQuoteQueryParam; @@ -30,10 +29,7 @@ import weaver.hrm.User; import java.time.LocalDate; import java.time.YearMonth; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -63,13 +59,13 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic public PageInfo listPage(AttendQuoteQueryParam queryParam) { List declareMonth = queryParam.getSalaryYearMonth(); - SalaryAcctRecordPO queryRecordParam = new SalaryAcctRecordPO(); +// SalaryAcctRecordPO queryRecordParam = new SalaryAcctRecordPO(); if (CollectionUtils.isNotEmpty(declareMonth)) { queryParam.setSalaryYearMonth(declareMonth.stream().map(e -> e + "-01 00:00:00").collect(Collectors.toList())); queryParam.setSalaryYearMonthDate(declareMonth.stream().map(e -> e + "-01 00:00:00").map(SalaryDateUtil::dateStrToLocalTime).collect(Collectors.toList())); - LocalDateRange salaryMonth = LocalDateRange.builder().fromDate(SalaryDateUtil.dateStrToLocalDate(declareMonth.get(0)+"-01 00:00:00")) - .endDate(SalaryDateUtil.dateStrToLocalTime(declareMonth.get(1)+"-01 00:00:00")).build(); - queryRecordParam.setSalaryMonths(salaryMonth); +// LocalDateRange salaryMonth = LocalDateRange.builder().fromDate(SalaryDateUtil.dateStrToLocalDate(declareMonth.get(0)+"-01 00:00:00")) +// .endDate(SalaryDateUtil.dateStrToLocalTime(declareMonth.get(1)+"-01 00:00:00")).build(); +// queryRecordParam.setSalaryMonths(salaryMonth); } @@ -82,18 +78,18 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic return new PageInfo<>(AttendQuoteListDTO.class); } queryParam.setSalarySobIds(salarySobIds); - queryRecordParam.setSalarySobIds(salarySobIds); +// queryRecordParam.setSalarySobIds(salarySobIds); } // 获取已经归档的记录 - List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listSome(queryRecordParam); - List archivedRecords = salaryAcctRecordPOS.stream().filter(PO -> PO.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()) - .map(PO -> SalaryDateUtil.getFormatYearMonth(PO.getSalaryMonth()) + PO.getSalarySobId()) - .collect(Collectors.toList()); +// List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listSome(queryRecordParam); +// List archivedRecords = salaryAcctRecordPOS.stream().filter(PO -> PO.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()) +// .map(PO -> SalaryDateUtil.getFormatYearMonth(PO.getSalaryMonth()) + PO.getSalarySobId()) +// .collect(Collectors.toList()); List list = getAttendQuoteMapper().list(queryParam); - list.stream().forEach(DTO -> DTO.setCanDelete( !archivedRecords.contains( (SalaryDateUtil.getFormatYearMonth(DTO.getSalaryYearMonth()) + DTO.getSalarySobId().toString()) ) )); +// list.stream().forEach(DTO -> DTO.setCanDelete( !archivedRecords.contains( (SalaryDateUtil.getFormatYearMonth(DTO.getSalaryYearMonth()) + DTO.getSalarySobId().toString()) ) )); return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, AttendQuoteListDTO.class); @@ -113,6 +109,13 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic if (CollectionUtils.isNotEmpty(accountingAttendQuotes)) { throw new SalaryRunTimeException("已经核算完成的数据不能删除"); } + + List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listSome(SalaryAcctRecordPO.builder().salarySobId(attendQuotes.get(0).getSalarySobId()) + .salaryMonth(attendQuotes.get(0).getSalaryYearMonth()).build()); + Optional haveArchived = salaryAcctRecordPOS.stream().filter(PO -> PO.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).findFirst(); + if(haveArchived.isPresent()){ + throw new SalaryRunTimeException("已经核算完成的数据不能删除"); + } List unAccountingIds = attendQuotes.stream().filter(e -> e.getSalaryAccountingStatus().equals(0)).map(AttendQuoteListDTO::getId).collect(Collectors.toList()); // 1.删除未核算的考勤引用 biz.deleteByIds(unAccountingIds); From ec67c89e7df35b1bc005cd40bf63c706e82477ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 16 Jun 2023 13:49:40 +0800 Subject: [PATCH 184/245] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=8E=92=E9=99=A4?= =?UTF-8?q?=E6=8E=89=E6=9C=AA=E5=BD=92=E6=A1=A3=E7=9A=84=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctEmployeeServiceImpl.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 79f5de0a6..37889bc2e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -583,7 +583,25 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct // lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getIncomeCategory, param.getIncomeCategory().stream().map(Object::toString).collect(Collectors.toList())); // } - List list = getSalaryAcctEmployeeMapper().listSome(lambdaQueryChainWrapper); + //排除未归档数据 + List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listAll(); + List salaryAcctRecordIds = salaryAcctRecordPOS.stream() + .filter(po -> !Objects.equals(po.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())) + .map(SalaryAcctRecordPO::getId) + .collect(Collectors.toList()); + + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(salaryAcctRecordIds)) { + //分片查询 + List> partition = Lists.partition(salaryAcctRecordIds, 500); + List empList = new ArrayList<>(); + partition.forEach(part -> { + lambdaQueryChainWrapper.setSalaryAcctRecordIds(salaryAcctRecordIds); + empList.addAll(getSalaryAcctEmployeeMapper().listSome(lambdaQueryChainWrapper)); + }); + list = empList; + } + if (CollectionUtils.isEmpty(list)) { return Lists.newArrayList(); } From 309695462811cc47481ab72a05c3b33ef303632a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 16 Jun 2023 14:40:36 +0800 Subject: [PATCH 185/245] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E8=A7=84=E5=88=99=EF=BC=88=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E5=81=9C=E8=96=AA=E5=88=97=E8=A1=A8=EF=BC=89?= =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 26 ++++++++-- .../impl/SalaryArchiveServiceImpl.java | 16 +++++- .../sys/constant/SalarySysConstant.java | 5 ++ .../salary/sys/entity/vo/AppSettingVO.java | 5 ++ .../sys/enums/SalaryAcctEmployeeRuleEnum.java | 52 +++++++++++++++++++ .../sys/service/SalarySysConfService.java | 6 +++ .../impl/SalarySysConfServiceImpl.java | 26 ++++++++-- .../web/SalarySystemConfigController.java | 8 +++ .../wrapper/SalarySystemConfigWrapper.java | 4 ++ 9 files changed, 140 insertions(+), 8 deletions(-) create mode 100644 src/com/engine/salary/sys/enums/SalaryAcctEmployeeRuleEnum.java diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index 6914f1b2c..2b70e803b 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -34,7 +34,10 @@ import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.impl.ProgressServiceImpl; import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; +import com.engine.salary.sys.constant.SalarySysConstant; +import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.OrderRuleVO; +import com.engine.salary.sys.enums.SalaryAcctEmployeeRuleEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryAssert; @@ -281,11 +284,23 @@ public class SIAccountBiz extends Service { // 需要分权的情况 // if(getTaxAgentService().isOpenDevolution()) { List empIds = getInsuranceAccountDetailMapper().selectEmpByPaymentOrg(param.getPaymentOrganization()); + + // 获取薪资核算人员规则 + SalarySysConfPO salaryAcctEmployeeRule = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_ACCT_EMPLOYEE_RULE); + List status = new ArrayList<>(); + if(Objects.isNull(salaryAcctEmployeeRule) || StringUtils.equals(salaryAcctEmployeeRule.getConfValue(), SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue()) ){ + // 包含停缴 + status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(),EmployeeStatusEnum.STAY_DEL.getValue(), + EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue(), EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue()); + }else{ + status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(),EmployeeStatusEnum.STAY_DEL.getValue()); + } + List finalStatus = status; //过滤出需要核算的人员,即福利档案基础信息表中runStatus为正在缴纳和待减员的人员 List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); List canAccountIds = baseInfoPOList.stream() .filter(f->f.getPaymentOrganization().equals(param.getPaymentOrganization()) - && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) + && (finalStatus.contains(f.getRunStatus()) )) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); @@ -299,7 +314,8 @@ public class SIAccountBiz extends Service { //过滤出目标个税扣缴义务人相关信息 socials = socials.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp1 = socials.stream() - .filter(s -> StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01")))) + .filter(s -> !(StringUtils.isBlank(s.getSocialEndTime()) && StringUtils.isBlank(s.getSocialStartTime())) && + (StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01")))) ) .map(InsuranceArchivesSocialSchemePO::getEmployeeId) .collect(Collectors.toList()); @@ -307,7 +323,8 @@ public class SIAccountBiz extends Service { //过滤出目标个税扣缴义务人相关信息 funds = funds.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp2 = funds.stream() - .filter(s -> StringUtils.isBlank(s.getFundEndTime()) || (SalaryDateUtil.stringToDate(s.getFundEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getFundEndTime() + "-01")))) + .filter(s -> !(StringUtils.isBlank(s.getFundStartTime()) && StringUtils.isBlank(s.getFundEndTime())) && + (StringUtils.isBlank(s.getFundEndTime()) || (SalaryDateUtil.stringToDate(s.getFundEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getFundEndTime() + "-01"))))) .map(InsuranceArchivesFundSchemePO::getEmployeeId) .collect(Collectors.toList()); @@ -315,7 +332,8 @@ public class SIAccountBiz extends Service { //过滤出目标个税扣缴义务人相关信息 others = others.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp3 = others.stream() - .filter(s -> StringUtils.isBlank(s.getOtherEndTime()) || (SalaryDateUtil.stringToDate(s.getOtherEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getOtherEndTime() + "-01")))) + .filter(s -> !(StringUtils.isBlank(s.getOtherStartTime()) && StringUtils.isBlank(s.getOtherEndTime())) && + (StringUtils.isBlank(s.getOtherEndTime()) || (SalaryDateUtil.stringToDate(s.getOtherEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getOtherEndTime() + "-01"))))) .map(InsuranceArchivesOtherSchemePO::getEmployeeId) .collect(Collectors.toList()); validIds.addAll(emp1); diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 9b14cb822..751dad868 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -27,8 +27,11 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.archive.SalaryArchiveItemMapper; import com.engine.salary.mapper.archive.SalaryArchiveMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.constant.SalarySysConstant; +import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.enums.OpenEnum; +import com.engine.salary.sys.enums.SalaryAcctEmployeeRuleEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; @@ -698,8 +701,19 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe * @return */ private List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds, Long taxAgentId, boolean isOnlyTaxAgent) { + // 获取核算人员规则 + List statusList = Collections.emptyList(); + SalarySysConfPO employeeRule = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_ACCT_EMPLOYEE_RULE); + if(Objects.isNull(employeeRule) || StringUtils.equals(employeeRule.getConfValue(), SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue())){ + // 默认包含停薪列表 + statusList = Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue(), + SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue()); + }else{ + // 仅包含发薪、待定薪 + statusList = Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue()); + } // 获取薪资档案数据 - List salaryArchiveList = listSome(SalaryArchivePO.builder().runStatusList(Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue())).employeeIds(employeeIds).taxAgentId(taxAgentId).build()); + List salaryArchiveList = listSome(SalaryArchivePO.builder().runStatusList(statusList).employeeIds(employeeIds).taxAgentId(taxAgentId).build()); List allEmployeeIds = salaryArchiveList.stream().map(SalaryArchivePO::getEmployeeId).distinct().collect(Collectors.toList()); // 获取所有可被引用的薪资项目 diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index 082a9568f..5964b039a 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -61,4 +61,9 @@ public class SalarySysConstant { */ public static final String EDIT_IMPORT_AUTO_LOCK = "EditImportAutoLock"; + /** + * 薪资核算、社保福利核算人员规则 + */ + public static final String SALARY_ACCT_EMPLOYEE_RULE = "salaryAcctEmployeeRule"; + } diff --git a/src/com/engine/salary/sys/entity/vo/AppSettingVO.java b/src/com/engine/salary/sys/entity/vo/AppSettingVO.java index fd2d6b5de..a19830fbd 100644 --- a/src/com/engine/salary/sys/entity/vo/AppSettingVO.java +++ b/src/com/engine/salary/sys/entity/vo/AppSettingVO.java @@ -65,4 +65,9 @@ public class AppSettingVO { */ private String showEncryptOperationButton; + /** + * 薪资核算、社保福利核算人员规则 + */ + private String salaryAcctEmployeeRule; + } diff --git a/src/com/engine/salary/sys/enums/SalaryAcctEmployeeRuleEnum.java b/src/com/engine/salary/sys/enums/SalaryAcctEmployeeRuleEnum.java new file mode 100644 index 000000000..e9103b6a6 --- /dev/null +++ b/src/com/engine/salary/sys/enums/SalaryAcctEmployeeRuleEnum.java @@ -0,0 +1,52 @@ +package com.engine.salary.sys.enums; + +import com.engine.salary.enums.BaseEnum; +import org.apache.commons.lang3.StringUtils; + +/** + * 薪资核算、社保福利核算人员匹配规则 + * @author songyang + **/ +public enum SalaryAcctEmployeeRuleEnum implements BaseEnum { + + //"0"代表根据最后缴纳日期判断(包含停薪(停缴)列表),"1"代表根据最后缴纳日期判断(不包含停薪(停缴)列表) + BYPAYENDTIME("0", "包含停薪(停缴)列表中数据(最后缴纳日期小于等于薪资核算月)", 1), + BYSTATUS("1", "仅包含发薪、待停薪中数据(最后缴纳日期小于等于薪资核算月)" , 1); + + private String value; + + private String defaultLabel; + + private int labelId; + + + SalaryAcctEmployeeRuleEnum(String value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public String getValue() { + return value; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + public static SalaryAcctEmployeeRuleEnum parseByValue(String value) { + for (SalaryAcctEmployeeRuleEnum salaryAcctEmployeeRuleEnum : SalaryAcctEmployeeRuleEnum.values()) { + if (StringUtils.equals(salaryAcctEmployeeRuleEnum.getValue(), value)) { + return salaryAcctEmployeeRuleEnum; + } + } + return BYPAYENDTIME; + } +} diff --git a/src/com/engine/salary/sys/service/SalarySysConfService.java b/src/com/engine/salary/sys/service/SalarySysConfService.java index ab1ae6a9e..956979d74 100644 --- a/src/com/engine/salary/sys/service/SalarySysConfService.java +++ b/src/com/engine/salary/sys/service/SalarySysConfService.java @@ -90,4 +90,10 @@ public interface SalarySysConfService { * @date 2022/11/9 21:07 */ Date getTaxDeclarationRebootDate(); + + /** + * 保存薪资核算、社保福利核算人员规则 + * @param rule + */ + void saveSalaryAcctEmployeeRule(String rule); } diff --git a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java index f7270d37e..30b16e5c1 100644 --- a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java +++ b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java @@ -43,6 +43,7 @@ import com.engine.salary.sys.entity.vo.AppSettingVO; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.enums.*; import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; import com.weaver.util.threadPool.ThreadPoolUtil; @@ -406,6 +407,15 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe return date; } + @Override + public void saveSalaryAcctEmployeeRule(String rule) { + if (MatchEmployeeModeEnum.parseByValue(rule) == null) { + throw new SalaryRunTimeException("无效规则!"); + } + + saveSettingByType(rule, SALARY_ACCT_EMPLOYEE_RULE, "薪资、社保福利核算包含人员规则", "basic"); + } + /** * 保存或者修改应用设置 * @@ -461,13 +471,23 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe }); } - List taxDeclarationFunction = getSalarySysConfMapper().listSome(SalarySysConfPO.builder().deleteType(0).confKey(TAX_DECLARATION_FUNCTION).build()); - if (taxDeclarationFunction == null || taxDeclarationFunction.size() == 0 || (taxDeclarationFunction.get(0).getConfValue().equals(TaxDeclarationFunctionEnum.REBOOT.getValue()))) { + Map salarySysConfMap = SalaryEntityUtil.convert2Map(salarySysConfPOS, SalarySysConfPO::getConfKey); + SalarySysConfPO taxDeclarationFunction = salarySysConfMap.get(TAX_DECLARATION_FUNCTION); + if (taxDeclarationFunction == null || (taxDeclarationFunction.getConfValue().equals(TaxDeclarationFunctionEnum.REBOOT.getValue()))) { // 默认开启报税功能 或者重启状态时前端展示开启 appSettingVO.setIsOpenTaxDeclaration("1"); } else { - appSettingVO.setIsOpenTaxDeclaration(taxDeclarationFunction.get(0).getConfValue()); + appSettingVO.setIsOpenTaxDeclaration(taxDeclarationFunction.getConfValue()); } + + SalarySysConfPO salaryAcctEmployeeRule = salarySysConfMap.get(SALARY_ACCT_EMPLOYEE_RULE); + if (salaryAcctEmployeeRule == null ) { + // 薪资核算人员匹配规则 + appSettingVO.setSalaryAcctEmployeeRule(SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue()); + } else { + appSettingVO.setSalaryAcctEmployeeRule( SalaryAcctEmployeeRuleEnum.parseByValue(salaryAcctEmployeeRule.getConfValue()).getValue() ); + } + //默认加密开启 if (StringUtils.isEmpty(appSettingVO.getIsOpenEncrypt())) { appSettingVO.setIsOpenEncrypt(OpenEnum.OPEN.getValue()); diff --git a/src/com/engine/salary/web/SalarySystemConfigController.java b/src/com/engine/salary/web/SalarySystemConfigController.java index 5c03047de..e747d7393 100644 --- a/src/com/engine/salary/web/SalarySystemConfigController.java +++ b/src/com/engine/salary/web/SalarySystemConfigController.java @@ -180,6 +180,14 @@ public class SalarySystemConfigController { return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::saveMatchEmployeeModeRule, param); } + @POST + @Path("/saveSalaryAcctEmployeeRule") + @Produces(MediaType.APPLICATION_JSON) + public String saveSalaryAcctEmployeeRule(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody MatchEmployeeModeSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::saveSalaryAcctEmployeeRule, param.getRule()); + } + /** * 应用设置 diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index 0dd40eee4..a29b94c6b 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -139,4 +139,8 @@ public class SalarySystemConfigWrapper extends Service { public Map getEncryptProgress(String progressId) { return getSalarySysConfService(user).getEncryptProgress(progressId); } + + public void saveSalaryAcctEmployeeRule(String rule) { + getSalarySysConfService(user).saveSalaryAcctEmployeeRule(rule); + } } From 1c6cf5feabddd5d0d3e8306471282453984b573a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 16 Jun 2023 15:47:24 +0800 Subject: [PATCH 186/245] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E8=A7=84=E5=88=99=EF=BC=88=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E5=81=9C=E8=96=AA=E5=88=97=E8=A1=A8=EF=BC=89?= =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/sys/enums/SalaryAcctEmployeeRuleEnum.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/sys/enums/SalaryAcctEmployeeRuleEnum.java b/src/com/engine/salary/sys/enums/SalaryAcctEmployeeRuleEnum.java index e9103b6a6..8f5120f9e 100644 --- a/src/com/engine/salary/sys/enums/SalaryAcctEmployeeRuleEnum.java +++ b/src/com/engine/salary/sys/enums/SalaryAcctEmployeeRuleEnum.java @@ -10,8 +10,8 @@ import org.apache.commons.lang3.StringUtils; public enum SalaryAcctEmployeeRuleEnum implements BaseEnum { //"0"代表根据最后缴纳日期判断(包含停薪(停缴)列表),"1"代表根据最后缴纳日期判断(不包含停薪(停缴)列表) - BYPAYENDTIME("0", "包含停薪(停缴)列表中数据(最后缴纳日期小于等于薪资核算月)", 1), - BYSTATUS("1", "仅包含发薪、待停薪中数据(最后缴纳日期小于等于薪资核算月)" , 1); + BYPAYENDTIME("0", "发薪员工(在缴员工)、从发薪(在缴)至停缴(停薪)列表员工", 1), + BYSTATUS("1", "发薪员工(在缴员工)列表" , 1); private String value; From d9f57ac258342a82a2569f57b50b551197f7bc52 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 16 Jun 2023 16:41:49 +0800 Subject: [PATCH 187/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=9E=E7=AE=97?= =?UTF-8?q?=E5=90=8E=E6=97=A0=E6=B3=95=E5=8F=91=E6=94=BE=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E6=AC=A1=E6=A0=B8=E7=AE=97=E7=9A=84=E5=B7=A5=E8=B5=84=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryBill/dto/SalarySendBaseInfoDTO.java | 11 +++++--- .../salaryBill/dto/SalarySendListDTO.java | 13 ++++++++-- .../mapper/salarybill/SalarySendMapper.xml | 3 ++- .../service/impl/SalarySendServiceImpl.java | 23 +++++++++++------ .../salary/wrapper/SalarySendWrapper.java | 25 +++++++++++++------ 5 files changed, 53 insertions(+), 22 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalarySendBaseInfoDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalarySendBaseInfoDTO.java index c6bbf804d..9ce265dee 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalarySendBaseInfoDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalarySendBaseInfoDTO.java @@ -38,9 +38,12 @@ public class SalarySendBaseInfoDTO { // 薪资账套的周期") private SalarySobCycleDTO salarySobCycle; - // 工资单发放类型 1:正常 2:补发 - private String salaryAcctType; +// // 工资单发放类型 1:正常 2:补发 +// private String salaryAcctType; +// +// // 是否回算过 0:没有回算过,1:回算过 +// private Integer haveBackCalc; - // 是否回算过 0:没有回算过,1:回算过 - private Integer haveBackCalc; + // 能否发送 + private Boolean canSend; } diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalarySendListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalarySendListDTO.java index 61ded63b2..c4c72bda0 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalarySendListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalarySendListDTO.java @@ -123,14 +123,23 @@ public class SalarySendListDTO { private Integer sendStatus; /** - * 核算类型。0:正常,1:补发 + * 工资单类型。0:正常,1:补发 */ private Integer salaryAcctType; + /** + * 薪资记录核算类型。0:正常,1:补发 + */ + private Integer salaryAcctRecordType; + + /** + * 能够查看详情 + */ + private Boolean canSeeDetail; /** * 是否回算过 0:没有回算过,1:回算过 */ - private Integer haveBackCalc; +// private Integer haveBackCalc; } diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml index dbe96c52f..040f23831 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml @@ -43,7 +43,8 @@ t1.send_num, t1.send_total, t1.last_send_time, - t2.acct_times + t2.acct_times, + t2.back_calc_status AS salaryAcctRecordType diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 46c7cdd0b..9c36347ba 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -405,12 +405,12 @@ public class SalarySendServiceImpl extends Service implements SalarySendService throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在")); } Long salaryAcctId = salarySend.getSalaryAccountingId(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(salaryAcctId); - List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIds(Collections.singletonList(salarySobCycleDTO.getSalarySobId())); - // 是否有回算记录 - boolean haveBackCalc = salaryAcctRecordPOS.stream().filter(PO -> Objects.equals(PO.getBackCalcStatus(), NumberUtils.INTEGER_ONE) && - Objects.equals(sdf.format(PO.getSalaryMonth()), SalaryDateUtil.MONTH_FORMATTER.format(salarySobCycleDTO.getSalaryMonth()))).collect(Collectors.toList()).size() > 0; +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); +// List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIds(Collections.singletonList(salarySobCycleDTO.getSalarySobId())); +// // 是否有回算记录 +// boolean haveBackCalc = salaryAcctRecordPOS.stream().filter(PO -> Objects.equals(PO.getBackCalcStatus(), NumberUtils.INTEGER_ONE) && +// Objects.equals(sdf.format(PO.getSalaryMonth()), SalaryDateUtil.MONTH_FORMATTER.format(salarySobCycleDTO.getSalaryMonth()))).collect(Collectors.toList()).size() > 0; String template = ""; // 获取默认模板 List salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Collections.singletonList(salarySend.getSalarySobId())); @@ -422,14 +422,23 @@ public class SalarySendServiceImpl extends Service implements SalarySendService template = salaryTemplates.get(0).getName(); } } + + Boolean canSend = true; + SalaryAcctRecordPO acctRecord = getSalaryAcctRecordService(user).getById(salaryAcctId); + // 回算过,但是查看的是普通工资单(不能发);回算过,但是查看的是回算工资单(可以发);记录没回算过(可以发) + if(Objects.equals(acctRecord.getBackCalcStatus(), NumberUtils.INTEGER_ONE) && Objects.equals(salarySend.getSalaryAcctType(),NumberUtils.INTEGER_ZERO)){ + canSend = false; + } + return SalarySendBaseInfoDTO.builder() .salaryMonth(salarySobCycleDTO.getSalaryMonth()) .template(template) .salarySobCycle(salarySobCycleDTO) .sendNum(salarySend.getSendNum()) .sendTotal(salarySend.getSendTotal()) - .salaryAcctType(salarySend.getSalaryAcctType().toString()) - .haveBackCalc(haveBackCalc ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO) + .canSend(canSend) +// .salaryAcctType(salarySend.getSalaryAcctType().toString()) +// .haveBackCalc(haveBackCalc ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO) .build(); } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 19dc48f78..fb6bad93d 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -113,6 +113,15 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy list = salarySendMapper.list(queryParam); } + list.stream().forEach(dto -> { + // 回算过,但是查看的是普通工资单(不能查看详情);回算过,但是查看的是回算工资单(可以发);记录没回算过(可以发) + if(Objects.equals(dto.getSalaryAcctRecordType(), NumberUtils.INTEGER_ONE) && Objects.equals(dto.getSalaryAcctType(),NumberUtils.INTEGER_ZERO)){ + dto.setCanSeeDetail(false); + }else{ + dto.setCanSeeDetail(true); + } + }); + PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, SalarySendListDTO.class); List pageList = pageInfo.getList(); @@ -130,7 +139,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy e.setTemplate(NumberUtils.INTEGER_ONE.equals(e.getSalaryAcctType()) ? optional.get().getReplenishName() : optional.get().getName()); e.setTemplateId(optional.get().getId()); } - e.setHaveBackCalc(NumberUtils.INTEGER_ZERO); +// e.setHaveBackCalc(NumberUtils.INTEGER_ZERO); }); } // 薪资核算ID @@ -138,13 +147,13 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy // 获取是回算的薪资核算ID SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); List salaryAcctRecordPOS = getSalaryAcctRecordService(user).getBackCalcRecordByIds(salaryAcctIds); - Set backCalcSalarySobs = SalaryEntityUtil.properties(salaryAcctRecordPOS, salaryAcctRecordPO -> salaryAcctRecordPO.getSalarySobId() + "-" + sdf.format(salaryAcctRecordPO.getSalaryMonth())); - // 判断是否回算过,haveBackCalc 属性 - pageList.stream().forEach(salarySendDTO -> { - if (backCalcSalarySobs.contains(salarySendDTO.getSalarySobId() + "-" + sdf.format(salarySendDTO.getSalaryYearMonth()))) { - salarySendDTO.setHaveBackCalc(NumberUtils.INTEGER_ONE); - } - }); +// Set backCalcSalarySobs = SalaryEntityUtil.properties(salaryAcctRecordPOS, salaryAcctRecordPO -> salaryAcctRecordPO.getSalarySobId() + "-" + sdf.format(salaryAcctRecordPO.getSalaryMonth())); +// // 判断是否回算过,haveBackCalc 属性 +// pageList.stream().forEach(salarySendDTO -> { +// if (backCalcSalarySobs.contains(salarySendDTO.getSalarySobId() + "-" + sdf.format(salarySendDTO.getSalaryYearMonth()))) { +// salarySendDTO.setHaveBackCalc(NumberUtils.INTEGER_ONE); +// } +// }); List columns = buildWeaTableColumns(); WeaTable table = new WeaTable(); table.setColumns(columns); From 6850c050b8372a3579042f2a81489c0d886c781b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 19 Jun 2023 09:16:49 +0800 Subject: [PATCH 188/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=8E=BB=E9=99=A4=20=E5=81=9C=E8=96=AA=5F?= =?UTF-8?q?=E6=9D=A5=E8=87=AA=E5=BE=85=E5=AE=9A=E8=96=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 2 +- .../engine/salary/service/impl/SalaryArchiveServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index 2b70e803b..96b6d0e0d 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -291,7 +291,7 @@ public class SIAccountBiz extends Service { if(Objects.isNull(salaryAcctEmployeeRule) || StringUtils.equals(salaryAcctEmployeeRule.getConfValue(), SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue()) ){ // 包含停缴 status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(),EmployeeStatusEnum.STAY_DEL.getValue(), - EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue(), EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue()); + EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()); }else{ status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(),EmployeeStatusEnum.STAY_DEL.getValue()); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 751dad868..2383d817c 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -707,7 +707,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe if(Objects.isNull(employeeRule) || StringUtils.equals(employeeRule.getConfValue(), SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue())){ // 默认包含停薪列表 statusList = Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue(), - SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue()); + SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue() ); }else{ // 仅包含发薪、待定薪 statusList = Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue()); From 16cf63018f42913f57a548b6599db8e6d4d04438 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 19 Jun 2023 09:54:02 +0800 Subject: [PATCH 189/245] =?UTF-8?q?=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=88=96=E8=80=85=E5=9B=9E=E7=AE=97=E6=97=B6=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctRecordServiceImpl.java | 12 ++++++++++++ .../impl/SalaryAcctResultServiceImpl.java | 16 ---------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 434b74638..190f9a842 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -18,6 +18,8 @@ import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper; import com.engine.salary.mapper.salarybill.SalarySendMapper; +import com.engine.salary.report.service.SalaryStatisticsReportService; +import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl; import com.engine.salary.service.*; import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; import com.engine.salary.sys.service.SalarySysConfService; @@ -96,6 +98,10 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalaryAcctReportServiceImpl.class, user); } + private SalaryStatisticsReportService getSalaryStatisticsReportService(User user) { + return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); + } + @Override public SalaryAcctRecordPO getById(Long id) { @@ -551,6 +557,9 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe // 生成工资单 getSalarySendService(user).generateSalaryBill(salaryAcctRecordId); + //删除报表缓存 + getSalaryStatisticsReportService(user).removeReportCache(); + // 记录日志 // String targetName = getLogTargetNameById(salaryAcctRecordId); @@ -675,6 +684,9 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe salaryAcctRecordPO.setStatus(SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()); salaryAcctRecordPO.setUpdateTime(new Date()); getSalaryAcctRecordMapper().updateIgnoreNull(salaryAcctRecordPO); + + //删除报表缓存 + getSalaryStatisticsReportService(user).removeReportCache(); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index b23942d95..19831f17c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -590,8 +590,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); } - //删除报表缓存 - getSalaryStatisticsReportService(user).removeReportCache(); // 存储薪资核算结果数据来源日志 salaryAcctResultPOS = getSalaryAcctRecordService(user).listBySalaryAcctEmpId(saveParam.getSalaryAcctEmpId()); @@ -648,8 +646,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List> partition = Lists.partition(list, 100); partition.forEach(getSalaryAcctResultMapper()::batchInsert); - //删除报表缓存 - getSalaryStatisticsReportService(user).removeReportCache(); } } @@ -657,26 +653,17 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public void deleteBySalaryAcctEmployeeIds(Collection salaryAcctEmployeeIds) { getSalaryAcctResultMapper().deleteBySalaryAcctEmpIds(salaryAcctEmployeeIds); - - //删除报表缓存 - getSalaryStatisticsReportService(user).removeReportCache(); } @Override public void deleteByAcctEmployeeIdsAndSalaryItemIds(Collection salaryAcctEmployeeIds, Collection salaryItemIds) { getSalaryAcctResultMapper().deleteByAcctEmpIdsAndSalaryItemIds(salaryAcctEmployeeIds, salaryItemIds); - - //删除报表缓存 - getSalaryStatisticsReportService(user).removeReportCache(); } @Override public void deleteBySalaryAcctRecordIds(Collection salaryAcctRecordIds) { getSalaryAcctResultMapper().deleteBySalaryAcctRecordIds(salaryAcctRecordIds); - - //删除报表缓存 - getSalaryStatisticsReportService(user).removeReportCache(); } @Override @@ -997,9 +984,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe for (List subSalaryAcctResultValues : partition) { getSalaryAcctResultMapper().batchUpdateOriginResultValue(subSalaryAcctResultValues); } - - //删除报表缓存 - getSalaryStatisticsReportService(user).removeReportCache(); } private Set canLockSalaryItemIds(Long salarySobId) { From 0e601e39674db6385b31971a11d9c9a101e6802e Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 19 Jun 2023 13:59:24 +0800 Subject: [PATCH 190/245] =?UTF-8?q?=E4=BF=AE=E6=94=B9DBType=E7=9A=84?= =?UTF-8?q?=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/biz/SalaryTemplateBiz.java | 10 ++ .../salaryBill/dto/SalaryTemplateListDTO.java | 7 + .../param/SalaryItemSearchParam.java | 73 +++++----- .../salarybill/SalaryTemplateMapper.java | 3 +- .../salarybill/SalaryTemplateMapper.xml | 96 +++++++++++++ .../salary/service/SalaryTemplateService.java | 10 ++ .../impl/SalaryTemplateServiceImpl.java | 36 +++++ .../salary/web/SalaryBillController.java | 2 +- .../salary/wrapper/SalaryTemplateWrapper.java | 127 +++++++++--------- 9 files changed, 259 insertions(+), 105 deletions(-) diff --git a/src/com/engine/salary/biz/SalaryTemplateBiz.java b/src/com/engine/salary/biz/SalaryTemplateBiz.java index f418086b2..53180b0a4 100644 --- a/src/com/engine/salary/biz/SalaryTemplateBiz.java +++ b/src/com/engine/salary/biz/SalaryTemplateBiz.java @@ -130,4 +130,14 @@ public class SalaryTemplateBiz { sqlSession.close(); } } + + public List listDTO(SalaryTemplatePO param) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryTemplateMapper mapper = sqlSession.getMapper(SalaryTemplateMapper.class); + return mapper.listDTO(param); + } finally { + sqlSession.close(); + } + } } diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateListDTO.java index d59c4d231..60182ae3f 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateListDTO.java @@ -3,6 +3,7 @@ package com.engine.salary.entity.salaryBill.dto; import com.engine.salary.annotation.SalaryTable; import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.annotation.SalaryTableOperate; +import com.engine.salary.annotation.TableTitle; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -25,26 +26,32 @@ public class SalaryTemplateListDTO { //主键id @SalaryTableColumn(column = "id", display = false) + @TableTitle(title = "id", dataIndex = "id", key = "id",display = false) private Long id; //工资单模板名称 @SalaryTableColumn(text = "工资单模板名称", width = "20%", column = "name") + @TableTitle(title = "工资单模板名称", dataIndex = "name", key = "name") private String name; //补发工资单模板名称 @SalaryTableColumn(text = "补发工资单模板名称", width = "20%", column = "replenishName") + @TableTitle(title = "补发工资单模板名称", dataIndex = "replenishName", key = "replenishName") private String replenishName; //所属薪资账套 @SalaryTableColumn(text = "所属薪资账套", width = "20%", column = "salarySob") + @TableTitle(title = "所属薪资账套", dataIndex = "salarySob", key = "salarySob") private String salarySob; //默认使用 @SalaryTableColumn(text = "默认使用", width = "20%", column = "useType") + @TableTitle(title = "默认使用", dataIndex = "useType", key = "useType") private String useType; // 备注 @SalaryTableColumn(text = "备注", width = "20%", column = "description") + @TableTitle(title = "备注", dataIndex = "description", key = "description") private String description; } diff --git a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSearchParam.java b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSearchParam.java index 16370972b..32e088f1e 100644 --- a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSearchParam.java +++ b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSearchParam.java @@ -4,17 +4,12 @@ import com.engine.salary.common.BaseQueryParam; import com.engine.salary.enums.SalaryOnOffEnum; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; -import com.engine.salary.util.db.DBType; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import weaver.conn.RecordSet; import java.util.Collection; -import java.util.stream.Collectors; /** * 薪资项目查询参数 @@ -69,38 +64,38 @@ public class SalaryItemSearchParam extends BaseQueryParam { private Collection excludeIds; - public static String makeSqlWhere(SalaryItemSearchParam searchParam) { - - String sqlWhere = " t.delete_type = 0 "; - - DBType dbType = DBType.get(new RecordSet().getDBType()); - - String name = searchParam.getName(); - if (StringUtils.isNotBlank(name)) { - sqlWhere += " AND t.name " + dbType.like(name); - } - String description = searchParam.getDescription(); - if (StringUtils.isNotBlank(description)) { - sqlWhere += " AND t.description " + dbType.like(description); - } - Integer useInEmployeeSalary = searchParam.getUseInEmployeeSalary(); - if (useInEmployeeSalary != null) { - sqlWhere += " AND t.use_in_employee_salary = " + useInEmployeeSalary; - } - Integer useDefault = searchParam.getUseDefault(); - if (useDefault != null) { - sqlWhere += " AND t.use_default = " + useDefault; - } - Integer valueType = searchParam.getValueType(); - if (valueType != null) { - sqlWhere += " AND t.value_type = " + valueType; - } - Collection excludeIds = searchParam.getExcludeIds(); - if (CollectionUtils.isNotEmpty(excludeIds)) { - String idsStr = excludeIds.stream().map(String::valueOf).collect(Collectors.joining(",")); - sqlWhere += " AND t.id NOT IN (" + idsStr + ")"; - } - - return sqlWhere; - } +// public static String makeSqlWhere(SalaryItemSearchParam searchParam) { +// +// String sqlWhere = " t.delete_type = 0 "; +// +// DBType dbType = DBType.get(new RecordSet().getDBType()); +// +// String name = searchParam.getName(); +// if (StringUtils.isNotBlank(name)) { +// sqlWhere += " AND t.name " + dbType.like(name); +// } +// String description = searchParam.getDescription(); +// if (StringUtils.isNotBlank(description)) { +// sqlWhere += " AND t.description " + dbType.like(description); +// } +// Integer useInEmployeeSalary = searchParam.getUseInEmployeeSalary(); +// if (useInEmployeeSalary != null) { +// sqlWhere += " AND t.use_in_employee_salary = " + useInEmployeeSalary; +// } +// Integer useDefault = searchParam.getUseDefault(); +// if (useDefault != null) { +// sqlWhere += " AND t.use_default = " + useDefault; +// } +// Integer valueType = searchParam.getValueType(); +// if (valueType != null) { +// sqlWhere += " AND t.value_type = " + valueType; +// } +// Collection excludeIds = searchParam.getExcludeIds(); +// if (CollectionUtils.isNotEmpty(excludeIds)) { +// String idsStr = excludeIds.stream().map(String::valueOf).collect(Collectors.joining(",")); +// sqlWhere += " AND t.id NOT IN (" + idsStr + ")"; +// } +// +// return sqlWhere; +// } } diff --git a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.java b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.java index 8ab3b6a74..aa20c6480 100644 --- a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.java +++ b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.java @@ -3,7 +3,6 @@ package com.engine.salary.mapper.salarybill; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateListDTO; import com.engine.salary.entity.salaryBill.param.SalaryTemplateQueryParam; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; -import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.Collection; @@ -72,4 +71,6 @@ public interface SalaryTemplateMapper { * @param po */ void updateUsetypeBySalarySobId(SalaryTemplatePO po); + + List listDTO(SalaryTemplatePO param); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml index 580cdc5b8..253861502 100644 --- a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml @@ -336,6 +336,102 @@ ORDER BY t.salary_sob_id,t.id DESC + + + + + + UPDATE hrsa_salary_template diff --git a/src/com/engine/salary/service/SalaryTemplateService.java b/src/com/engine/salary/service/SalaryTemplateService.java index a1dd3dfb8..6042da567 100644 --- a/src/com/engine/salary/service/SalaryTemplateService.java +++ b/src/com/engine/salary/service/SalaryTemplateService.java @@ -1,10 +1,13 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryBill.dto.SalaryTemplateListDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO; import com.engine.salary.entity.salaryBill.param.SalaryTemplateCopyParam; import com.engine.salary.entity.salaryBill.param.SalaryTemplateDefaultUseParam; +import com.engine.salary.entity.salaryBill.param.SalaryTemplateQueryParam; import com.engine.salary.entity.salaryBill.param.SalaryTemplateSaveParam; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import com.engine.salary.util.page.PageInfo; import java.util.Collection; import java.util.List; @@ -102,4 +105,11 @@ public interface SalaryTemplateService { * @return */ List getBySalarySobIds(Collection ids); + + /** + * 工资单模板列表 + * @param queryParam + * @return + */ + PageInfo listPage(SalaryTemplateQueryParam queryParam); } diff --git a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java index 378ad0a3a..0e270fed8 100644 --- a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java @@ -20,6 +20,10 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.SalarySobItemService; import com.engine.salary.service.SalarySobService; import com.engine.salary.service.SalaryTemplateService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; import com.mzlion.core.utils.BeanUtils; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -47,6 +51,10 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate return ServiceUtil.getService(SalarySobServiceImpl.class, user); } + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + @Override public SalaryTemplatePO getById(Long id) { return mapper.getById(id); @@ -279,4 +287,32 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate public List getBySalarySobIds(Collection ids) { return mapper.listSome(SalaryTemplatePO.builder().salarySobIds(ids).build()); } + + @Override + public PageInfo listPage(SalaryTemplateQueryParam queryParam) { + List salaryTemplateDTOList = Collections.emptyList(); + // 分权 + long currentEmployeeId = user.getUID(); + Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); + if (needAuth) { + List salarySobPOS = getSalarySobService(user).listByDisable(NumberUtils.INTEGER_ZERO); + Set salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(salarySobIds)) { + // 查询 + salaryTemplateDTOList = mapper.listDTO(SalaryTemplatePO.builder() + .salarySobId(queryParam.getSalarySobId()) + .name(queryParam.getName()) + .salarySobIds(salarySobIds).build()); + } else { + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryTemplateDTOList, SalaryTemplateListDTO.class); + } + }else{ + // 查询 + salaryTemplateDTOList = mapper.listDTO(SalaryTemplatePO.builder().salarySobId(queryParam.getSalarySobId()).name(queryParam.getName()).build()); + } + + // 分页参数 + PageInfo page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryTemplateDTOList, SalaryTemplateListDTO.class); + return page; + } } diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 477a173c7..4d348bf69 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -60,7 +60,7 @@ public class SalaryBillController { @Produces(MediaType.APPLICATION_JSON) public String templateList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryTemplateQueryParam queryParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalaryTemplateWrapper(user)::list, queryParam); + return new ResponseResult>(user).run(getSalaryTemplateWrapper(user)::list, queryParam); } /** diff --git a/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java b/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java index 02d5d4412..7639f4e13 100644 --- a/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java @@ -1,9 +1,7 @@ package com.engine.salary.wrapper; -import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.entity.salaryBill.dto.*; import com.engine.salary.entity.salaryBill.param.*; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; @@ -19,12 +17,11 @@ import com.engine.salary.service.impl.*; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; -import com.engine.salary.util.db.DBType; +import com.engine.salary.util.page.PageInfo; import com.mzlion.core.utils.BeanUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; -import weaver.conn.RecordSet; import weaver.hrm.User; import java.util.*; @@ -69,68 +66,70 @@ public class SalaryTemplateWrapper extends Service { * @param queryParam * @return */ - public Map list(SalaryTemplateQueryParam queryParam) { - SalaryWeaTable table = new SalaryWeaTable(user, SalaryTemplateListDTO.class); - - String fields = " t.id" + - " , t.name" + - " , t.replenish_name as replenishName" + - " , s.name as salarySob" + - " , t.use_type as useType" + - " , t.description"; - - String from = " from hrsa_salary_template t left join hrsa_salary_sob s on t.salary_sob_id = s.id "; - - table.setBackfields(fields); - table.setSqlform(from); - table.setSqlwhere(makeSqlWhere(queryParam)); - table.setSqlorderby("t.id DESC"); - table.setSqlprimarykey("t.id"); - table.setSqlisdistinct("false"); - - WeaResultMsg result = new WeaResultMsg(false); - result.putAll(table.makeDataResult()); - result.success(); - return result.getResultMap(); + public PageInfo list(SalaryTemplateQueryParam queryParam) { + PageInfo listPage = getSalaryTemplateService(user).listPage(queryParam); + return listPage; +// SalaryWeaTable table = new SalaryWeaTable(user, SalaryTemplateListDTO.class); +// +// String fields = " t.id" + +// " , t.name" + +// " , t.replenish_name as replenishName" + +// " , s.name as salarySob" + +// " , t.use_type as useType" + +// " , t.description"; +// +// String from = " from hrsa_salary_template t left join hrsa_salary_sob s on t.salary_sob_id = s.id "; +// +// table.setBackfields(fields); +// table.setSqlform(from); +// table.setSqlwhere(makeSqlWhere(queryParam)); +// table.setSqlorderby("t.id DESC"); +// table.setSqlprimarykey("t.id"); +// table.setSqlisdistinct("false"); +// +// WeaResultMsg result = new WeaResultMsg(false); +// result.putAll(table.makeDataResult()); +// result.success(); +// return result.getResultMap(); } - private String makeSqlWhere(SalaryTemplateQueryParam queryParam) { - DBType dbType = DBType.get(new RecordSet().getDBType()); - - String sqlWhere = " t.delete_type = 0 "; - - String name = queryParam.getName(); - if (StringUtils.isNotBlank(name)) { - sqlWhere += " AND t.name " + dbType.like(name); - } - - Collection ids = queryParam.getIds(); - - if (ids != null && ids.size() > 0) { - sqlWhere += " AND t.id in (" + ids.stream().map(Object::toString).collect(Collectors.joining(",")) + ") "; - } - - Long salarySobId = queryParam.getSalarySobId(); - - if (salarySobId != null) { - sqlWhere += " AND t.salary_sob_id = " + salarySobId; - } - - long currentEmployeeId = user.getUID(); - Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); - if (needAuth) { - List salarySobPOS = getSalarySobService(user).listByDisable(NumberUtils.INTEGER_ZERO); - Set salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); - if (CollectionUtils.isNotEmpty(salarySobIds)) { - sqlWhere += " AND t.salary_sob_id in (" + salarySobIds.stream().map(Object::toString).collect(Collectors.joining(",")) + ") "; - } else { - sqlWhere += " AND 1=2 "; - } - } - - - return sqlWhere; - } +// private String makeSqlWhere(SalaryTemplateQueryParam queryParam) { +// DBType dbType = DBType.get(new RecordSet().getDBType()); +// +// String sqlWhere = " t.delete_type = 0 "; +// +// String name = queryParam.getName(); +// if (StringUtils.isNotBlank(name)) { +// sqlWhere += " AND t.name " + dbType.like(name); +// } +// +// Collection ids = queryParam.getIds(); +// +// if (ids != null && ids.size() > 0) { +// sqlWhere += " AND t.id in (" + ids.stream().map(Object::toString).collect(Collectors.joining(",")) + ") "; +// } +// +// Long salarySobId = queryParam.getSalarySobId(); +// +// if (salarySobId != null) { +// sqlWhere += " AND t.salary_sob_id = " + salarySobId; +// } +// +// long currentEmployeeId = user.getUID(); +// Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); +// if (needAuth) { +// List salarySobPOS = getSalarySobService(user).listByDisable(NumberUtils.INTEGER_ZERO); +// Set salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); +// if (CollectionUtils.isNotEmpty(salarySobIds)) { +// sqlWhere += " AND t.salary_sob_id in (" + salarySobIds.stream().map(Object::toString).collect(Collectors.joining(",")) + ") "; +// } else { +// sqlWhere += " AND 1=2 "; +// } +// } +// +// +// return sqlWhere; +// } /** * 获取工资单模板基础设置表单 From d60d24ea2eae100c618c3456c832e26ca730d23e Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 20 Jun 2023 14:31:06 +0800 Subject: [PATCH 191/245] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E5=AE=9A=E9=87=8F?= =?UTF-8?q?=E7=BB=B4=E5=BA=A6=E6=97=B6=E6=95=B0=E6=8D=AE=E9=80=8F=E8=A7=86?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index ce8491b15..fbf0cd1a4 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -36,6 +36,7 @@ import com.google.common.collect.Sets; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -401,8 +402,20 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary .dimensionValue(param.getDimensionValue()) .build(); + Map> resultMap = new HashMap<>(); + List salaryAcctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + if( NumberUtils.isCreatable(dimension.getDimCode()) ){ + List salaryAcctResultValues = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmployeeIds,Collections.singleton(Long.valueOf(dimension.getDimCode()))); + Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); + salaryAcctEmpResultMap.forEach((k, v) -> { + Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), p -> Util.null2o(p.getResultValue()), (key1, key2) -> key2)); + resultMap.put(k, collect); + }); + } + + // 获取根据维度值过滤出的本次核算人员信息 - calculateReportRecordsByDimension(dimension, SalaryStatisticsReportDataQueryParam.builder().build(), salaryStatisticsReportData, Collections.EMPTY_MAP); + calculateReportRecordsByDimension(dimension, SalaryStatisticsReportDataQueryParam.builder().build(), salaryStatisticsReportData, resultMap); List listByDimensionValue = salaryStatisticsReportData.getListByDimensionValue(); if(CollectionUtils.isEmpty(listByDimensionValue)){ throw new SalaryRunTimeException("该维度值中无数据!"); @@ -412,9 +425,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List salaryAcctEmployeePOList = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), listByDimensionValue); // 获取此分页的核算人员 - List salaryAcctEmployeeIds = salaryAcctEmployeePOList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + List pageSalaryAcctEmployeeIds = salaryAcctEmployeePOList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); // 获取核算结果 - List salaryAcctResultValues = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmployeeIds, salaryItemIds); + List salaryAcctResultValues = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(pageSalaryAcctEmployeeIds, salaryItemIds); // 封装核算结果 Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); Map> map = new HashMap<>(); From d90a1977cebbaee38179ec00f66e86afd46676b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 20 Jun 2023 15:58:03 +0800 Subject: [PATCH 192/245] =?UTF-8?q?fix=E6=95=B0=E6=8D=AE=E9=87=87=E9=9B=86?= =?UTF-8?q?-=E5=BE=80=E6=9C=9F=E7=B4=AF=E8=AE=A1=E6=83=85=E5=86=B5?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=85=A8=E9=83=A8=E5=AD=97=E6=AE=B5=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E6=97=B6=E6=98=BE=E7=A4=BAnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AddUpSituationServiceImpl.java | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index cd232cf8f..e4965928c 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -8,7 +8,6 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.AddUpSituationBiz; -import com.engine.salary.biz.EmployBiz; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -300,25 +299,25 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation cellList.add(Util.null2String(dto.getMobile())); cellList.add(Util.null2String(dto.getJobNum())); cellList.add(Util.null2String(dto.getIdNo())); - cellList.add(dto.getHiredate() == null ? "" : dto.getHiredate()); - cellList.add(String.valueOf(dto.getAddUpIncome())); - cellList.add(String.valueOf(dto.getAddUpSubtraction())); - cellList.add(String.valueOf(dto.getAddUpSocialSecurityTotal())); - cellList.add(String.valueOf(dto.getAddUpAccumulationFundTotal())); - cellList.add(String.valueOf(dto.getAddUpChildEducation())); - cellList.add(String.valueOf(dto.getAddUpContinuingEducation())); - cellList.add(String.valueOf(dto.getAddUpHousingLoanInterest())); - cellList.add(String.valueOf(dto.getAddUpHousingRent())); - cellList.add(String.valueOf(dto.getAddUpSupportElderly())); - cellList.add(String.valueOf(dto.getAddUpIllnessMedical())); - cellList.add(String.valueOf(dto.getAddUpEnterpriseAndOther())); - cellList.add(String.valueOf(dto.getAddUpOtherDeduction())); - cellList.add(String.valueOf(dto.getAddUpTaxExemptIncome())); - cellList.add(String.valueOf(dto.getAddUpAllowedDonation())); - cellList.add(String.valueOf(dto.getAddUpTaxSavings())); - cellList.add(String.valueOf(dto.getAddUpAdvanceTax())); - cellList.add(String.valueOf(dto.getAddUpInfantCare())); - cellList.add(String.valueOf(dto.getAddUpPrivatePension())); + cellList.add(Util.null2String(dto.getHiredate())); + cellList.add(Util.null2String(dto.getAddUpIncome())); + cellList.add(Util.null2String(dto.getAddUpSubtraction())); + cellList.add(Util.null2String(dto.getAddUpSocialSecurityTotal())); + cellList.add(Util.null2String(dto.getAddUpAccumulationFundTotal())); + cellList.add(Util.null2String(dto.getAddUpChildEducation())); + cellList.add(Util.null2String(dto.getAddUpContinuingEducation())); + cellList.add(Util.null2String(dto.getAddUpHousingLoanInterest())); + cellList.add(Util.null2String(dto.getAddUpHousingRent())); + cellList.add(Util.null2String(dto.getAddUpSupportElderly())); + cellList.add(Util.null2String(dto.getAddUpIllnessMedical())); + cellList.add(Util.null2String(dto.getAddUpEnterpriseAndOther())); + cellList.add(Util.null2String(dto.getAddUpOtherDeduction())); + cellList.add(Util.null2String(dto.getAddUpTaxExemptIncome())); + cellList.add(Util.null2String(dto.getAddUpAllowedDonation())); + cellList.add(Util.null2String(dto.getAddUpTaxSavings())); + cellList.add(Util.null2String(dto.getAddUpAdvanceTax())); + cellList.add(Util.null2String(dto.getAddUpInfantCare())); + cellList.add(Util.null2String(dto.getAddUpPrivatePension())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); From 3708aea0de07b04dd7b4abbbf8584b33a6c564eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 20 Jun 2023 17:00:14 +0800 Subject: [PATCH 193/245] =?UTF-8?q?=E8=80=83=E5=8B=A4=E5=BC=95=E7=94=A8-?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=AD=97=E6=AE=B5=E6=A0=B9=E6=8D=AE=E5=BD=93?= =?UTF-8?q?=E6=97=B6=E5=BC=95=E7=94=A8=E6=83=85=E5=86=B5=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wrapper/AttendQuoteDataWrapper.java | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java b/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java index 530625d35..d1c5f54e3 100644 --- a/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java +++ b/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java @@ -15,12 +15,11 @@ import com.engine.salary.util.page.Column; import com.engine.salary.util.page.PageInfo; import org.apache.commons.collections.CollectionUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.general.Util; import weaver.hrm.User; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * 考勤数据 @@ -69,6 +68,16 @@ public class AttendQuoteDataWrapper extends Service { // 获取最终结果 List> listMaps = getAttendQuoteDataService(user).getListMaps(attendQuoteDataBases); + //当前引用的值 + List effectiveColumns = listMaps.stream() + .map(Map::keySet) + .max(Comparator.comparingInt(Set::size)) + .orElse(new HashSet<>()) + .stream() + .map(key -> key.split("_")[0]) + .collect(Collectors.toList()); + + PageInfo> listPage = new PageInfo<>(listMaps); listPage.setPageNum(page.getPageNum()); listPage.setPageSize(page.getPageSize()); @@ -79,11 +88,15 @@ public class AttendQuoteDataWrapper extends Service { columns.add(Column.builder().title("手机号").dataIndex("mobile").key("mobile").display(Boolean.TRUE).build()); columns.add(Column.builder().title("工号").dataIndex("jobNum").key("jobNum").display(Boolean.TRUE).build()); if (CollectionUtils.isNotEmpty(listMaps)) { - for (AttendQuoteFieldPO attendQuoteField : attendQuoteFields) { - columns.add(Column.builder().title(attendQuoteField.getFieldName()) - .dataIndex(attendQuoteField.getId() + "_attendQuoteData") - .key(attendQuoteField.getId() + "_attendQuoteData").display(Boolean.TRUE).build()); - } + attendQuoteFields.stream() + .filter(attendQuoteField->effectiveColumns.contains(Util.null2String(attendQuoteField.getId()))) + .forEach(attendQuoteField -> { + columns.add(Column.builder().title(attendQuoteField.getFieldName()) + .dataIndex(attendQuoteField.getId() + "_attendQuoteData") + .key(attendQuoteField.getId() + "_attendQuoteData").display(Boolean.TRUE).build()); + } + ); + } listPage.setColumns(columns); // 表格表头 From e7edb9040c19670d4ff927d45fa55184c3449ad3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 20 Jun 2023 17:27:18 +0800 Subject: [PATCH 194/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E5=88=86?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/SalaryAcctResultMapper.java | 1 + .../salaryacct/SalaryAcctResultMapper.xml | 11 +++++++ .../SalaryStatisticsReportServiceImpl.java | 5 ++++ .../service/SalaryAcctResultService.java | 2 ++ .../impl/SalaryAcctResultServiceImpl.java | 29 ++++++++++++++++--- 5 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java index 0ae008b62..aaed0c4c9 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java @@ -133,4 +133,5 @@ public interface SalaryAcctResultMapper { */ void batchUpdateOriginResultValue(@Param("collection") List subSalaryAcctResultValues); + List getAcctEmpIsExist(@Param("empIds")List empIds); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml index afd3f4a83..8e5696f95 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml @@ -436,6 +436,17 @@ ) + INSERT INTO hrsa_salary_acct_result( salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index fbf0cd1a4..b471cec6f 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -406,11 +406,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List salaryAcctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); if( NumberUtils.isCreatable(dimension.getDimCode()) ){ List salaryAcctResultValues = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmployeeIds,Collections.singleton(Long.valueOf(dimension.getDimCode()))); + List finalSalaryAcctEmpIds = getSalaryAcctResultService(user).listAcctEmpIdByAcctEmpId(salaryAcctEmployeeIds); Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); salaryAcctEmpResultMap.forEach((k, v) -> { Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), p -> Util.null2o(p.getResultValue()), (key1, key2) -> key2)); resultMap.put(k, collect); }); + salaryAcctEmployeeIds.stream().forEach(id -> { + if(!resultMap.containsKey(id) && finalSalaryAcctEmpIds.contains(id)) + resultMap.put(id,Collections.emptyMap()); + }); } diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index 452339eef..a2af68ac5 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -198,4 +198,6 @@ public interface SalaryAcctResultService { * @date 2022/12/26 22:24 */ List listByAcctEmployeeIdsAndSalaryItemIds(Collection salaryAcctEmpIds, Collection salaryItemIds); + + List listAcctEmpIdByAcctEmpId(List salaryAcctEmployeeIds); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 2c04d6137..1465a9c5e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -962,11 +962,19 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public List listByAcctEmployeeIdsAndSalaryItemIds(Collection salaryAcctEmployeeIds, Collection salaryItemIds) { - SalaryAcctResultPO build = SalaryAcctResultPO.builder().salaryAcctEmpIds(salaryAcctEmployeeIds).salaryItemIds(salaryItemIds).build(); - List list = getSalaryAcctResultMapper().listSome(build); + if(CollectionUtils.isEmpty(salaryAcctEmployeeIds)){ + return Collections.emptyList(); + } + List> partition = Lists.partition((List)salaryAcctEmployeeIds, 200); + List result = new ArrayList<>(); + partition.forEach(empIds -> { + SalaryAcctResultPO build = SalaryAcctResultPO.builder().salaryAcctEmpIds(empIds).salaryItemIds(salaryItemIds).build(); + result.addAll(getSalaryAcctResultMapper().listSome(build)); + }); + // 数据解密 - encryptUtil.decryptList(list, SalaryAcctResultPO.class); - return list; + encryptUtil.decryptList(result, SalaryAcctResultPO.class); + return result; } @Override @@ -978,6 +986,19 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } } + @Override + public List listAcctEmpIdByAcctEmpId(List salaryAcctEmployeeIds) { + if(CollectionUtils.isEmpty(salaryAcctEmployeeIds)){ + return Collections.emptyList(); + } + List> partition = Lists.partition((List)salaryAcctEmployeeIds, 1000); + List result = new ArrayList<>(); + partition.forEach(empIds -> { + result.addAll(getSalaryAcctResultMapper().getAcctEmpIsExist(empIds)); + }); + return result; + } + private Set canLockSalaryItemIds(Long salarySobId) { // 值可以锁定的薪资项目 Set salaryItemIds = Sets.newHashSet(); From 1bb9b939f00836eda22f7dd484cfc0c3bf19d2bc Mon Sep 17 00:00:00 2001 From: sy Date: Sun, 25 Jun 2023 13:50:20 +0800 Subject: [PATCH 195/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-pg?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E9=80=82=E9=85=8D=EF=BC=8C=E8=96=AA?= =?UTF-8?q?=E8=B5=84=E6=A1=A3=E6=A1=88=E5=BE=85=E5=AE=9A=E8=96=AA=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/archive/SalaryArchiveMapper.xml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index 35524924f..cc03c82f0 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -449,6 +449,26 @@ + + + UPDATE hrsa_salary_archive + + + run_status=#{item.runStatus}, + + + pay_start_date=#{item.payStartDate}, + + + pay_end_date=#{item.payEndDate}, + + + WHERE id = #{item.id} AND delete_type = 0 + + + + + @@ -219,9 +219,9 @@ LEFT JOIN( SELECT other.payment_organization, other.employee_id, other.other_end_time, other.other_scheme_id FROM hrsa_other_archives other WHERE other.delete_type = 0 )other ON t.employee_id = other.employee_id AND t.payment_organization = other.payment_organization WHERE t.delete_type = 0 AND t.run_status = '2' - AND (social.social_scheme_id is null or (social.social_end_time is not null and social.social_end_time ]]> ' ' and social.social_end_time #{today})) - AND (fund.fund_scheme_id is null or (fund.fund_end_time is not null and fund.fund_end_time ]]> ' ' and fund.fund_end_time #{today})) - AND (other.other_scheme_id is null or (other.other_end_time is not null and other.other_end_time ]]> ' ' and other.other_end_time #{today})) + AND (social.social_scheme_id is null or (social.social_end_time is not null and social.social_end_time #{today})) + AND (fund.fund_scheme_id is null or (fund.fund_end_time is not null and fund.fund_end_time #{today})) + AND (other.other_scheme_id is null or (other.other_end_time is not null and other.other_end_time #{today})) SELECT From cbcd53d92d8f937994a9c9c06b5ebc2c001528ff Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 26 Jun 2023 10:56:03 +0800 Subject: [PATCH 199/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E5=88=97=E8=A1=A8=E8=BF=94=E5=9B=9E=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6=E7=8A=B6=E6=80=81=E5=80=BC=E8=BF=94=E5=9B=9E=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/siaccount/bo/InsuranceAccountBO.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java index 99ab5ec9d..8aa28ab09 100644 --- a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java +++ b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java @@ -54,7 +54,8 @@ public class InsuranceAccountBO { .id(e.getId()) .accountant(e.getAccountant()) .billMonth(e.getBillMonth()) - .billStatus(queryLabelId(e.getBillStatus()).getDefaultLabel()) +// .billStatus(queryLabelId(e.getBillStatus()).getDefaultLabel()) + .billStatus(e.getBillStatus().toString()) .fundNum(e.getFundNum()) .fundPay(SalaryEntityUtil.thousandthConvert(e.getFundPay())) .lastTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(e.getUpdateTime())) From ca248ded98768b13123584bf00b5d0c7818d9cfa Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 26 Jun 2023 13:32:14 +0800 Subject: [PATCH 200/245] =?UTF-8?q?=E5=8F=91=E9=80=81=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 392c0cf40..c298b33fd 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -267,7 +267,7 @@ public class SalaryBillBO { emailContent.append(""); if (StringUtils.isNotBlank(receivers)) { // MessageUtil.sendEmail(receivers, title, emailContent.toString()); - EmailWorkRunnable.threadModeReminder(receivers, title, emailContent); + EmailWorkRunnable.threadModeReminder(receivers, title, emailContent.toString()); } } From f5ce0865350dac44ca1d3271ef91842809b50db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 26 Jun 2023 15:48:25 +0800 Subject: [PATCH 201/245] =?UTF-8?q?=E4=B8=8A=E7=BA=BF=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sql/薪酬还原脚本-sqlserver.sql | 8 +- resource/sql/薪酬还原脚本.sql | 8 +- resource/sqlupgrade/DM/sql202205100201.sql | 455 +++ resource/sqlupgrade/DM/sql202205100402.sql | 269 ++ resource/sqlupgrade/DM/sql202205130903.sql | 2410 ++++++++++++++++ resource/sqlupgrade/DM/sql202205200203.sql | 12 + resource/sqlupgrade/DM/sql202205310203.sql | 47 + resource/sqlupgrade/DM/sql202206071403.sql | 131 + resource/sqlupgrade/DM/sql202206090403.sql | 9 + resource/sqlupgrade/DM/sql202206141003.sql | 44 + resource/sqlupgrade/DM/sql202206160500.sql | 41 + resource/sqlupgrade/DM/sql202206230403.sql | 29 + resource/sqlupgrade/DM/sql202207110803.sql | 22 + resource/sqlupgrade/DM/sql202207120303.sql | 14 + resource/sqlupgrade/DM/sql202207210203.sql | 6 + resource/sqlupgrade/DM/sql202208051103.sql | 137 + resource/sqlupgrade/DM/sql202208080403.sql | 53 + resource/sqlupgrade/DM/sql202208240403.sql | 5 + resource/sqlupgrade/DM/sql202208240503.sql | 16 + resource/sqlupgrade/DM/sql202210080203.sql | 94 + resource/sqlupgrade/DM/sql202210080403.sql | 6 + resource/sqlupgrade/DM/sql202210170203.sql | 30 + resource/sqlupgrade/DM/sql202210170303.sql | 2 + resource/sqlupgrade/DM/sql202211090103.sql | 41 + resource/sqlupgrade/DM/sql202211090301.sql | 119 + resource/sqlupgrade/DM/sql202211090402.sql | 59 + resource/sqlupgrade/DM/sql202211170503.sql | 8 + resource/sqlupgrade/DM/sql202212080903.sql | 69 + resource/sqlupgrade/DM/sql202212081003.sql | 60 + resource/sqlupgrade/DM/sql202212230103.sql | 48 + resource/sqlupgrade/DM/sql202301310403.sql | 92 + resource/sqlupgrade/DM/sql202302060801.sql | 47 + resource/sqlupgrade/DM/sql202302060902.sql | 44 + resource/sqlupgrade/DM/sql202302090303.sql | 8 + resource/sqlupgrade/DM/sql202304040503.sql | 66 + resource/sqlupgrade/DM/sql202304260103.sql | 2 + resource/sqlupgrade/DM/sql202304270203.sql | 244 ++ resource/sqlupgrade/DM/sql202304270303.sql | 11 + resource/sqlupgrade/DM/sql202304270501.sql | 23 + resource/sqlupgrade/DM/sql202305050302.sql | 14 + resource/sqlupgrade/DM/sql202305170903.sql | 14 + resource/sqlupgrade/DM/sql202306020403.sql | 2 + resource/sqlupgrade/DM/sql202306020603.sql | 7 + resource/sqlupgrade/DM/sql202306080103.sql | 2 + resource/sqlupgrade/DM/sql202306200203.sql | 5 + resource/sqlupgrade/JC/sql202205100201.sql | 455 +++ resource/sqlupgrade/JC/sql202205100402.sql | 269 ++ resource/sqlupgrade/JC/sql202205130903.sql | 2440 ++++++++++++++++ resource/sqlupgrade/JC/sql202205200203.sql | 12 + resource/sqlupgrade/JC/sql202205310203.sql | 47 + resource/sqlupgrade/JC/sql202206071403.sql | 131 + resource/sqlupgrade/JC/sql202206090403.sql | 9 + resource/sqlupgrade/JC/sql202206141003.sql | 44 + resource/sqlupgrade/JC/sql202206160500.sql | 41 + resource/sqlupgrade/JC/sql202206230403.sql | 29 + resource/sqlupgrade/JC/sql202207110803.sql | 22 + resource/sqlupgrade/JC/sql202207120303.sql | 14 + resource/sqlupgrade/JC/sql202207210203.sql | 6 + resource/sqlupgrade/JC/sql202208051103.sql | 137 + resource/sqlupgrade/JC/sql202208080403.sql | 53 + resource/sqlupgrade/JC/sql202208240403.sql | 5 + resource/sqlupgrade/JC/sql202208240503.sql | 16 + resource/sqlupgrade/JC/sql202209010603.sql | 5 + resource/sqlupgrade/JC/sql202209050303.sql | 5 + resource/sqlupgrade/JC/sql202210080203.sql | 94 + resource/sqlupgrade/JC/sql202210080403.sql | 6 + resource/sqlupgrade/JC/sql202210170203.sql | 30 + resource/sqlupgrade/JC/sql202210170303.sql | 2 + resource/sqlupgrade/JC/sql202211090103.sql | 41 + resource/sqlupgrade/JC/sql202211090301.sql | 119 + resource/sqlupgrade/JC/sql202211090402.sql | 59 + resource/sqlupgrade/JC/sql202211170503.sql | 8 + resource/sqlupgrade/JC/sql202212080903.sql | 69 + resource/sqlupgrade/JC/sql202212081003.sql | 60 + resource/sqlupgrade/JC/sql202212230103.sql | 48 + resource/sqlupgrade/JC/sql202301310403.sql | 92 + resource/sqlupgrade/JC/sql202302060801.sql | 47 + resource/sqlupgrade/JC/sql202302060902.sql | 44 + resource/sqlupgrade/JC/sql202302090303.sql | 8 + resource/sqlupgrade/JC/sql202304040503.sql | 66 + resource/sqlupgrade/JC/sql202304260103.sql | 2 + resource/sqlupgrade/JC/sql202304270203.sql | 244 ++ resource/sqlupgrade/JC/sql202304270303.sql | 11 + resource/sqlupgrade/JC/sql202304270501.sql | 23 + resource/sqlupgrade/JC/sql202305050302.sql | 14 + resource/sqlupgrade/JC/sql202305170903.sql | 14 + resource/sqlupgrade/JC/sql202306020403.sql | 2 + resource/sqlupgrade/JC/sql202306020603.sql | 7 + resource/sqlupgrade/JC/sql202306080103.sql | 2 + resource/sqlupgrade/JC/sql202306200203.sql | 5 + resource/sqlupgrade/Mysql/sql202205100201.sql | 340 +++ resource/sqlupgrade/Mysql/sql202205100402.sql | 197 ++ resource/sqlupgrade/Mysql/sql202205130903.sql | 1464 ++++++++++ resource/sqlupgrade/Mysql/sql202205200203.sql | 9 + resource/sqlupgrade/Mysql/sql202205310203.sql | 26 + resource/sqlupgrade/Mysql/sql202206071403.sql | 141 + resource/sqlupgrade/Mysql/sql202206090403.sql | 3 + resource/sqlupgrade/Mysql/sql202206141003.sql | 21 + resource/sqlupgrade/Mysql/sql202206160500.sql | 30 + resource/sqlupgrade/Mysql/sql202206230403.sql | 15 + resource/sqlupgrade/Mysql/sql202207110803.sql | 22 + resource/sqlupgrade/Mysql/sql202207120303.sql | 14 + resource/sqlupgrade/Mysql/sql202207210203.sql | 4 + resource/sqlupgrade/Mysql/sql202208051103.sql | 97 + resource/sqlupgrade/Mysql/sql202208080403.sql | 40 + resource/sqlupgrade/Mysql/sql202208240403.sql | 3 + resource/sqlupgrade/Mysql/sql202208240503.sql | 13 + resource/sqlupgrade/Mysql/sql202210080203.sql | 93 + resource/sqlupgrade/Mysql/sql202210080403.sql | 4 + resource/sqlupgrade/Mysql/sql202210170203.sql | 29 + resource/sqlupgrade/Mysql/sql202210170303.sql | 3 + resource/sqlupgrade/Mysql/sql202211090103.sql | 26 + resource/sqlupgrade/Mysql/sql202211090301.sql | 86 + resource/sqlupgrade/Mysql/sql202211090402.sql | 43 + resource/sqlupgrade/Mysql/sql202211170503.sql | 5 + resource/sqlupgrade/Mysql/sql202212080903.sql | 70 + resource/sqlupgrade/Mysql/sql202212081003.sql | 28 + resource/sqlupgrade/Mysql/sql202212230103.sql | 29 + resource/sqlupgrade/Mysql/sql202301310403.sql | 41 + resource/sqlupgrade/Mysql/sql202302060801.sql | 34 + resource/sqlupgrade/Mysql/sql202302060902.sql | 34 + resource/sqlupgrade/Mysql/sql202302090303.sql | 3 + resource/sqlupgrade/Mysql/sql202302200403.sql | 1 + resource/sqlupgrade/Mysql/sql202304040503.sql | 33 + resource/sqlupgrade/Mysql/sql202304260103.sql | 1 + resource/sqlupgrade/Mysql/sql202304270203.sql | 244 ++ resource/sqlupgrade/Mysql/sql202304270303.sql | 7 + resource/sqlupgrade/Mysql/sql202304270501.sql | 16 + resource/sqlupgrade/Mysql/sql202305050302.sql | 10 + resource/sqlupgrade/Mysql/sql202305170903.sql | 14 + resource/sqlupgrade/Mysql/sql202306020403.sql | 1 + resource/sqlupgrade/Mysql/sql202306020603.sql | 3 + resource/sqlupgrade/Mysql/sql202306080103.sql | 1 + resource/sqlupgrade/Mysql/sql202306200203.sql | 4 + .../sqlupgrade/Oracle/sql202205100201.sql | 340 +++ .../sqlupgrade/Oracle/sql202205100402.sql | 197 ++ .../sqlupgrade/Oracle/sql202205130903.sql | 2370 +++++++++++++++ .../sqlupgrade/Oracle/sql202205200203.sql | 11 + .../sqlupgrade/Oracle/sql202205310203.sql | 39 + .../sqlupgrade/Oracle/sql202206071403.sql | 134 + .../sqlupgrade/Oracle/sql202206090403.sql | 9 + .../sqlupgrade/Oracle/sql202206141003.sql | 36 + .../sqlupgrade/Oracle/sql202206160500.sql | 30 + .../sqlupgrade/Oracle/sql202206230403.sql | 23 + .../sqlupgrade/Oracle/sql202207110803.sql | 22 + .../sqlupgrade/Oracle/sql202207120303.sql | 14 + .../sqlupgrade/Oracle/sql202207210203.sql | 6 + .../sqlupgrade/Oracle/sql202208051103.sql | 96 + .../sqlupgrade/Oracle/sql202208080403.sql | 41 + .../sqlupgrade/Oracle/sql202208240403.sql | 5 + .../sqlupgrade/Oracle/sql202208240503.sql | 15 + .../sqlupgrade/Oracle/sql202209010603.sql | 5 + .../sqlupgrade/Oracle/sql202209050303.sql | 5 + .../sqlupgrade/Oracle/sql202210080203.sql | 94 + .../sqlupgrade/Oracle/sql202210080403.sql | 6 + .../sqlupgrade/Oracle/sql202210170203.sql | 30 + .../sqlupgrade/Oracle/sql202210170303.sql | 2 + .../sqlupgrade/Oracle/sql202211090103.sql | 38 + .../sqlupgrade/Oracle/sql202211090301.sql | 86 + .../sqlupgrade/Oracle/sql202211090402.sql | 43 + .../sqlupgrade/Oracle/sql202211170503.sql | 8 + .../sqlupgrade/Oracle/sql202212080903.sql | 69 + .../sqlupgrade/Oracle/sql202212081003.sql | 56 + .../sqlupgrade/Oracle/sql202212230103.sql | 44 + .../sqlupgrade/Oracle/sql202301310403.sql | 72 + .../sqlupgrade/Oracle/sql202302060801.sql | 34 + .../sqlupgrade/Oracle/sql202302060902.sql | 33 + .../sqlupgrade/Oracle/sql202302090303.sql | 8 + .../sqlupgrade/Oracle/sql202304040503.sql | 56 + .../sqlupgrade/Oracle/sql202304260103.sql | 2 + .../sqlupgrade/Oracle/sql202304270203.sql | 244 ++ .../sqlupgrade/Oracle/sql202304270303.sql | 11 + .../sqlupgrade/Oracle/sql202304270501.sql | 16 + .../sqlupgrade/Oracle/sql202305050302.sql | 10 + .../sqlupgrade/Oracle/sql202305170903.sql | 14 + .../sqlupgrade/Oracle/sql202306020403.sql | 2 + .../sqlupgrade/Oracle/sql202306020603.sql | 7 + .../sqlupgrade/Oracle/sql202306080103.sql | 2 + .../sqlupgrade/Oracle/sql202306200203.sql | 4 + .../sqlupgrade/SQLServer/sql202205100201.sql | 340 +++ .../sqlupgrade/SQLServer/sql202205100402.sql | 197 ++ .../sqlupgrade/SQLServer/sql202205130903.sql | 2548 +++++++++++++++++ .../sqlupgrade/SQLServer/sql202205200203.sql | 11 + .../sqlupgrade/SQLServer/sql202205310203.sql | 37 + .../sqlupgrade/SQLServer/sql202206071403.sql | 272 ++ .../sqlupgrade/SQLServer/sql202206090403.sql | 5 + .../sqlupgrade/SQLServer/sql202206141003.sql | 36 + .../sqlupgrade/SQLServer/sql202206160500.sql | 30 + .../sqlupgrade/SQLServer/sql202206230403.sql | 23 + .../sqlupgrade/SQLServer/sql202207110803.sql | 59 + .../sqlupgrade/SQLServer/sql202207120303.sql | 30 + .../sqlupgrade/SQLServer/sql202207210203.sql | 5 + .../sqlupgrade/SQLServer/sql202208051103.sql | 96 + .../sqlupgrade/SQLServer/sql202208080403.sql | 40 + .../sqlupgrade/SQLServer/sql202208240403.sql | 5 + .../sqlupgrade/SQLServer/sql202208240503.sql | 36 + .../sqlupgrade/SQLServer/sql202210080203.sql | 55 + .../sqlupgrade/SQLServer/sql202210080403.sql | 5 + .../sqlupgrade/SQLServer/sql202210170203.sql | 31 + .../sqlupgrade/SQLServer/sql202210170303.sql | 5 + .../sqlupgrade/SQLServer/sql202211090103.sql | 20 + .../sqlupgrade/SQLServer/sql202211090301.sql | 86 + .../sqlupgrade/SQLServer/sql202211090402.sql | 43 + .../sqlupgrade/SQLServer/sql202211170503.sql | 8 + .../sqlupgrade/SQLServer/sql202212080903.sql | 71 + .../sqlupgrade/SQLServer/sql202212081003.sql | 30 + .../sqlupgrade/SQLServer/sql202212230103.sql | 49 + .../sqlupgrade/SQLServer/sql202301310403.sql | 72 + .../sqlupgrade/SQLServer/sql202302060801.sql | 34 + .../sqlupgrade/SQLServer/sql202302060902.sql | 34 + .../sqlupgrade/SQLServer/sql202302090303.sql | 9 + .../sqlupgrade/SQLServer/sql202302200403.sql | 2 + .../sqlupgrade/SQLServer/sql202304040503.sql | 52 + .../sqlupgrade/SQLServer/sql202304260103.sql | 2 + .../sqlupgrade/SQLServer/sql202304270203.sql | 244 ++ .../sqlupgrade/SQLServer/sql202304270303.sql | 13 + .../sqlupgrade/SQLServer/sql202304270501.sql | 16 + .../sqlupgrade/SQLServer/sql202305050302.sql | 10 + .../sqlupgrade/SQLServer/sql202305170903.sql | 14 + .../sqlupgrade/SQLServer/sql202306020403.sql | 2 + .../sqlupgrade/SQLServer/sql202306020603.sql | 5 + .../sqlupgrade/SQLServer/sql202306080103.sql | 2 + .../sqlupgrade/SQLServer/sql202306200203.sql | 5 + 223 files changed, 22062 insertions(+), 8 deletions(-) create mode 100644 resource/sqlupgrade/DM/sql202205100201.sql create mode 100644 resource/sqlupgrade/DM/sql202205100402.sql create mode 100644 resource/sqlupgrade/DM/sql202205130903.sql create mode 100644 resource/sqlupgrade/DM/sql202205200203.sql create mode 100644 resource/sqlupgrade/DM/sql202205310203.sql create mode 100644 resource/sqlupgrade/DM/sql202206071403.sql create mode 100644 resource/sqlupgrade/DM/sql202206090403.sql create mode 100644 resource/sqlupgrade/DM/sql202206141003.sql create mode 100644 resource/sqlupgrade/DM/sql202206160500.sql create mode 100644 resource/sqlupgrade/DM/sql202206230403.sql create mode 100644 resource/sqlupgrade/DM/sql202207110803.sql create mode 100644 resource/sqlupgrade/DM/sql202207120303.sql create mode 100644 resource/sqlupgrade/DM/sql202207210203.sql create mode 100644 resource/sqlupgrade/DM/sql202208051103.sql create mode 100644 resource/sqlupgrade/DM/sql202208080403.sql create mode 100644 resource/sqlupgrade/DM/sql202208240403.sql create mode 100644 resource/sqlupgrade/DM/sql202208240503.sql create mode 100644 resource/sqlupgrade/DM/sql202210080203.sql create mode 100644 resource/sqlupgrade/DM/sql202210080403.sql create mode 100644 resource/sqlupgrade/DM/sql202210170203.sql create mode 100644 resource/sqlupgrade/DM/sql202210170303.sql create mode 100644 resource/sqlupgrade/DM/sql202211090103.sql create mode 100644 resource/sqlupgrade/DM/sql202211090301.sql create mode 100644 resource/sqlupgrade/DM/sql202211090402.sql create mode 100644 resource/sqlupgrade/DM/sql202211170503.sql create mode 100644 resource/sqlupgrade/DM/sql202212080903.sql create mode 100644 resource/sqlupgrade/DM/sql202212081003.sql create mode 100644 resource/sqlupgrade/DM/sql202212230103.sql create mode 100644 resource/sqlupgrade/DM/sql202301310403.sql create mode 100644 resource/sqlupgrade/DM/sql202302060801.sql create mode 100644 resource/sqlupgrade/DM/sql202302060902.sql create mode 100644 resource/sqlupgrade/DM/sql202302090303.sql create mode 100644 resource/sqlupgrade/DM/sql202304040503.sql create mode 100644 resource/sqlupgrade/DM/sql202304260103.sql create mode 100644 resource/sqlupgrade/DM/sql202304270203.sql create mode 100644 resource/sqlupgrade/DM/sql202304270303.sql create mode 100644 resource/sqlupgrade/DM/sql202304270501.sql create mode 100644 resource/sqlupgrade/DM/sql202305050302.sql create mode 100644 resource/sqlupgrade/DM/sql202305170903.sql create mode 100644 resource/sqlupgrade/DM/sql202306020403.sql create mode 100644 resource/sqlupgrade/DM/sql202306020603.sql create mode 100644 resource/sqlupgrade/DM/sql202306080103.sql create mode 100644 resource/sqlupgrade/DM/sql202306200203.sql create mode 100644 resource/sqlupgrade/JC/sql202205100201.sql create mode 100644 resource/sqlupgrade/JC/sql202205100402.sql create mode 100644 resource/sqlupgrade/JC/sql202205130903.sql create mode 100644 resource/sqlupgrade/JC/sql202205200203.sql create mode 100644 resource/sqlupgrade/JC/sql202205310203.sql create mode 100644 resource/sqlupgrade/JC/sql202206071403.sql create mode 100644 resource/sqlupgrade/JC/sql202206090403.sql create mode 100644 resource/sqlupgrade/JC/sql202206141003.sql create mode 100644 resource/sqlupgrade/JC/sql202206160500.sql create mode 100644 resource/sqlupgrade/JC/sql202206230403.sql create mode 100644 resource/sqlupgrade/JC/sql202207110803.sql create mode 100644 resource/sqlupgrade/JC/sql202207120303.sql create mode 100644 resource/sqlupgrade/JC/sql202207210203.sql create mode 100644 resource/sqlupgrade/JC/sql202208051103.sql create mode 100644 resource/sqlupgrade/JC/sql202208080403.sql create mode 100644 resource/sqlupgrade/JC/sql202208240403.sql create mode 100644 resource/sqlupgrade/JC/sql202208240503.sql create mode 100644 resource/sqlupgrade/JC/sql202209010603.sql create mode 100644 resource/sqlupgrade/JC/sql202209050303.sql create mode 100644 resource/sqlupgrade/JC/sql202210080203.sql create mode 100644 resource/sqlupgrade/JC/sql202210080403.sql create mode 100644 resource/sqlupgrade/JC/sql202210170203.sql create mode 100644 resource/sqlupgrade/JC/sql202210170303.sql create mode 100644 resource/sqlupgrade/JC/sql202211090103.sql create mode 100644 resource/sqlupgrade/JC/sql202211090301.sql create mode 100644 resource/sqlupgrade/JC/sql202211090402.sql create mode 100644 resource/sqlupgrade/JC/sql202211170503.sql create mode 100644 resource/sqlupgrade/JC/sql202212080903.sql create mode 100644 resource/sqlupgrade/JC/sql202212081003.sql create mode 100644 resource/sqlupgrade/JC/sql202212230103.sql create mode 100644 resource/sqlupgrade/JC/sql202301310403.sql create mode 100644 resource/sqlupgrade/JC/sql202302060801.sql create mode 100644 resource/sqlupgrade/JC/sql202302060902.sql create mode 100644 resource/sqlupgrade/JC/sql202302090303.sql create mode 100644 resource/sqlupgrade/JC/sql202304040503.sql create mode 100644 resource/sqlupgrade/JC/sql202304260103.sql create mode 100644 resource/sqlupgrade/JC/sql202304270203.sql create mode 100644 resource/sqlupgrade/JC/sql202304270303.sql create mode 100644 resource/sqlupgrade/JC/sql202304270501.sql create mode 100644 resource/sqlupgrade/JC/sql202305050302.sql create mode 100644 resource/sqlupgrade/JC/sql202305170903.sql create mode 100644 resource/sqlupgrade/JC/sql202306020403.sql create mode 100644 resource/sqlupgrade/JC/sql202306020603.sql create mode 100644 resource/sqlupgrade/JC/sql202306080103.sql create mode 100644 resource/sqlupgrade/JC/sql202306200203.sql create mode 100644 resource/sqlupgrade/Mysql/sql202205100201.sql create mode 100644 resource/sqlupgrade/Mysql/sql202205100402.sql create mode 100644 resource/sqlupgrade/Mysql/sql202205130903.sql create mode 100644 resource/sqlupgrade/Mysql/sql202205200203.sql create mode 100644 resource/sqlupgrade/Mysql/sql202205310203.sql create mode 100644 resource/sqlupgrade/Mysql/sql202206071403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202206090403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202206141003.sql create mode 100644 resource/sqlupgrade/Mysql/sql202206160500.sql create mode 100644 resource/sqlupgrade/Mysql/sql202206230403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202207110803.sql create mode 100644 resource/sqlupgrade/Mysql/sql202207120303.sql create mode 100644 resource/sqlupgrade/Mysql/sql202207210203.sql create mode 100644 resource/sqlupgrade/Mysql/sql202208051103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202208080403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202208240403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202208240503.sql create mode 100644 resource/sqlupgrade/Mysql/sql202210080203.sql create mode 100644 resource/sqlupgrade/Mysql/sql202210080403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202210170203.sql create mode 100644 resource/sqlupgrade/Mysql/sql202210170303.sql create mode 100644 resource/sqlupgrade/Mysql/sql202211090103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202211090301.sql create mode 100644 resource/sqlupgrade/Mysql/sql202211090402.sql create mode 100644 resource/sqlupgrade/Mysql/sql202211170503.sql create mode 100644 resource/sqlupgrade/Mysql/sql202212080903.sql create mode 100644 resource/sqlupgrade/Mysql/sql202212081003.sql create mode 100644 resource/sqlupgrade/Mysql/sql202212230103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202301310403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202302060801.sql create mode 100644 resource/sqlupgrade/Mysql/sql202302060902.sql create mode 100644 resource/sqlupgrade/Mysql/sql202302090303.sql create mode 100644 resource/sqlupgrade/Mysql/sql202302200403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202304040503.sql create mode 100644 resource/sqlupgrade/Mysql/sql202304260103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202304270203.sql create mode 100644 resource/sqlupgrade/Mysql/sql202304270303.sql create mode 100644 resource/sqlupgrade/Mysql/sql202304270501.sql create mode 100644 resource/sqlupgrade/Mysql/sql202305050302.sql create mode 100644 resource/sqlupgrade/Mysql/sql202305170903.sql create mode 100644 resource/sqlupgrade/Mysql/sql202306020403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202306020603.sql create mode 100644 resource/sqlupgrade/Mysql/sql202306080103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202306200203.sql create mode 100644 resource/sqlupgrade/Oracle/sql202205100201.sql create mode 100644 resource/sqlupgrade/Oracle/sql202205100402.sql create mode 100644 resource/sqlupgrade/Oracle/sql202205130903.sql create mode 100644 resource/sqlupgrade/Oracle/sql202205200203.sql create mode 100644 resource/sqlupgrade/Oracle/sql202205310203.sql create mode 100644 resource/sqlupgrade/Oracle/sql202206071403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202206090403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202206141003.sql create mode 100644 resource/sqlupgrade/Oracle/sql202206160500.sql create mode 100644 resource/sqlupgrade/Oracle/sql202206230403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202207110803.sql create mode 100644 resource/sqlupgrade/Oracle/sql202207120303.sql create mode 100644 resource/sqlupgrade/Oracle/sql202207210203.sql create mode 100644 resource/sqlupgrade/Oracle/sql202208051103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202208080403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202208240403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202208240503.sql create mode 100644 resource/sqlupgrade/Oracle/sql202209010603.sql create mode 100644 resource/sqlupgrade/Oracle/sql202209050303.sql create mode 100644 resource/sqlupgrade/Oracle/sql202210080203.sql create mode 100644 resource/sqlupgrade/Oracle/sql202210080403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202210170203.sql create mode 100644 resource/sqlupgrade/Oracle/sql202210170303.sql create mode 100644 resource/sqlupgrade/Oracle/sql202211090103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202211090301.sql create mode 100644 resource/sqlupgrade/Oracle/sql202211090402.sql create mode 100644 resource/sqlupgrade/Oracle/sql202211170503.sql create mode 100644 resource/sqlupgrade/Oracle/sql202212080903.sql create mode 100644 resource/sqlupgrade/Oracle/sql202212081003.sql create mode 100644 resource/sqlupgrade/Oracle/sql202212230103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202301310403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202302060801.sql create mode 100644 resource/sqlupgrade/Oracle/sql202302060902.sql create mode 100644 resource/sqlupgrade/Oracle/sql202302090303.sql create mode 100644 resource/sqlupgrade/Oracle/sql202304040503.sql create mode 100644 resource/sqlupgrade/Oracle/sql202304260103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202304270203.sql create mode 100644 resource/sqlupgrade/Oracle/sql202304270303.sql create mode 100644 resource/sqlupgrade/Oracle/sql202304270501.sql create mode 100644 resource/sqlupgrade/Oracle/sql202305050302.sql create mode 100644 resource/sqlupgrade/Oracle/sql202305170903.sql create mode 100644 resource/sqlupgrade/Oracle/sql202306020403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202306020603.sql create mode 100644 resource/sqlupgrade/Oracle/sql202306080103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202306200203.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202205100201.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202205100402.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202205130903.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202205200203.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202205310203.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202206071403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202206090403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202206141003.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202206160500.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202206230403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202207110803.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202207120303.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202207210203.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202208051103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202208080403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202208240403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202208240503.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202210080203.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202210080403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202210170203.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202210170303.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202211090103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202211090301.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202211090402.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202211170503.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202212080903.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202212081003.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202212230103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202301310403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202302060801.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202302060902.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202302090303.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202302200403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202304040503.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202304260103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202304270203.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202304270303.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202304270501.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202305050302.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202305170903.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202306020403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202306020603.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202306080103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202306200203.sql diff --git a/resource/sql/薪酬还原脚本-sqlserver.sql b/resource/sql/薪酬还原脚本-sqlserver.sql index 85f179fd6..d08d0ed72 100644 --- a/resource/sql/薪酬还原脚本-sqlserver.sql +++ b/resource/sql/薪酬还原脚本-sqlserver.sql @@ -101,8 +101,8 @@ delete from hrsa_tax_agent_admin where 1=1 GO delete from hrsa_tax_agent_manage_range where 1=1 GO -delete from hrsa_tax_agent_base where 1=1 -GO +-- delete from hrsa_tax_agent_base where 1=1 +-- GO delete from hrsa_tax_agent_sub_admin where 1=1 GO delete from hrsa_tax_agent_sub_admin_emp where 1=1 @@ -173,5 +173,5 @@ GO delete from hrsa_statreportlogs where 1=1 GO -INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams') -GO +-- INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams') +-- GO diff --git a/resource/sql/薪酬还原脚本.sql b/resource/sql/薪酬还原脚本.sql index a3d95426a..caafbb73e 100644 --- a/resource/sql/薪酬还原脚本.sql +++ b/resource/sql/薪酬还原脚本.sql @@ -101,8 +101,8 @@ delete from hrsa_tax_agent_admin where 1=1 ; delete from hrsa_tax_agent_manage_range where 1=1 ; -delete from hrsa_tax_agent_base where 1=1 -; +-- delete from hrsa_tax_agent_base where 1=1 +-- ; delete from hrsa_tax_agent_sub_admin where 1=1 ; delete from hrsa_tax_agent_sub_admin_emp where 1=1 @@ -173,7 +173,7 @@ delete from hrsa_statreportlogs_detail where 1=1 delete from hrsa_statreportlogs where 1=1 ; -INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams'); +-- INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams'); -- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, '养老保险', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') @@ -198,7 +198,7 @@ INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, ---oracle -INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 1, 0, 'all_teams'); +-- INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 1, 0, 'all_teams'); -- INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, '养老保险', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') -- ; diff --git a/resource/sqlupgrade/DM/sql202205100201.sql b/resource/sqlupgrade/DM/sql202205100201.sql new file mode 100644 index 000000000..a4930cad6 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202205100201.sql @@ -0,0 +1,455 @@ +delete from HtmlLabelIndex where id = 537997 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 537997,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537997 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'Salary management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 537998 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 537998,'ҵнʸ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537998 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнʸ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'My salary and benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 537996 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 537996,'˰۽' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537996 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'˰۽' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Individual income tax withholding agent' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Ux' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 537999 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 537999,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537999 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'Social security benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538000 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538000,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538000 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'Social security welfare scheme' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538001 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538001,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538001 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'Social security benefit file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538002 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538002,'籣̨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538002 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'Social security benefit account' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538003 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538003,'нĿ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538003 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нĿ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'Salary item management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нYĿ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538004 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538004,'нʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538004 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'Salary file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нYn' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538005 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538005,'ݲɼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538005 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'ݲɼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'data acquisition' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538006 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538006,'ۼרӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538006 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'ۼרӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Accumulated special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Ӌ헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538007 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538007,'˰۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538007 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'˰۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'Other tax exempt deductions' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'ⶐ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538008 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538008,'ۼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538008 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'ۼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Cumulative situation in previous periods' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Ӌr' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538009 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538009,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538009 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'Attendance reference' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538010 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538010,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538010 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'Salary a / C set' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'нY~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538011 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538011,'нʺ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538011 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нʺ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'Salary accounting' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538012 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538012,'ʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538012 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'ʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Payroll payment' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Yΰl' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538013 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538013,'˰걨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538013 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'˰걨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'Individual income tax return' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538014 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538014,'˰˰ʱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538014 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'˰˰ʱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'Individual income tax rate table' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'ʱ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202205100402.sql b/resource/sqlupgrade/DM/sql202205100402.sql new file mode 100644 index 000000000..d297514d6 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202205100402.sql @@ -0,0 +1,269 @@ +Delete from LeftMenuInfo where id=100118; +/ + +Delete from LeftMenuConfig where infoid=100118; +/ + +call LMConfig_U_ByInfoInsert (1,0,-1); +/ + +call LMInfo_Insert (100118,537997,NULL,NULL,1,0,-1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100118; +/ + +Delete from LeftMenuInfo where id=100132; +/ + +Delete from LeftMenuConfig where infoid=100132; +/ + +call LMConfig_U_ByInfoInsert (2,100118,5); +/ + +call LMInfo_Insert (100132,538011,'','',2,100118,5,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/calculate' where id = 100132; +/ + +Delete from LeftMenuInfo where id=100125; +/ + +Delete from LeftMenuConfig where infoid=100125; +/ + +call LMConfig_U_ByInfoInsert (2,100118,2); +/ + +call LMInfo_Insert (100125,538004,'','',2,100118,2,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100125; +/ + +Delete from LeftMenuInfo where id=100130; +/ + +Delete from LeftMenuConfig where infoid=100130; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100130,538009,'','',2,100126,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/attendance' where id = 100130; +/ + +Delete from LeftMenuInfo where id=100129; +/ + +Delete from LeftMenuConfig where infoid=100129; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100129,538008,'','',2,100126,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumSituation' where id = 100129; +/ + +Delete from LeftMenuInfo where id=100120; +/ + +Delete from LeftMenuConfig where infoid=100120; +/ + +call LMConfig_U_ByInfoInsert (2,100118,0); +/ + +call LMInfo_Insert (100120,537999,'','',2,100118,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100120; +/ + +Delete from LeftMenuInfo where id=100123; +/ + +Delete from LeftMenuConfig where infoid=100123; +/ + +call LMConfig_U_ByInfoInsert (2,100120,1); +/ + +call LMInfo_Insert (100123,538002,'','',2,100120,1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/standingBook' where id = 100123; +/ + +Delete from LeftMenuInfo where id=100122; +/ + +Delete from LeftMenuConfig where infoid=100122; +/ + +call LMConfig_U_ByInfoInsert (2,100120,0); +/ + +call LMInfo_Insert (100122,538001,'','',2,100120,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/archives' where id = 100122; +/ + +Delete from LeftMenuInfo where id=100135; +/ + +Delete from LeftMenuConfig where infoid=100135; +/ + +call LMConfig_U_ByInfoInsert (2,100118,8); +/ + +call LMInfo_Insert (100135,537996,'','',2,100118,8,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/taxAgent' where id = 100135; +/ + +Delete from LeftMenuInfo where id=100121; +/ + +Delete from LeftMenuConfig where infoid=100121; +/ + +call LMConfig_U_ByInfoInsert (2,100120,-1); +/ + +call LMInfo_Insert (100121,538000,'','',2,100120,-1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/programme' where id = 100121; +/ + +Delete from LeftMenuInfo where id=100126; +/ + +Delete from LeftMenuConfig where infoid=100126; +/ + +call LMConfig_U_ByInfoInsert (2,100118,3); +/ + +call LMInfo_Insert (100126,538005,'','',2,100118,3,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100126; +/ + +Delete from LeftMenuInfo where id=100127; +/ + +Delete from LeftMenuConfig where infoid=100127; +/ + +call LMConfig_U_ByInfoInsert (2,100126,-1); +/ + +call LMInfo_Insert (100127,538006,'','',2,100126,-1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumDeduct' where id = 100127; +/ + +Delete from LeftMenuInfo where id=100133; +/ + +Delete from LeftMenuConfig where infoid=100133; +/ + +call LMConfig_U_ByInfoInsert (2,100118,6); +/ + +call LMInfo_Insert (100133,538012,'','',2,100118,6,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/payroll' where id = 100133; +/ + +Delete from LeftMenuInfo where id=100128; +/ + +Delete from LeftMenuConfig where infoid=100128; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100128,538007,'','',2,100126,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/otherDeduct' where id = 100128; +/ + +Delete from LeftMenuInfo where id=100119; +/ + +Delete from LeftMenuConfig where infoid=100119; +/ + +call LMConfig_U_ByInfoInsert (2,100118,-1); +/ + +call LMInfo_Insert (100119,537998,'','',2,100118,-1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/mySalary' where id = 100119; +/ + +Delete from LeftMenuInfo where id=100131; +/ + +Delete from LeftMenuConfig where infoid=100131; +/ + +call LMConfig_U_ByInfoInsert (2,100118,4); +/ + +call LMInfo_Insert (100131,538010,'','',2,100118,4,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/ledger' where id = 100131; +/ + +Delete from LeftMenuInfo where id=100124; +/ + +Delete from LeftMenuConfig where infoid=100124; +/ + +call LMConfig_U_ByInfoInsert (2,100118,1); +/ + +call LMInfo_Insert (100124,538003,'','',2,100118,1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryItem' where id = 100124; +/ + +Delete from LeftMenuInfo where id=100134; +/ + +Delete from LeftMenuConfig where infoid=100134; +/ + +call LMConfig_U_ByInfoInsert (2,100118,7); +/ + +call LMInfo_Insert (100134,538013,'','',2,100118,7,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/declare' where id = 100134; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202205130903.sql b/resource/sqlupgrade/DM/sql202205130903.sql new file mode 100644 index 000000000..8ab2d398d --- /dev/null +++ b/resource/sqlupgrade/DM/sql202205130903.sql @@ -0,0 +1,2410 @@ +CREATE TABLE hrsa_acct_result_temp( + id NUMBER(38,0) primary key NOT NULL, + calculate_key varchar2(50) DEFAULT '', + salary_sob_id NUMBER(38,0) DEFAULT 0, + salary_acct_emp_id NUMBER(38,0) DEFAULT 0, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_item_id NUMBER(38,0) DEFAULT 0, + result_value varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT '0', + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +create sequence hrsa_acct_result_temp_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_acct_result_temp_Tri +before insert on hrsa_acct_result_temp +for each row +begin +select hrsa_acct_result_temp_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_add_up_deduction ( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + declare_month DATE DEFAULT sysdate, + add_up_child_education varchar2(255) DEFAULT '', + add_up_continuing_education varchar2(255) DEFAULT '', + add_up_housing_loan_interest varchar2(255) DEFAULT '', + add_up_housing_rent varchar2(255) DEFAULT '' , + add_up_support_elderly varchar2(255) DEFAULT '' , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0 , + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' + ); +/ + +create sequence hrsa_add_up_deduction_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_add_up_deduction_Tri +before insert on hrsa_add_up_deduction +for each row +begin +select hrsa_add_up_deduction_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_add_up_situation( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + tax_year_month date DEFAULT sysdate, + year NUMBER(38,0) DEFAULT 0, + add_up_income varchar2(255) DEFAULT '' , + add_up_subtraction varchar2(255) DEFAULT '' , + add_up_social_security_total varchar2(255) DEFAULT '' , + add_up_accumulation_fund_total varchar2(255) DEFAULT '' , + add_up_child_education varchar2(255) DEFAULT '' , + add_up_continuing_education varchar2(255) DEFAULT '' , + add_up_housing_loan_interest varchar2(255) DEFAULT '' , + add_up_housing_rent varchar2(255) DEFAULT '' , + add_up_support_elderly varchar2(255) DEFAULT '' , + add_up_enterprise_and_other varchar2(255) DEFAULT '', + add_up_other_deduction varchar2(255) DEFAULT '0.00000', + add_up_tax_exempt_income varchar2(255) DEFAULT '' , + add_up_allowed_donation varchar2(255) DEFAULT '' , + add_up_advance_tax varchar2(255) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0 , + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' + ); +/ + +create sequence hrsa_add_up_situation_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_add_up_situation_Tri +before insert on hrsa_add_up_situation +for each row +begin +select hrsa_add_up_situation_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_attend_quote( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_year_month date NOT NULL, + year number DEFAULT 0, + month number DEFAULT 0, + salary_sob_id NUMBER(38,0) DEFAULT '', + source_type number DEFAULT 0, + salary_accounting_status number DEFAULT 0, + attend_cycle varchar2(100) DEFAULT '' , + salary_cycle varchar2(100) DEFAULT '' , + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +create sequence hrsa_attend_quote_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_attend_quote_Tri +before insert on hrsa_attend_quote +for each row +begin +select hrsa_attend_quote_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_attend_quote_data( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + attend_quote_id NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_attend_quote_data_value( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + attend_quote_id NUMBER(38,0) DEFAULT 0, + attend_quote_data_id NUMBER(38,0) NOT NULL, + attend_quote_field_id NUMBER(38,0) NOT NULL, + data_value varchar2(250) NOT NULL, + create_time date DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +create sequence hrsa_attend_quote_d_v_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_attend_quote_d_v_Tri +before insert on hrsa_attend_quote_data_value +for each row +begin +select hrsa_attend_quote_d_v_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_attend_quote_field( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + field_name varchar2(100) DEFAULT '' , + source_type number DEFAULT 0, + field_type number DEFAULT 0, + enable_status number DEFAULT 0, + code varchar2(50) DEFAULT '' , + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +create sequence hrsa_attend_quote_field_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_attend_quote_field_Tri +before insert on hrsa_attend_quote_field +for each row +begin +select hrsa_attend_quote_field_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_attend_quote_sync_set( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + source_type number DEFAULT 0, + current_setting_content varchar2(4000) DEFAULT '', + default_setting_content varchar2(4000) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +create sequence hrsa_attend_quote_sync_set_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_attend_quote_sync_set_Tri +before insert on hrsa_attend_quote_sync_set +for each row +begin +select hrsa_attend_quote_sync_set_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_batch( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + bill_month varchar2(30) NOT NULL, + bill_status number NOT NULL, + social_num number DEFAULT 0, + fund_num number DEFAULT 0 , + other_num number DEFAULT 0 , + social_pay varchar2(4000) NULL, + fund_pay varchar2(4000) NULL, + other_pay varchar2(4000) NULL, + accountant varchar2(200) NOT NULL, + remarks varchar2(60) NULL, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +create sequence hrsa_bill_batch_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_bill_batch_Tri +before insert on hrsa_bill_batch +for each row +begin +select hrsa_bill_batch_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_batch_encdata( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + tablename varchar2(50) NOT NULL, + fieldname varchar2(50) NOT NULL, + enc_value varchar2(4000) NOT NULL, + skey varchar2(4000) NOT NULL, + crc varchar2(4000) NULL, + creater NUMBER(38,0) NULL, + created varchar2(50) NULL, + MODIFIER NUMBER(38,0) NULL, + modified varchar2(50) NULL, + tenant_key varchar2(10) NULL + ); +/ + +CREATE sequence hrsa_bill_batch_encdata_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_bill_batch_encdata_Tri +before insert on hrsa_bill_batch_encdata +for each row +begin +select hrsa_bill_batch_encdata_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_detail( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + bill_month varchar2(30) NOT NULL, + bill_status number NOT NULL, + payment_status number NOT NULL, + supplementary_month varchar2(50) NULL, + supplementary_projects varchar2(50) NULL, + resource_from number NOT NULL, + social_pay_org number NULL, + social_account varchar2(50) NULL, + social_scheme_id NUMBER(38,0) NULL, + social_payment_base_string varchar2(512) NULL, + fund_pay_org number NULL, + fund_account varchar2(50) NULL, + supplement_fund_account varchar2(50) NULL, + fund_scheme_id number NULL, + fund_payment_base_string varchar2(512) NULL, + other_pay_org number NULL, + other_scheme_id NUMBER(38,0) NULL, + other_payment_base_string varchar2(512) NULL, + social_per_json varchar2(512) NULL, + social_per_sum varchar2(512) NULL, + fund_per_json varchar2(512) NULL, + fund_per_sum varchar2(512) NULL, + other_per_json varchar2(512) NULL, + other_per_sum varchar2(512) NULL, + per_sum varchar2(512) NULL, + social_com_json varchar2(512) NULL, + social_com_sum varchar2(512) NULL, + fund_com_json varchar2(512) NULL, + fund_com_sum varchar2(512) NULL, + other_com_json varchar2(512) NULL, + other_com_sum varchar2(512) NULL, + com_sum varchar2(512) NULL, + social_sum varchar2(512) NULL, + fund_sum varchar2(512) NULL, + other_sum varchar2(512) NULL, + total varchar2(512) NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ); +/ + +CREATE sequence hrsa_bill_detail_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_bill_detail_Tri +before insert on hrsa_bill_detail +for each row +begin +select hrsa_bill_detail_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_detail_temp( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + bill_month varchar2(30) NOT NULL, + bill_status number NOT NULL, + payment_status number NOT NULL, + supplementary_month varchar2(50) NULL, + supplementary_projects varchar2(50) NULL, + resource_from number NOT NULL, + social_pay_org number NULL, + social_account varchar2(50) NULL, + social_scheme_id NUMBER(38,0) NULL, + social_payment_base_string varchar2(512) NULL, + fund_pay_org number NULL, + fund_account varchar2(50) NULL, + supplement_fund_account varchar2(50) NULL, + fund_scheme_id NUMBER(38,0) NULL, + fund_payment_base_string varchar2(512) NULL, + other_pay_org number NULL, + other_scheme_id number NULL, + other_payment_base_string varchar2(512) NULL, + social_per_json varchar2(512) NULL, + social_per_sum varchar2(512) NULL, + fund_per_json varchar2(512) NULL, + fund_per_sum varchar2(512) NULL, + other_per_json varchar2(512) NULL, + other_per_sum varchar2(512) NULL, + per_sum varchar2(512) NULL, + social_com_json varchar2(512) NULL, + social_com_sum varchar2(512) NULL, + fund_com_json varchar2(512) NULL, + fund_com_sum varchar2(512) NULL, + other_com_json varchar2(512) NULL, + other_com_sum varchar2(512) NULL, + com_sum varchar2(512) NULL, + social_sum varchar2(512) NULL, + fund_sum varchar2(512) NULL, + other_sum varchar2(512) NULL, + total varchar2(512) NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_bill_detail_temp_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_bill_detail_temp_Tri +before insert on hrsa_bill_detail_temp +for each row +begin +select hrsa_bill_detail_temp_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_inspect( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + bill_month varchar2(30) NOT NULL, + payment_status number NOT NULL, + supplementary_month varchar2(50) NULL, + supplementary_projects varchar2(50) NULL, + inspect_status number NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + +); +/ + +CREATE sequence hrsa_bill_inspect_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_bill_inspect_Tri +before insert on hrsa_bill_inspect +for each row +begin +select hrsa_bill_inspect_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_check_result( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + salary_check_rule_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + ignore_type number NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ); +/ + +CREATE sequence hrsa_check_result_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_check_result_Tri +before insert on hrsa_check_result +for each row +begin +select hrsa_check_result_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_check_result_record( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + salary_check_rule_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + check_result_id NUMBER(38,0) NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ); +/ + +CREATE sequence hrsa_check_result_record_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_check_result_record_Tri +before insert on hrsa_check_result_record +for each row +begin +select hrsa_check_result_record_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_ck_result_detail_temp( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + salary_check_rule_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL, + calculate_key varchar2(50) NOT NULL +); +/ + +CREATE sequence hrsa_ck_result_detail_temp_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_ck_result_detail_temp_Tri +before insert on hrsa_ck_result_detail_temp +for each row +begin +select hrsa_ck_result_detail_temp_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_excel_acct_result( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + result_value varchar2(1000) NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL + ); +/ + +CREATE sequence hrsa_excel_acct_result_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_excel_acct_result_Tri +before insert on hrsa_excel_acct_result +for each row +begin +select hrsa_excel_acct_result_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_formula( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(255) NOT NULL, + description varchar2(255) NULL , + module varchar2(255) NOT NULL, + use_for varchar2(255) NULL , + reference_type varchar2(255) NULL , + return_type varchar2(255) NOT NULL, + validate_type varchar2(255) NOT NULL, + extend_param varchar2(255) NULL , + formula varchar2(4000) NOT NULL, + formulaRunScript varchar2(4000) NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + create_time date NOT NULL, + update_time date NOT NULL + ); +/ + +CREATE TABLE hrsa_formula_var( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(255) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + field_id varchar2(255) NOT NULL, + field_name varchar2(500) NOT NULL, + field_type varchar2(255) NOT NULL, + source varchar2(255) NOT NULL, + order_index number NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + create_time date NOT NULL, + update_time date NOT NULL +); +/ + +CREATE TABLE hrsa_fund_archives( + id number PRIMARY KEY NOT NULL, + employee_id number NOT NULL, + non_payment number NULL, + welfare_type number NOT NULL, + fund_start_time varchar2(20) NULL, + fund_end_time varchar2(20) NULL, + fund_scheme_id number NULL, + fund_account varchar2(50) NULL, + supplement_fund_account varchar2(50) NULL, + payment_organization number NULL, + under_take number NULL, + fund_payment_base_string varchar2(4000) NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_fund_archives_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_fund_archives_Tri +before insert on hrsa_fund_archives +for each row +begin +select hrsa_fund_archives_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_insurance_category( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + insurance_name varchar2(50) NOT NULL, + welfare_type number NOT NULL, + is_use number DEFAULT 1, + payment_scope varchar2(10) NULL, + data_type number DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_other_archives( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + non_payment number NULL, + welfare_type number NOT NULL, + other_start_time varchar2(20) NULL, + other_end_time varchar2(20) NULL, + other_scheme_id NUMBER(38,0) NULL, + payment_organization number NULL, + under_take number NULL, + other_payment_base_string varchar2(4000) NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +CREATE sequence hrsa_other_archives_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_other_archives_Tri +before insert on hrsa_other_archives +for each row +begin +select hrsa_other_archives_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_other_deduction( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + declare_month date DEFAULT sysdate, + business_healthy_insurance varchar2(255) DEFAULT '0.00000', + tax_delay_endowment_insurance varchar2(255) DEFAULT '', + other_deduction varchar2(255) DEFAULT '', + deduction_allowed_donation varchar2(255) DEFAULT '', + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +CREATE sequence hrsa_other_deduction_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_other_deduction_Tri +before insert on hrsa_other_deduction +for each row +begin +select hrsa_other_deduction_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_acct_emp( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + salary_sob_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_month DATE DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +CREATE sequence hrsa_salary_acct_emp_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_acct_emp_Tri +before insert on hrsa_salary_acct_emp +for each row +begin +select hrsa_salary_acct_emp_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_acct_record( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_month DATE DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + tax_cycle DATE DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + salary_sob_id NUMBER(38,0) DEFAULT 0, + status number DEFAULT 1, + acct_times number DEFAULT 0, + description varchar2(100) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_acct_record_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_acct_record_Tri +before insert on hrsa_salary_acct_record +for each row +begin +select hrsa_salary_acct_record_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_acct_result( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + salary_acct_emp_id NUMBER(38,0) DEFAULT 0, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_item_id NUMBER(38,0) DEFAULT 0, + result_value varchar2(1000) DEFAULT '' , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_acct_result_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_acct_result_Tri +before insert on hrsa_salary_acct_result +for each row +begin +select hrsa_salary_acct_result_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_archive( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +CREATE TABLE hrsa_salary_archive_dimission( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + dimission_time_interval varchar2(20) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ); +/ + +CREATE sequence hrsa_salary_archive_d_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_archive_d_Tri +before insert on hrsa_salary_archive_dimission +for each row +begin +select hrsa_salary_archive_d_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_archive_item( + id NUMBER(38,0) NOT NULL, + salary_archive_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + effective_time DATE DEFAULT sysdate, + adjust_reason varchar2(100) DEFAULT '', + salary_item_id NUMBER(38,0) DEFAULT 0, + item_value varchar2(200) DEFAULT '' , + description varchar2(200) DEFAULT '' , + operator NUMBER(38,0) DEFAULT 0, + operate_time date NULL , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_archive_item_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hhrsa_salary_archive_item_Tri +before insert on hrsa_salary_archive_item +for each row +begin +select hrsa_salary_archive_item_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_archive_tax_agent( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_archive_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + effective_time DATE DEFAULT sysdate, + adjust_reason varchar2(100) DEFAULT '' , + tax_agent_id NUMBER(38,0) DEFAULT 0, + operator NUMBER(38,0) DEFAULT 0, + operate_time date NULL , + description varchar2(200) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_archive_tax_a_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_archive_tax_a_Tri +before insert on hrsa_salary_archive_tax_agent +for each row +begin +select hrsa_salary_archive_tax_a_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '' , + code varchar2(100) DEFAULT '' , + system_type number DEFAULT 0, + sys_salary_item_id NUMBER(38,0) DEFAULT 0, + category number DEFAULT 7 , + item_type number DEFAULT 1 , + use_default number DEFAULT 0, + use_in_employee_salary number DEFAULT 0, + rounding_mode number DEFAULT 1 , + pattern number DEFAULT 5 , + value_type number DEFAULT 1 , + datasource number DEFAULT 0, + formula_id NUMBER(38,0) DEFAULT 0, + description varchar2(1000) DEFAULT '', + can_edit number DEFAULT 1 , + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + data_type varchar2(20) NOT NULL +); +/ + +CREATE TABLE hrsa_salary_send( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_month date NOT NULL, + salary_accounting_id NUMBER(38,0) DEFAULT 0, + salary_sob_id NUMBER(38,0) NOT NULL, + send_num number DEFAULT 0, + send_total number DEFAULT 0, + last_send_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_salary_send_info( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_send_id NUMBER(38,0) NOT NULL, + salary_month date NOT NULL, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + send_status number DEFAULT 0, + send_time DATE , + salary_template clob NULL, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_salary_sob( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '' , + income_category number DEFAULT 1 , + salary_cycle_type number DEFAULT 3 , + salary_cycle_from_day number DEFAULT 1 , + tax_cycle_type number DEFAULT 3 , + attend_cycle_type number DEFAULT 3 , + attend_cycle_from_day number DEFAULT 1 , + social_security_cycle_type number DEFAULT 3 , + disable number DEFAULT 0, + description varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_sob_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_sob_Tri +before insert on hrsa_salary_sob +for each row +begin +select hrsa_salary_sob_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_adjust_rule( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + day_of_month number DEFAULT 0, + before_adjustment_type number DEFAULT 1 , + after_adjustment_type number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_sob_a_r_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_sob_a_r_Tri +before insert on hrsa_salary_sob_adjust_rule +for each row +begin +select hrsa_salary_sob_a_r_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_check_rule( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + name varchar2(100) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + description varchar2(1000) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_salary_sob_c_r_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_sob_c_r_Tri +before insert on hrsa_salary_sob_check_rule +for each row +begin +select hrsa_salary_sob_c_r_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_default_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + income_category number DEFAULT 1 , + sys_salary_item_id NUMBER(38,0) DEFAULT 0, + can_edit number DEFAULT 1 , + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '', + sob_default_item_group_id NUMBER(38,0) NOT NULL, + sorted_index number NOT NULL +); +/ + +CREATE sequence hrsa_salary_sob_d_i_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_sob_d_i_Tri +before insert on hrsa_salary_sob_default_item +for each row +begin +select hrsa_salary_sob_d_i_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_emp_field( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + field_code varchar2(100) DEFAULT '' , + sorted_index number DEFAULT 0, + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_sob_emp_field_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_sob_emp_field_Tri +before insert on hrsa_salary_sob_emp_field +for each row +begin +select hrsa_salary_sob_emp_field_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + salary_sob_item_group_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + sorted_index number NOT NULL, + description varchar2(1000) DEFAULT '' , + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_salary_sob_item_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_sob_item_Tri +before insert on hrsa_salary_sob_item +for each row +begin +select hrsa_salary_sob_item_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_item_group( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + name varchar2(100) NOT NULL, + sorted_index number NOT NULL, + description varchar2(1000) DEFAULT '', + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE TABLE hrsa_salary_sob_range( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + target_type number DEFAULT 1 , + target_id NUMBER(38,0) DEFAULT 0, + employee_status number DEFAULT 0, + include_type number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_sob_range_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_sob_range_Tri +before insert on hrsa_salary_sob_range +for each row +begin +select hrsa_salary_sob_range_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_template +( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '', + salary_sob_id NUMBER(38,0) NOT NULL, + use_type number DEFAULT 0, + description varchar2(100) DEFAULT '', + email_status number DEFAULT 0, + send_email_id NUMBER(38,0) DEFAULT 0, + msg_status number DEFAULT 0, + theme varchar2(100) DEFAULT '', + background varchar2(2000) DEFAULT '', + text_content varchar2(100) DEFAULT '', + text_content_position number DEFAULT 0, + salary_item_null_status number DEFAULT 0, + salary_item_zero_status number DEFAULT 0, + salary_item_setting clob NOT NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_template_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_salary_template_Tri +before insert on hrsa_salary_template +for each row +begin +select hrsa_salary_template_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_scheme_detail( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + insurance_id NUMBER(38,0) NOT NULL, + primary_id NUMBER(38,0) NOT NULL, + effective_time varchar2(20) NULL, + expiration_time varchar2(20) NULL, + is_payment number DEFAULT 1 , + payment_scope number NOT NULL, + upper_limit varchar2(1024) NULL, + lower_limit varchar2(1024) NULL, + payment_proportion varchar2(1024) NULL, + fixed_cost varchar2(1024) NULL, + valid_num number DEFAULT 2 , + rentention_rule number NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_scheme_detail_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_scheme_detail_Tri +before insert on hrsa_scheme_detail +for each row +begin +select hrsa_scheme_detail_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_sob_default_emp_field( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + field_code varchar2(30) DEFAULT '' , + sorted_index number DEFAULT 0, + can_delete number DEFAULT 0, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_sob_default_item_group( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + income_category number DEFAULT 1 , + name varchar2(100) DEFAULT '', + sorted_index number DEFAULT 0, + description varchar2(1000) DEFAULT '', + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_social_archives( + id number PRIMARY KEY NOT NULL, + employee_id number NOT NULL, + non_payment number NULL, + welfare_type number NOT NULL, + social_start_time varchar2(20) NULL, + social_end_time varchar2(20) NULL, + social_scheme_id number NULL, + social_account varchar2(50) NULL, + payment_organization number NULL, + under_take number NULL, + social_payment_base_string varchar2(4000) NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_social_archives_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_social_archives_Tri +before insert on hrsa_social_archives +for each row +begin +select hrsa_social_archives_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_social_archives_encdata( + id number PRIMARY KEY NOT NULL, + tablename varchar2(50) NOT NULL, + fieldname varchar2(50) NOT NULL, + enc_value varchar2(4000) NOT NULL, + skey varchar2(4000) NOT NULL, + crc varchar2(4000) NULL, + creater number NULL, + created varchar2(50) NULL, + MODIFIER number NULL, + modified varchar2(50) NULL, + tenant_key varchar2(10) NULL +); +/ + +CREATE sequence hrsa_social_a_e_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_social_a_e_Tri +before insert on hrsa_social_archives_encdata +for each row +begin +select hrsa_social_a_e_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_social_security_scheme( + id number PRIMARY KEY NOT NULL, + payment_area varchar2(100) NOT NULL, + payment_type number DEFAULT 1 , + scheme_name varchar2(100) NOT NULL, + welfare_type number NOT NULL, + is_use number DEFAULT 1 , + remarks varchar2(30) DEFAULT '', + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator number DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_social_s_s_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_social_s_s_Tri +before insert on hrsa_social_security_scheme +for each row +begin +select hrsa_social_s_s_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_sys_salary_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '', + code varchar2(100) DEFAULT '', + system_type number DEFAULT 0, + category number DEFAULT 7 , + item_type number DEFAULT 1 , + use_default number DEFAULT 0, + use_in_employee_salary number DEFAULT 0, + rounding_mode number DEFAULT 1 , + pattern number DEFAULT 5 , + value_type number DEFAULT 1 , + datasource number DEFAULT 0, + formula_id NUMBER(38,0) DEFAULT 0, + description varchar2(1000) DEFAULT '', + can_edit number DEFAULT 1 , + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '', + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + data_type varchar2(20) NOT NULL +); +/ + +CREATE TABLE hrsa_sys_tax_rate_base( + id number PRIMARY KEY NOT NULL, + name varchar2(100) NOT NULL, + system_type number NOT NULL, + description varchar2(100) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_sys_tax_rate_base_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_sys_tax_rate_base_Tri +before insert on hrsa_sys_tax_rate_base +for each row +begin +select hrsa_sys_tax_rate_base_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_sys_tax_rate_detail( + id number PRIMARY KEY NOT NULL, + base_id number NOT NULL, + index_num number NOT NULL, + income_lower_limit number(15, 5) NULL, + income_upper_limit number(15, 5) NULL, + duty_free_value number(15, 5) NULL, + duty_free_rate number(15, 5) NULL, + taxable_income_ll number(15, 5) NULL, + taxable_income_ul number(15, 5) NOT NULL, + tax_rate number(15, 5) NOT NULL, + tax_deduction number(15, 5) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_sys_tax_rate_detail_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_sys_tax_rate_detail_Tri +before insert on hrsa_sys_tax_rate_detail +for each row +begin +select hrsa_sys_tax_rate_detail_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_tax_agent( + id number PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '', + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator number DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_tax_agent_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_tax_agent_Tri +before insert on hrsa_tax_agent +for each row +begin +select hrsa_tax_agent_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_tax_declaration( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_month date DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + tax_cycle date DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + tax_agent_id number DEFAULT 0, + description varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_tax_declaration_detail( + id NUMBER(38,0) NOT NULL, + tax_declaration_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + field_code varchar2(100) DEFAULT '' , + field_value varchar2(1000) DEFAULT '' , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_tax_rate_base( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '' , + system_type number DEFAULT 0, + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_tax_rate_base_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_tax_rate_base_Tri +before insert on hrsa_tax_rate_base +for each row +begin +select hrsa_tax_rate_base_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_tax_rate_detail( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + base_id NUMBER(38,0) DEFAULT 0, + index_num number DEFAULT 0, + income_upper_limit number(15, 5) DEFAULT 0.00000, + income_lower_limit number(15, 5) DEFAULT 0.00000, + duty_free_value number(15, 5) DEFAULT 0.00000, + duty_free_rate number(15, 5) DEFAULT 0.00000, + taxable_income_ul number(15, 5) DEFAULT 0.00000, + taxable_income_ll number(15, 5) DEFAULT 0.00000, + tax_rate number(15, 5) DEFAULT 0.00000, + tax_deduction number(15, 5) DEFAULT 0.00000, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_tax_rate_detail_id +start with 1 +increment by 1 +nomaxvalue +nocycle; +/ + +create or replace trigger hrsa_tax_rate_detail_Tri +before insert on hrsa_tax_rate_detail +for each row +begin +select hrsa_tax_rate_detail_id.nextval into :new.id from dual; +end; +/ + +ALTER TABLE hrsa_salary_sob_item ADD can_delete number NULL; +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214787, 'нϼ', 'wagesTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651736817711, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214788, 'ȫһԽϼ', 'annualBonusTotal', 1, 5, 22, 0, 0, 2, 2, 2, 1, 1651737358294, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:07','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214789, '˰ǰۿϼ', 'preTaxDeductionsTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651737635353, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:22','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214790, '£ΣӦ˰ϼ', 'income', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651737859216, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:25','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214791, 'ǰۼӦ˰ϼ', 'addUpIncome', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651738034028, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:28','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214792, 'ϸ', 'endowmentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749914746, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214793, 'ҽƸ', 'medicalInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749958879, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214795, 'ʧҵ', 'unemploymentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750005281, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214796, '', 'housingProvidentFund', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750034689, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214797, '£Σר۳ϼ', 'specialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651738826550, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:40','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214798, 'ǰۼר۳ϼ', 'addUpSpecialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651739000845, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214799, 'ۼŮ', 'addUpChildEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739053212, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214800, 'ۼסϢ', 'addUpHousingLoannumbererest', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739100651, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214801, 'ۼס', 'addUpHousingRent', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739151122, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214802, 'ۼƼ', 'addUpContinuingEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739212437, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214803, 'ۼ', 'addUpSupportElderly', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739310959, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214804, 'ǰۼרӿ۳ϼ', 'addUpSpeAddiDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 6, 1651739411365, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214805, '£Σ۳ϼ', 'otherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651739815651, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214806, 'ǰۼ۳ϼ', 'addUpOtherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651740238860, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214807, '£Σ', 'subtraction', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651740311026, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:56:11','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214808, 'ǰۼƼ', 'addUpSubtraction', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651740397225, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214809, '£Σн˰˰', 'taxRate', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742185837, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214810, '£Σн˰۳', 'quickDeductionFactor', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742702735, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214811, 'ǰۼӦ˰ö', 'addUpTaxableIncome', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651745445982, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:12','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214812, 'ǰۼӦ˰', 'addUpTaxPayable', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651748888864, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:14','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214813, 'ǰۼѿ۽˰ϼ', 'addUpAdvanceTax', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651748978482, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:18','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214814, '£ΣӦ˰', 'refundedOrSupplementedTax', 1, 6, 16, 1, 0, 2, 2, 2, 1, 1651749111981,' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214815, '£Σʵнʺϼ', 'netSalaryTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651749240004, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:24','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861648655892480, '', 'baseSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:57:46','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861768948531201, 'λ', 'postSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:57:57','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861880508628992, 'ڿۿ', 'attendanceDeduction', 1, 2, 9, 1, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:04','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093121, '˰ϼ', 'afterTaxReimbursementTotal', 1, 5, 22, 0, 0, 3, 2, 1, 1, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:06','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093122, '', 'annuity', 1, 2, 12, 0, 0, 2, 2, 2, 7, 1651749398360, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093123, 'ҵ', 'commercialHealthInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749448800, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093124, '˰ϱ', 'taxDeferredEndowmentInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749487187, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093125, 'Ʋԭֵ', 'originalValueOfProperty', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:29','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093126, '۳˰', 'deductedTax', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:42','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093127, '', 'other', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749540147, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093128, '£Σ', 'fee', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093129, '£Σ˰', 'taxFreeIncome', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:54','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093130, '˰', 'lessTaxProportion', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646657, '˰ϼ', 'afterTaxAdjustmentTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:59:09','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646658, 'ǰۼƼ˰ϼ', 'addUpTaxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 5, 0, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646659, '£Σ׼ʿ۳ľ', 'allowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651749595061, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646660, 'ǰۼ׼۳ľ', 'addUpAllowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651749675268, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646661, '£Σ˰', 'taxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:25','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646662, '˰ۿϼ', 'afterTaxDeductionsTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:37','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919424520683521, '˰ۿ', 'afterTaxDeductions', 1, 4, 15, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:39','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919682288984064, '˰', 'afterTaxReimbursement', 1, 3, 13, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:40','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919776783499264, '˰', 'afterTaxAdjustment', 1, 3, 14, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:48','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674920588574261248, 'ս', 'annualBonus', 1, 1, 2, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:51','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532371614588928, 'ǰۼ籣˺ϼ', 'addUpSocialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801433504, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-07 10:22:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:44:23','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532667749400576, 'ǰۼƹ˺ϼ', 'addUpAccumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801586972, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-07 10:22:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:40','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697536344384012289, 'ǰۼҵְҵ˺ϼ', 'addUpEnterpriseAndOther', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801667770, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-07 10:22:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:48:07','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651736817711, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.λ}', 'salaryItem_baseSalary+salaryItem_postSalary', 1, 0, to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737358294, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ս}', 'salaryItem_annualBonus', 1, 0, to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737635353, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ڿۿ}', 'salaryItem_attendanceDeduction', 1, 0, to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737859216, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.нϼ}+{нĿ.ȫһԽϼ}-{нĿ.˰ǰۿϼ}', 'salaryItem_wagesTotal+salaryItem_annualBonusTotal-salaryItem_preTaxDeductionsTotal', 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738034028, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}+{ۼ.ۼ}', 'salaryItem_income+addUpSituation_addUpIncome', 1, 0, to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749914746, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ϱո}', 'welfare_9001socialPer', 1, 0, to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749958879, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҽƱո}', 'welfare_9002socialPer', 1, 0, to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750005281, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ʧҵո}', 'welfare_9004socialPer', 1, 0, to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750034689, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ס}', 'welfare_9006fundPer', 1, 0, to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738826550, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ϸ}+{нĿ.ҽƸ}+{нĿ.ʧҵ}+{нĿ.}', 'salaryItem_endowmentInsurance+salaryItem_medicalInsurance+salaryItem_unemploymentInsurance+salaryItem_housingProvidentFund', 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739000845, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σר۳ϼ}+{ۼ.ۼ籣˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'salaryItem_specialDeduction+addUpSituation_addUpSocialSecurityTotal+addUpSituation_addUpAccumulationFundTotal', 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739053212, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼŮ}', 'addUpDeductions_addUpChildEducation', 1, 0, to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739100651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼסϢ}', 'addUpSituation_addUpHousingLoannumbererest', 1, 0, to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739151122, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼס}', 'addUpSituation_addUpHousingRent', 1, 0, to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739212437, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼƼ}', 'addUpSituation_addUpContinuingEducation', 1, 0, to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739310959, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼ}', 'addUpSituation_addUpSupportElderly', 1, 0, to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739411365, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoannumbererest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly', 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739815651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.ҵ}+{нĿ.˰ϱ}+{нĿ.Ʋԭֵ}+{нĿ.۳˰}+{нĿ.}', 'salaryItem_annuity+salaryItem_commercialHealthInsurance+salaryItem_taxDeferredEndowmentInsurance+salaryItem_originalValueOfProperty+salaryItem_deductedTax+salaryItem_other', 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740238860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}+{ۼ.ۼҵְҵ}', 'salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction+addUpSituation_addUpEnterpriseAndOther', 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740311026, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '5000', '5000', 1, 0, to_date('2022-05-05 16:45:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:45:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740397225, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ}+{ۼ.ۼƼ}', 'salaryItem_subtraction+addUpSituation_addUpSubtraction', 1, 0, to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type,extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742185837, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=0){0;}else if({нĿ.ǰۼӦ˰ö}<=36000){0.03;}else if({нĿ.ǰۼӦ˰ö}<=144000){0.1;}else if({нĿ.ǰۼӦ˰ö}<=300000){0.2;}else if({нĿ.ǰۼӦ˰ö}<=420000){0.25;}else if({нĿ.ǰۼӦ˰ö}<=660000){0.3;}else if({нĿ.ǰۼӦ˰ö}<=960000){0.35;}else{0.45;}', 'if(salaryItem_addUpTaxableIncome<=0){0;}else if(salaryItem_addUpTaxableIncome<=36000){0.03;}else if(salaryItem_addUpTaxableIncome<=144000){0.1;}else if(salaryItem_addUpTaxableIncome<=300000){0.2;}else if(salaryItem_addUpTaxableIncome<=420000){0.25;}else if(salaryItem_addUpTaxableIncome<=660000){0.3;}else if(salaryItem_addUpTaxableIncome<=960000){0.35;}else{0.45;}', 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742702735, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=36000){{нĿ.ǰۼӦ˰ö}<=36000){0;}else if({нĿ.ǰۼӦ˰ö}<=144000){2520;}else if({нĿ.ǰۼӦ˰ö}<=300000){16920;}else if({нĿ.ǰۼӦ˰ö}<=420000){31920;}else if({нĿ.ǰۼӦ˰ö}<=660000){52920;}else if({нĿ.ǰۼӦ˰ö}<=960000){85920;}else{181920;}', 'if(salaryItem_addUpTaxableIncome<=36000){0;}else if(salaryItem_addUpTaxableIncome<=144000){2520;}else if(salaryItem_addUpTaxableIncome<=300000){16920;}else if(salaryItem_addUpTaxableIncome<=420000){31920;}else if(salaryItem_addUpTaxableIncome<=660000){52920;}else if(salaryItem_addUpTaxableIncome<=960000){85920;}else{181920;}', 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651745445982, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation', 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748888864, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ö}*{нĿ.£Σн˰˰}-{нĿ.£Σн˰۳}', 'salaryItem_addUpTaxableIncome*salaryItem_taxRate-salaryItem_quickDeductionFactor', 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748978482, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼԤԤ˰}', 'addUpSituation_addUpAdvanceTax', 1, 0, to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749111981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰}-{нĿ.ǰۼѿ۽˰ϼ}-{нĿ.ǰۼƼ˰ϼ}', 'salaryItem_addUpTaxPayable-salaryItem_addUpAdvanceTax-salaryItem_addUpTaxDeduction', 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749240004, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}-{нĿ.£Σר۳ϼ}-{нĿ.£ΣӦ˰}+{нĿ.˰ϼ}+{нĿ.˰ϼ}-{нĿ.˰ۿϼ}', 'salaryItem_income-salaryItem_specialDeduction-salaryItem_refundedOrSupplementedTax+salaryItem_afterTaxAdjustmentTotal+salaryItem_afterTaxReimbursementTotal-salaryItem_afterTaxDeductionsTotal', 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749398360, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҵ}', 'welfare_9007otherPer', 1, 0, to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749448800, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 1, 0, to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749487187, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 1, 0, to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749540147, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 1, 0, to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749595061, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 1, 0, to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749675268, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ׼ʿ۳ľ}+{ۼ.ۼ׼۳ľ}', 'salaryItem_allowedDonation+addUpSituation_addUpAllowedDonation', 1, 0, to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801433504, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}+{ۼ.ۼ籣˺ϼ}', 'welfare_socialPerSum+addUpSituation_addUpSocialSecurityTotal', 1, 0, to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801586972, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'welfare_fundPerSum+addUpSituation_addUpAccumulationFundTotal', 1, 0, to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801667770, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼҵְҵ}', 'welfare_otherPerSum+addUpSituation_addUpEnterpriseAndOther', 1, 0, to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818266, '', 1651736817711, 'salaryItem_baseSalary', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818329, 'λ', 1651736817711, 'salaryItem_postSalary', '{нĿ.λ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737360610, 'ս', 1651737358294, 'salaryItem_annualBonus', '{нĿ.ս}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737636061, 'ڿۿ', 1651737635353, 'salaryItem_attendanceDeduction', '{нĿ.ڿۿ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859281, 'нϼ', 1651737859216, 'salaryItem_wagesTotal', '{нĿ.нϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859342, 'ȫһԽϼ', 1651737859216, 'salaryItem_annualBonusTotal', '{нĿ.ȫһԽϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859401, '˰ǰۿϼ', 1651737859216, 'salaryItem_preTaxDeductionsTotal', '{нĿ.˰ǰۿϼ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035450, '£ΣӦ˰ϼ', 1651738034028, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035488, 'ۼ', 1651738034028, 'addUpSituation_addUpIncome', '{ۼ.ۼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738832854, 'ϸ', 1651738826550, 'salaryItem_endowmentInsurance', '{нĿ.ϸ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837363, 'ҽƸ', 1651738826550, 'salaryItem_medicalInsurance', '{нĿ.ҽƸ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837909, 'ʧҵ', 1651738826550, 'salaryItem_unemploymentInsurance', '{нĿ.ʧҵ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738838429, '', 1651738826550, 'salaryItem_housingProvidentFund', '{нĿ.}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002623, '£Σר۳ϼ', 1651739000845, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002682, 'ۼ籣˺ϼ', 1651739000845, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739003139, 'ۼƹ˺ϼ', 1651739000845, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 2, 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739054270, 'ۼŮ', 1651739053212, 'addUpDeductions_addUpChildEducation', '{ۼרӿ۳.ۼŮ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739101122, 'ۼסϢ', 1651739100651, 'addUpSituation_addUpHousingLoannumbererest', '{ۼ.ۼסϢ}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739151221, 'ۼס', 1651739151122, 'addUpSituation_addUpHousingRent', '{ۼ.ۼס}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739213082, 'ۼƼ', 1651739212437, 'addUpSituation_addUpContinuingEducation', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739311009, 'ۼ', 1651739310959, 'addUpSituation_addUpSupportElderly', '{ۼ.ۼ}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411502, 'ۼŮ', 1651739411365, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411637, 'ۼסϢ', 1651739411365, 'salaryItem_addUpHousingLoannumbererest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411715, 'ۼס', 1651739411365, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411773, 'ۼƼ', 1651739411365, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739412718, 'ۼ', 1651739411365, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739819892, '', 1651739815651, 'salaryItem_annuity', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739822564, 'ҵ', 1651739815651, 'salaryItem_commercialHealthInsurance', '{нĿ.ҵ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739826637, '˰ϱ', 1651739815651, 'salaryItem_taxDeferredEndowmentInsurance', '{нĿ.˰ϱ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739828954, 'Ʋԭֵ?', 1651739815651, 'salaryItem_originalValueOfProperty', '{нĿ.Ʋԭֵ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739829915, '۳˰', 1651739815651, 'salaryItem_deductedTax', '{нĿ.۳˰}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739830465, '', 1651739815651, 'salaryItem_other', '{нĿ.}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740240713, '£Σ۳ϼ', 1651740238860, 'salaryItem_otherDeduction', '{нĿ.£Σ۳ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241221, 'ۼ˰۳', 1651740238860, 'addUpSituation_addUpOtherDeduction', '{ۼ.ۼ˰۳}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241717, 'ۼҵְҵ', 1651740238860, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 2, 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397497, '£Σ', 1651740397225, 'salaryItem_subtraction', '{нĿ.£Σ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397989, 'ۼƼ', 1651740397225, 'addUpSituation_addUpSubtraction', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185950, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185995, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186035, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186085, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186122, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186155, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186199, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 6, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742704826, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705308, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705782, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705831, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706306, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706368, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745446904, 'ǰۼӦ˰ϼ', 1651745445982, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447442, 'ǰۼר۳ϼ', 1651745445982, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447969, 'ǰۼרӿ۳ϼ', 1651745445982, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745448475, 'ǰۼ۳ϼ', 1651745445982, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745451616, 'ǰۼƼ', 1651745445982, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745452097, 'ǰۼ׼۳ľ', 1651745445982, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888918, 'ǰۼӦ˰ö', 1651748888864, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888952, '£Σн˰˰', 1651748888864, 'salaryItem_taxRate', '{нĿ.£Σн˰˰}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888989, '£Σн˰۳', 1651748888864, 'salaryItem_quickDeductionFactor', '{нĿ.£Σн˰۳}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748978520, 'ۼԤԤ˰', 1651748978482, 'addUpSituation_addUpAdvanceTax', '{ۼ.ۼԤԤ˰}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112037, 'ǰۼӦ˰', 1651749111981, 'salaryItem_addUpTaxPayable', '{нĿ.ǰۼӦ˰}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112068, 'ǰۼѿ۽˰ϼ', 1651749111981, 'salaryItem_addUpAdvanceTax', '{нĿ.ǰۼѿ۽˰ϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112116, 'ǰۼƼ˰ϼ', 1651749111981, 'salaryItem_addUpTaxDeduction', '{нĿ.ǰۼƼ˰ϼ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240040, '£ΣӦ˰ϼ', 1651749240004, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240082, '£Σר۳ϼ', 1651749240004, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240117, '£ΣӦ˰', 1651749240004, 'salaryItem_refundedOrSupplementedTax', '{нĿ.£ΣӦ˰}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240164, '˰ϼ', 1651749240004, 'salaryItem_afterTaxAdjustmentTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240199, '˰ϼ', 1651749240004, 'salaryItem_afterTaxReimbursementTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240245, '˰ۿϼ', 1651749240004, 'salaryItem_afterTaxDeductionsTotal', '{нĿ.˰ۿϼ}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749398399, 'ҵ', 1651749398360, 'welfare_9007otherPer', '{籣.ҵ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749448843, 'ҵ', 1651749448800, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749487225, '˰ϱ', 1651749487187, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749540213, '', 1651749540147, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749596472, '׼۳ľ', 1651749595061, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675326, '£Σ׼ʿ۳ľ', 1651749675268, 'salaryItem_allowedDonation', '{нĿ.£Σ׼ʿ۳ľ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675365, 'ۼ׼۳ľ', 1651749675268, 'addUpSituation_addUpAllowedDonation', '{ۼ.ۼ׼۳ľ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749914793, 'ϱո', 1651749914746, 'welfare_9001socialPer', '{籣.ϱո}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749958917, 'ҽƱո', 1651749958879, 'welfare_9002socialPer', '{籣.ҽƱո}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750005320, 'ʧҵո', 1651750005281, 'welfare_9004socialPer', '{籣.ʧҵո}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750034727, 'ס', 1651750034689, 'welfare_9006fundPer', '{籣.ס}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801435862, '籣˺ϼ', 1651801433504, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801436423, 'ۼ籣˺ϼ', 1651801433504, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587331, '˺ϼ', 1651801586972, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587794, 'ۼƹ˺ϼ', 1651801586972, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801669969, '˺ϼ', 1651801667770, 'welfare_otherPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801670474, 'ۼҵְҵ', 1651801667770, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291652, 'taxAgentName', 0, 0, 0, to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291653, 'username', 1, 0, 0, to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291654, 'departmentName', 2, 0, 0, to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams'); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368900, 4, 703459464954929153, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368899, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368902, 4, 703458434280095745, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368901, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368903, 4, 703458558739300353, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368901, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368905, 4, 674914626953093123, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368906, 4, 674914626953093124, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368907, 4, 674914626953093127, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368908, 4, 674916065864646659, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368910, 4, 704467747234045953, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368911, 4, 704468391612751873, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368912, 4, 704468443048992769, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368913, 4, 704468490269204481, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368914, 4, 704468528928063488, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368915, 4, 703459151591383041, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312448, 1, 703459151591383041, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312449, 1, 674861648655892480, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312450, 1, 674861768948531201, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312451, 1, 674861880508628992, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312452, 1, 674920588574261248, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312453, 1, 674853617092214790, 1, 0, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312454, 1, 674853617092214791, 1, 0, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312455, 1, 674914626953093129, 1, 0, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312456, 1, 703419929857687552, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 7); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312457, 1, 674853617092214792, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312458, 1, 674853617092214793, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312459, 1, 674853617092214795, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312460, 1, 674853617092214796, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312461, 1, 700599184238075904, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312462, 1, 700599446244319233, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312463, 1, 674853617092214797, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312464, 1, 697532371614588928, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 7); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312465, 1, 697532667749400576, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 8); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312466, 1, 697536344384012289, 1, 0, 0, to_date('2022-03-18 16:24:49','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 9); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312467, 1, 674853617092214798, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 10); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312468, 1, 674853617092214803, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312469, 1, 674853617092214802, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312470, 1, 674853617092214801, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312471, 1, 674853617092214800, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312472, 1, 674853617092214799, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312473, 1, 705641858303836161, 1, 0, 0, to_date('2022-03-17 13:48:51','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312474, 1, 674853617092214804, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312475, 1, 674853617092214807, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312476, 1, 674853617092214808, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312477, 1, 674914626953093122, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312478, 1, 674914626953093123, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312479, 1, 674914626953093124, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312480, 1, 674914626953093127, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312481, 1, 674853617092214805, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312482, 1, 674853617092214806, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 7); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312483, 1, 674916065864646659, 1, 0, 0, to_date('2022-03-18 16:30:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 8); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312484, 1, 674916065864646660, 1, 0, 0, to_date('2022-03-18 16:30:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 9); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312485, 1, 674853617092214811, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312486, 1, 674853617092214809, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312487, 1, 674853617092214810, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312488, 1, 674853617092214812, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312489, 1, 674853617092214813, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312490, 1, 674916065864646661, 1, 1, 0, to_date('2022-03-18 16:33:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312491, 1, 674916065864646658, 1, 1, 0, to_date('2022-03-18 16:33:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312492, 1, 674853617092214814, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 7); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312493, 1, 674853617092214815, 1, 1, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614126, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312494, 1, 700769462612156416, 1, 1, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614126, 7); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614083, 1, 'Լ˰', 0, ' ', SYSDATE, SYSDATE, 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614092, 1, 'ר۳', 1, ' ', SYSDATE, SYSDATE, 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614103, 1, 'ۼרӿ۳', 2, ' ', to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614110, 1, '۳Ϣ', 3, ' ', to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614119, 1, '˰', 4, ' ', to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614126, 1, 'Ӧʵ', 5, ' ', to_date('2022-03-11 14:49:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:28','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368899, 4, 'Ŀ', 0, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368901, 4, '뼰˰', 1, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368904, 4, '۳Ϣ', 2, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368909, 4, '˰', 3, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, 'ϱ', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, 'ҽƱ', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '˱', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, 'ʧҵ', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, 'ס', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, 'ҵ', 3, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, 'ס', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202205200203.sql b/resource/sqlupgrade/DM/sql202205200203.sql new file mode 100644 index 000000000..8ebf5b90a --- /dev/null +++ b/resource/sqlupgrade/DM/sql202205200203.sql @@ -0,0 +1,12 @@ +ALTER TABLE hrsa_add_up_situation ADD ( + add_up_illness_medical varchar2(255) NULL , + add_up_tax_savings varchar2(255) NULL , + add_up_infant_care varchar2(255) NULL +); +/ + +ALTER TABLE hrsa_add_up_deduction add ( + add_up_illness_medical varchar2(255) NULL, + add_up_infant_care varchar2(255) NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202205310203.sql b/resource/sqlupgrade/DM/sql202205310203.sql new file mode 100644 index 000000000..9d3350e63 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202205310203.sql @@ -0,0 +1,47 @@ +INSERT INTO hrsa_formula (id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1653993466778, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼסϢ}', 'addUpDeductions_addUpHousingLoanInterest', 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993466787, 'ۼסϢ', 1653993466778, 'addUpDeductions_addUpHousingLoanInterest', '{ۼרӿ۳.ۼסϢ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993837931, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼס}', 'addUpDeductions_addUpHousingRent', 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993837947, 'ۼס', 1653993837931, 'addUpDeductions_addUpHousingRent', '{ۼרӿ۳.ۼס}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993954233, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƼ}', 'addUpDeductions_addUpContinuingEducation', 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993954257, 'ۼƼ', 1653993954233, 'addUpDeductions_addUpContinuingEducation', '{ۼרӿ۳.ۼƼ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653994061764, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼ}', 'addUpDeductions_addUpSupportElderly', 1, 0,to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'),to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653994061780, 'ۼ', 1653994061764, 'addUpDeductions_addUpSupportElderly', '{ۼרӿ۳.ۼ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +update hrsa_sys_salary_item set formula_id = 1653993466778 where id = 674853617092214800; +/ + +update hrsa_sys_salary_item set formula_id = 1653993837931 where id = 674853617092214801; +/ + +update hrsa_sys_salary_item set formula_id = 1653993954233 where id = 674853617092214802; +/ + +update hrsa_sys_salary_item set formula_id = 1653994061764 where id = 674853617092214803; +/ + +update hrsa_salary_item set formula_id = 1653993466778 where sys_salary_item_id = 674853617092214800; +/ + +update hrsa_salary_item set formula_id = 1653993837931 where sys_salary_item_id = 674853617092214801; +/ + +update hrsa_salary_item set formula_id = 1653993954233 where sys_salary_item_id = 674853617092214802; +/ + +update hrsa_salary_item set formula_id = 1653994061764 where sys_salary_item_id = 674853617092214803; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202206071403.sql b/resource/sqlupgrade/DM/sql202206071403.sql new file mode 100644 index 000000000..c54be8e40 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202206071403.sql @@ -0,0 +1,131 @@ +CREATE TABLE hrsa_tax_agent_emp +( + id NUMBER(38,0) primary key NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + employee_name varchar2(255) +); +/ + +CREATE TABLE hrsa_tax_agent_emp_change +( + id NUMBER(38,0) primary key NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + change_type number DEFAULT 0 , + employee_name varchar2(255) DEFAULT NULL, + module_type NUMBER(4,0) DEFAULT 0 +); +/ + +CREATE TABLE hrsa_tax_agent_admin +( + id NUMBER(38,0) primary key NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_tax_agent_manage_range +( + id NUMBER(38,0) primary key NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_sub_admin_id NUMBER(38,0) DEFAULT 0, + target_type number DEFAULT 1, + target_id NUMBER(38,0) NOT NULL, + employee_status varchar2(100) NOT NULL, + include_type number DEFAULT 1, + creator NUMBER(38,0) DEFAULT '0', + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + range_type number DEFAULT 0 +); +/ + +CREATE TABLE hrsa_tax_agent_base +( + id NUMBER(38,0) primary key NOT NULL, + devolution_status NUMBER(11,0) DEFAULT 0 , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT '0', + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_tax_agent_sub_admin +( + id NUMBER(38,0) primary key NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + description varchar2(100) , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT '0', + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + remark clob +); +/ + +CREATE TABLE hrsa_tax_agent_sub_admin_emp +( + id NUMBER(38,0) primary key NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT '0', + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + tax_agent_id NUMBER(38,0) NOT NULL, + tax_agent_sub_admin_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + employee_name varchar2(255) +); +/ + +ALTER TABLE hrsa_tax_agent add ( + payment_agency varchar2(255) +); +/ + +ALTER TABLE hrsa_salary_sob add ( + tax_agent_id NUMBER(38,0) +); +/ + +INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 1, 0, 'all_teams'); +/ + +ALTER TABLE hrsa_bill_detail_temp add ( + payment_organization NUMBER(38,0) +); +/ + +ALTER TABLE hrsa_bill_detail add ( + payment_organization NUMBER(38,0) +); +/ + +ALTER TABLE hrsa_bill_batch add ( + payment_organization NUMBER(38,0) +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202206090403.sql b/resource/sqlupgrade/DM/sql202206090403.sql new file mode 100644 index 000000000..039aa99b5 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202206090403.sql @@ -0,0 +1,9 @@ +ALTER TABLE hrsa_tax_declaration add ( + income_category number +); +/ + +ALTER TABLE hrsa_tax_declaration_detail add ( + employee_type number +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202206141003.sql b/resource/sqlupgrade/DM/sql202206141003.sql new file mode 100644 index 000000000..8a0e262f9 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202206141003.sql @@ -0,0 +1,44 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836162, 'ۼӤ׶ջ', 'addUpInfantCare', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655196897860, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703419929857687552, 'ǰۼ˰', 'addUpTaxFreeIncome', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197296054, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836161, 'ۼƴҽ', 'addUpIllnessMedical', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197430967, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655196897860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼӤ׶ջ}', 'addUpDeductions_addUpInfantCare', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197296054, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ˰}+{ۼ.ۼ˰}', 'salaryItem_taxFreeIncome+addUpSituation_addUpTaxExemptIncome', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197430967, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƴҽ}', 'addUpDeductions_addUpIllnessMedical', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655196897869, 'ۼӤ׶ջ', 1655196897860, 'addUpDeductions_addUpInfantCare', '{ۼרӿ۳.ۼӤ׶ջ}', 'number', 'addUpDeductions', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296059, '£Σ˰', 1655197296054, 'salaryItem_taxFreeIncome', '{нĿ.£Σ˰}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296063, 'ۼ˰', 1655197296054, 'addUpSituation_addUpTaxExemptIncome', '{ۼ.ۼ˰}', 'number', 'addUpSituation', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197430986, 'ۼƴҽ', 1655197430967, 'addUpDeductions_addUpIllnessMedical', '{ۼרӿ۳.ۼƴҽ}', 'number', 'addUpDeductions', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (728615865977528321, 1, 705641858303836162, 1, 0, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 7); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845569, 1, 674853617092214787, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 8); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845572, 1, 674853617092214788, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 9); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845578, 1, 674853617092214789, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 10); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845567, 1, 733975748932845568, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 11); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202206160500.sql b/resource/sqlupgrade/DM/sql202206160500.sql new file mode 100644 index 000000000..de7812981 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202206160500.sql @@ -0,0 +1,41 @@ +delete from SystemRightDetail where rightid =2693; +/ + +delete from SystemRightsLanguage where id =2693; +/ + +delete from SystemRights where id =2693; +/ + +delete from SystemRightToGroup where rightid =2693; +/ + +delete from SystemRightType where id =36; +/ + +delete from SystemRightGroups where id =-22; +/ + +insert into SystemRights (id,rightdesc,righttype,detachable) values (2693,'нȨ','36',0); +/ + +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,8,'Salary management authority','Salary management authority'); +/ + +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,9,'н','н'); +/ + +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,7,'нȨ','нȨ'); +/ + +insert into SystemRightDetail (id,rightdetailname,rightdetail,rightid) values (43969,'нܹԱ','Salary:Chief',2693); +/ + +insert into SystemRightToGroup(rightid,groupid) values (2693,-22); +/ + +insert into SystemRightGroups (id,rightgroupmark, rightgroupname, rightgroupremark) values(-22,'SALARY','нȨ','н'); +/ + +insert into SystemRightType(id,rightTypeName,rightTypeDesc) VALUES (36,'н','н'); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202206230403.sql b/resource/sqlupgrade/DM/sql202206230403.sql new file mode 100644 index 000000000..1a84b5a61 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202206230403.sql @@ -0,0 +1,29 @@ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655976865885, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}+{нĿ.ۼƴҽ}+{нĿ.ۼӤ׶ջ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoanInterest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly+salaryItem_addUpIllnessMedical+salaryItem_addUpInfantCare', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865909, 'ۼ', 1655976865885, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865913, 'ۼƼ', 1655976865885, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865917, 'ۼס', 1655976865885, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865921, 'ۼסϢ', 1655976865885, 'salaryItem_addUpHousingLoanInterest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865924, 'ۼŮ', 1655976865885, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865929, 'ۼƴҽ', 1655976865885, 'salaryItem_addUpIllnessMedical', '{нĿ.ۼƴҽ}', 'number', 'salaryItem', 5, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865933, 'ۼӤ׶ջ', 1655976865885, 'salaryItem_addUpInfantCare', '{нĿ.ۼӤ׶ջ}', 'number', 'salaryItem', 6, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +update hrsa_sys_salary_item set formula_id = 1655976865885 where id = 674853617092214804; +/ + +update hrsa_salary_item set formula_id = 1655976865885 where sys_salary_item_id = 674853617092214804; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202207110803.sql b/resource/sqlupgrade/DM/sql202207110803.sql new file mode 100644 index 000000000..801b616d4 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202207110803.sql @@ -0,0 +1,22 @@ +CREATE TABLE hrsa_salary_acct_result_report +( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + salary_acct_emp_id varchar2(200) DEFAULT '', + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + employee_id varchar2(200) DEFAULT '', + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_item_id NUMBER(38,0) DEFAULT 0, + result_value varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '', + department_id NUMBER(38,0) DEFAULT 0, + subcompany_id NUMBER(38,0) DEFAULT 0, + costcenter_id NUMBER(38,0) DEFAULT 0, + jobtitle_id NUMBER(38,0) DEFAULT 0, + location_id NUMBER(38,0) DEFAULT 0 +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202207120303.sql b/resource/sqlupgrade/DM/sql202207120303.sql new file mode 100644 index 000000000..a1adf5847 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202207120303.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_sys_conf +( + id NUMBER(38,0) primary key NOT NULL, + conf_key varchar2(200) NOT NULL , + conf_value varchar2(500) NOT NULL, + title varchar2(200) , + module varchar2(200) , + order_weight number , + description varchar2(200) , + delete_type number DEFAULT 0 , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202207210203.sql b/resource/sqlupgrade/DM/sql202207210203.sql new file mode 100644 index 000000000..18db54e12 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202207210203.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_archive ADD ( + tax_agent_id NUMBER(38,0) NULL , + pay_start_date date NULL , + pay_end_date date NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202208051103.sql b/resource/sqlupgrade/DM/sql202208051103.sql new file mode 100644 index 000000000..d43c31244 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202208051103.sql @@ -0,0 +1,137 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599184238075904, '籣˺ϼ', 'socialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339100298, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599446244319233, '˺ϼ', 'accumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339063868, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458434280095745, '', 'laborIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458558739300353, '˰', 'laborTaxFreeIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459151591383041, 'ע', 'description', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'string'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459464954929153, 'Ŀ', 'incomeItems', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'string'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704467747234045953, '˰', 'laborSubtraction', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340673739, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468391612751873, '˰Ӧ˰ö', 'laborTaxableIncome', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340916981, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468443048992769, '˰˰', 'laborTaxRate', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341397524, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468490269204481, '˰۳', 'laborQuickDeductionFactor', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341564390, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468528928063488, '˰Ӧ˰', 'laborTaxPayable', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341811881, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (733975748932845568, '˰', 'taxAdjustment', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629570, 'ҵ', 'commercialHealthInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341909423, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629571, '˰ϱ', 'taxDeferredEndowmentInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341966905, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629572, '', 'other4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341993723, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629573, '£Σ׼۳ľ', 'allowedDonation4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659342041963, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629574, 'ע', 'description4', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'string'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629575, 'ѷнʺϼ', 'issuedTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629576, 'нʺϼ', 'ressueTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339063868, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}', 'welfare_fundPerSum', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339100298, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}', 'welfare_socialPerSum', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340673739, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.}-{нĿ.˰}<=4000){800/}else{0.2*({нĿ.}-{нĿ.˰})}', 'if(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome<=4000){800/}else{0.2*(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome)}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340916981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}-{нĿ.˰}-{нĿ.˰}', 'salaryItem_laborIncome-salaryItem_laborTaxFreeIncome-salaryItem_laborSubtraction', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341397524, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0.2/}else if({нĿ.˰Ӧ˰ö}<=50000){0.3/}else{0.4/}', 'if(salaryItem_laborTaxableIncome<=20000){0.2/}else if(salaryItem_laborTaxableIncome<=50000){0.3/}else{0.4/}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341564390, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0/}else if({нĿ.˰Ӧ˰ö}<=50000){2000/}else{7000/}', 'if(salaryItem_laborTaxableIncome<=20000){0/}else if(salaryItem_laborTaxableIncome<=50000){2000/}else{7000/}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341811881, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=0){0/}else{{нĿ.˰Ӧ˰ö}*{нĿ.˰˰}-{нĿ.˰۳}}', 'if(salaryItem_laborTaxableIncome<=0){0/}else{salaryItem_laborTaxableIncome*salaryItem_laborTaxRate-salaryItem_laborQuickDeductionFactor}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341909423, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341966905, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341993723, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659342041963, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339063886, '˺ϼ', 1659339063868, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339100354, '籣˺ϼ', 1659339100298, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673751, '', 1659340673739, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673754, '˰', 1659340673739, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917032, '', 1659340916981, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917035, '˰', 1659340916981, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917039, '˰', 1659340916981, 'salaryItem_laborSubtraction', '{нĿ.˰}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341397539, '˰Ӧ˰ö', 1659341397524, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341564447, '˰Ӧ˰ö', 1659341564390, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811897, '˰Ӧ˰ö', 1659341811881, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811901, '˰˰', 1659341811881, 'salaryItem_laborTaxRate', '{нĿ.˰˰}', 'number', 'salaryItem', 3, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811904, '˰۳', 1659341811881, 'salaryItem_laborQuickDeductionFactor', '{нĿ.˰۳}', 'number', 'salaryItem', 4, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341909473, 'ҵ', 1659341909423, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341966920, '˰ϱ', 1659341966905, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341993736, '', 1659341993723, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659342041967, '׼۳ľ', 1659342041963, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202208080403.sql b/resource/sqlupgrade/DM/sql202208080403.sql new file mode 100644 index 000000000..5f653eac0 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202208080403.sql @@ -0,0 +1,53 @@ +Alter table hrsa_bill_detail modify social_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail modify fund_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail modify other_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail modify social_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify fund_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify other_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify social_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify fund_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify other_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify social_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify fund_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify other_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify social_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify fund_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify other_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify social_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify fund_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify other_com_json varchar2(4000); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202208240403.sql b/resource/sqlupgrade/DM/sql202208240403.sql new file mode 100644 index 000000000..2a2df6e91 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202208240403.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_social_security_scheme ADD ( + shared_type varchar2(255) NULL , + tax_agent_ids varchar2(500) NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202208240503.sql b/resource/sqlupgrade/DM/sql202208240503.sql new file mode 100644 index 000000000..dbc6bf9fc --- /dev/null +++ b/resource/sqlupgrade/DM/sql202208240503.sql @@ -0,0 +1,16 @@ +CREATE TABLE HRSA_SALARY_ITEM_HIDE ( + ID NUMBER(38,0) NOT NULL, + SALARY_SOB_ID NUMBER(38,0) NOT NULL, + SALARY_ITEM_ID NUMBER(38,0) NOT NULL, + IS_GROUP NUMBER NOT NULL, + ITEM_HIDE NUMBER(38,0) DEFAULT 0, + CREATOR NUMBER(38,0) NOT NULL, + DELETE_TYPE NUMBER DEFAULT 0 NOT NULL, + TENANT_KEY VARCHAR2(255 BYTE) NOT NULL, + CREATE_TIME DATE DEFAULT sysdate NOT NULL, + UPDATE_TIME DATE DEFAULT sysdate +); +/ + +ALTER TABLE HRSA_SALARY_ITEM_HIDE ADD CONSTRAINT SYS_C0024450 PRIMARY KEY ("ID"); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202210080203.sql b/resource/sqlupgrade/DM/sql202210080203.sql new file mode 100644 index 000000000..46d55e2ed --- /dev/null +++ b/resource/sqlupgrade/DM/sql202210080203.sql @@ -0,0 +1,94 @@ +CREATE TABLE hrsa_excel_bill_detail ( + + id NUMBER(20,0) NOT NULL, + + employee_id NUMBER(20,0) NOT NULL, + + bill_month VARCHAR2(30) NOT NULL, + + bill_status NUMBER(11,0) NOT NULL, + + payment_status NUMBER(11,0) NOT NULL, + + supplementary_month VARCHAR2(50) NULL, + + supplementary_projects VARCHAR2(50) NULL, + + resource_from NUMBER(11,0) NOT NULL, + + social_pay_org NUMBER(11,0) NULL, + + social_account VARCHAR2(50) NULL, + + social_scheme_id NUMBER(20,0) NULL, + + social_payment_base_string CLOB NULL, + + fund_pay_org NUMBER(11,0) NULL, + + fund_account VARCHAR2(50) NULL, + + supplement_fund_account VARCHAR2(50) NULL, + + fund_scheme_id NUMBER(11,0) NULL, + + fund_payment_base_string CLOB NULL, + + other_pay_org NUMBER(11,0) NULL, + + other_scheme_id NUMBER(20,0) NULL, + + other_payment_base_string CLOB NULL, + + social_per_json CLOB NULL, + + social_per_sum CLOB NULL, + + fund_per_json CLOB NULL, + + fund_per_sum CLOB NULL, + + other_per_json CLOB NULL, + + other_per_sum CLOB NULL, + + per_sum CLOB NULL, + + social_com_json CLOB NULL, + + social_com_sum CLOB NULL, + + fund_com_json CLOB NULL, + + fund_com_sum CLOB NULL, + + other_com_json CLOB NULL, + + other_com_sum CLOB NULL, + + com_sum CLOB NULL, + + social_sum CLOB NULL, + + fund_sum CLOB NULL, + + other_sum CLOB NULL, + + total CLOB NULL, + + creator NUMBER(20,0) NOT NULL, + + create_time DATE DEFAULT sysdate, + + update_time DATE DEFAULT sysdate, + + delete_type NUMBER(11,0) NOT NULL, + + tenant_key VARCHAR2(255 BYTE), + + payment_organization NUMBER(20,0) NULL, + +PRIMARY KEY ( id ) + +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202210080403.sql b/resource/sqlupgrade/DM/sql202210080403.sql new file mode 100644 index 000000000..f0b71f93f --- /dev/null +++ b/resource/sqlupgrade/DM/sql202210080403.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_archive ADD ( + run_status varchar2(255) NULL , + add_type varchar2(255) NULL , + stop_type varchar2(255) NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202210170203.sql b/resource/sqlupgrade/DM/sql202210170203.sql new file mode 100644 index 000000000..895fcc2f4 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202210170203.sql @@ -0,0 +1,30 @@ +CREATE TABLE hrsa_insurance_base_info ( + + id NUMBER(38,0) NOT NULL, + + employee_id NUMBER(38,0) NOT NULL, + + payment_organization NUMBER(11,0) NULL, + + social_archives_id NUMBER(38,0) NULL, + + fund_archives_id NUMBER(38,0) NULL, + + other_archives_id NUMBER(38,0) NULL, + + tenant_key VARCHAR2(255 BYTE) NOT NULL, + + creator NUMBER(11,0) NOT NULL, + + delete_type NUMBER(11,0) NOT NULL, + + create_time DATE NOT NULL, + + update_time DATE NOT NULL, + + run_status VARCHAR2(20 BYTE) NOT NULL, + +PRIMARY KEY ( id ) + +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202210170303.sql b/resource/sqlupgrade/DM/sql202210170303.sql new file mode 100644 index 000000000..0de41e5bb --- /dev/null +++ b/resource/sqlupgrade/DM/sql202210170303.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_sob_range ADD employee_statuses VARCHAR(255); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202211090103.sql b/resource/sqlupgrade/DM/sql202211090103.sql new file mode 100644 index 000000000..dd4f51ae3 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202211090103.sql @@ -0,0 +1,41 @@ +create table hrsa_special_add_deduction +( +id NUMBER(38, 0) primary key, +employee_id NUMBER(38, 0) not null, +tax_agent_id NUMBER(38, 0) not null, +children_education varchar2(255) default '' , +continuing_education varchar2(255) default '' , +housing_loan_interest varchar2(255) default '' , +housing_rent varchar2(255) default '', +supporting_elder varchar2(255) default '' , +serious_illness_treatment varchar2(255) default '' , +infant_care varchar2(255) default '', +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +creator NUMBER(38, 0), +delete_type NUMBER(11, 0) default 0 , +tenant_key varchar2(10) default '' +); +/ + +create sequence hrsa_special_a_d_id +start with 1 +increment by 1 +nomaxvalue +nocycle +nocache; +/ + +CREATE TRIGGER hrsa_spec_add_dct_trigger +before INSERT ON hrsa_special_add_deduction FOR each ROW WHEN (new.id IS NULL) +BEGIN +SELECT hrsa_special_a_d_id.nextval into:New.id from dual; +END; +/ + +CREATE TRIGGER hrsa_spec_add_dct_time_trigger +before UPDATE ON hrsa_special_add_deduction FOR each ROW WHEN (new.update_time IS NOT NULL) +BEGIN +SELECT sysdate into:new.update_time from dual; +END; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202211090301.sql b/resource/sqlupgrade/DM/sql202211090301.sql new file mode 100644 index 000000000..d35f99180 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202211090301.sql @@ -0,0 +1,119 @@ +delete from HtmlLabelIndex where id = 539971 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 539971,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539971 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'Rule Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'ҎtO' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlModuleLabel where indexId = 539971 and moduleCode = 'HRM' and type = 'label' ; +/ + +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539971) ; +/ + +delete from HtmlLabelIndex where id = 539970 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 539970,'Ӧ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539970 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Ӧ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Apply Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlModuleLabel where indexId = 539970 and moduleCode = 'HRM' and type = 'label' ; +/ + +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539970) ; +/ + +delete from HtmlLabelIndex where id = 539968 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 539968,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539968 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'set up' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlModuleLabel where indexId = 539968 and moduleCode = 'HRM' and type = 'label' ; +/ + +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539968) ; +/ + +delete from HtmlLabelIndex where id = 539967 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 539967,'רӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539967 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'רӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'Special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlModuleLabel where indexId = 539967 and moduleCode = 'HRM' and type = 'label' ; +/ + +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539967) ; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202211090402.sql b/resource/sqlupgrade/DM/sql202211090402.sql new file mode 100644 index 000000000..5306d7b0f --- /dev/null +++ b/resource/sqlupgrade/DM/sql202211090402.sql @@ -0,0 +1,59 @@ +Delete from LeftMenuInfo where id=100183; +/ + +Delete from LeftMenuConfig where infoid=100183; +/ + +call LMConfig_U_ByInfoInsert (2,100181,0); +/ + +call LMInfo_Insert (100183,539970,'','',2,100181,0,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/appconfig' where id = 100183; +/ + +Delete from LeftMenuInfo where id=100182; +/ + +Delete from LeftMenuConfig where infoid=100182; +/ + +call LMConfig_U_ByInfoInsert (2,100181,-1); +/ + +call LMInfo_Insert (100182,539971,'','',2,100181,-1,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/sysconfig-1' where id = 100182; +/ + +Delete from LeftMenuInfo where id=100180; +/ + +Delete from LeftMenuConfig where infoid=100180; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100180,539967,'','',2,100126,0,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/specialAddDeduction' where id = 100180; +/ + +Delete from LeftMenuInfo where id=100181; +/ + +Delete from LeftMenuConfig where infoid=100181; +/ + +call LMConfig_U_ByInfoInsert (2,100118,9); +/ + +call LMInfo_Insert (100181,539968,'','',2,100118,9,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100181; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202211170503.sql b/resource/sqlupgrade/DM/sql202211170503.sql new file mode 100644 index 000000000..24aec52f8 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202211170503.sql @@ -0,0 +1,8 @@ +alter table HRSA_SALARY_ITEM add SHARED_TYPE number(11) ; +/ + +alter table HRSA_SALARY_ITEM add TAX_AGENT_IDS varchar2(1024); +/ + +ALTER TABLE HRSA_SALARY_ACCT_RECORD ADD LOCK_SALARY_ITEM_IDS varchar2(2000); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202212080903.sql b/resource/sqlupgrade/DM/sql202212080903.sql new file mode 100644 index 000000000..8741ee7ac --- /dev/null +++ b/resource/sqlupgrade/DM/sql202212080903.sql @@ -0,0 +1,69 @@ +CREATE TABLE hrsa_compensation_log ( + + id NUMBER(20,0) NOT NULL, + + payment_agency NUMBER(20,0) NULL, + + payment_organization NUMBER(20,0) NULL, + + employee_id NUMBER(20,0) NULL, + + welfare_type NUMBER(11,0) NULL, + + category_type VARCHAR2(100) NULL, + + country_total VARCHAR2(512) NULL, + + company_total VARCHAR2(512) NULL, + + adjustment_total VARCHAR2(512) NULL, + + adjust_to NUMBER(20,0) NULL, + + bill_month VARCHAR2(30) NULL, + + creator NUMBER(20,0) NULL, + + delete_type NUMBER(11,0) NULL, + + create_time DATE DEFAULT sysdate, + + update_time DATE DEFAULT sysdate, + + tenant_key VARCHAR2(10) NULL, + +PRIMARY KEY ( id ) + +); +/ + +CREATE TABLE hrsa_compensation_config ( + + id NUMBER(20,0) NOT NULL, + + payment_agency NUMBER(20,0) NULL, + + payment_organization NUMBER(20,0) NULL, + + employee_id NUMBER(20,0) NULL, + + welfare_type NUMBER(11,0) NULL, + + category_type VARCHAR2(100) NULL, + + adjust_to NUMBER(20,0) NULL, + + creator NUMBER(20,0) NULL, + + delete_type NUMBER(11,0) NULL, + + create_time DATE DEFAULT sysdate, + + update_time DATE DEFAULT sysdate, + + tenant_key VARCHAR2(10) NULL, + +PRIMARY KEY ( id ) + +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202212081003.sql b/resource/sqlupgrade/DM/sql202212081003.sql new file mode 100644 index 000000000..06ac77fd0 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202212081003.sql @@ -0,0 +1,60 @@ +create table HRSA_SALARY_SEND_RANGE +( + ID NUMBER(38) not null + primary key, + SALARY_SEND_ID NUMBER(38), + GRANT_TYPE VARCHAR2(64), + CREATE_TIME TIMESTAMP(6) default sysdate, + CREATOR NUMBER(38), + UPDATE_TIME TIMESTAMP(6) default sysdate, + DELETE_TYPE NUMBER(11) default 0, + TENANT_KEY VARCHAR2(10) +); +/ + +create sequence HRSA_S_S_R_ID +start with 1 +increment by 1 +nomaxvalue +nocycle +nocache; +/ + +CREATE TRIGGER HRSA_S_S_R_TRIGGER +before INSERT ON HRSA_SALARY_SEND_RANGE FOR each ROW WHEN (NEW.ID IS NULL) +BEGIN +SELECT HRSA_S_S_R_ID.nextval into:NEW.ID from dual; +END; +/ + +create table HRSA_SALARY_SEND_RANGE_OBJ +( + ID NUMBER(38) not null + primary key, + SALARY_SEND_ID NUMBER(38) not null, + SALARY_SEND_RANGE_ID NUMBER(38) not null, + RANGE_TYPE NUMBER(11) not null, + TARGET_TYPE NUMBER(11) not null, + TARGET_ID NUMBER(38) not null, + CREATOR NUMBER(38), + CREATE_TIME DATE default sysdate, + UPDATE_TIME DATE default sysdate, + DELETE_TYPE NUMBER(11) default 0, + TENANT_KEY VARCHAR2(10) +); +/ + +create sequence HRSA_S_S_R_O_ID +start with 1 +increment by 1 +nomaxvalue +nocycle +nocache; +/ + +CREATE TRIGGER HRSA_S_S_R_O_TRIGGER +before INSERT ON HRSA_SALARY_SEND_RANGE_OBJ FOR each ROW WHEN (NEW.ID IS NULL) +BEGIN +SELECT HRSA_S_S_R_O_ID.nextval into:NEW.ID from dual; +END; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202212230103.sql b/resource/sqlupgrade/DM/sql202212230103.sql new file mode 100644 index 000000000..5e461d645 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202212230103.sql @@ -0,0 +1,48 @@ +CREATE TABLE hrsa_salary_sob_back_item ( +id NUMBER(38,0) primary key NOT NULL, +salary_sob_id NUMBER(38,0) DEFAULT NULL NULL, +salary_item_id NUMBER(38,0) DEFAULT NULL NULL, +salary_item_code VARCHAR2(255) DEFAULT NULL NULL, +data_type VARCHAR2(255) DEFAULT NULL NULL, +rounding_mode NUMBER(38,0) DEFAULT NULL NULL, +pattern NUMBER(38,0) DEFAULT NULL NULL, +value_type NUMBER(38,0) DEFAULT NULL NULL, +formula_id NUMBER(38,0) DEFAULT NULL NULL, +back_calc_type NUMBER(38,0) DEFAULT NULL NULL, +tenant_key VARCHAR2(255) DEFAULT NULL NULL, +creator NUMBER(38,0) DEFAULT NULL NULL, +delete_type NUMBER(38,0) DEFAULT NULL NULL, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate +); +/ + +alter table hrsa_salary_acct_record add back_calc_status NUMBER(38,0) null; +/ + +alter table hrsa_salary_acct_result add origin_result_value VARCHAR2(1000) null; +/ + +alter table hrsa_salary_acct_result_report add origin_result_value VARCHAR2(1000) null; +/ + +alter table hrsa_salary_send add salary_acct_type NUMBER(38,0) null; +/ + +alter table hrsa_salary_send add send_status NUMBER(38,0) null; +/ + +alter table hrsa_salary_send_info add salary_acct_type NUMBER(38,0) null; +/ + +alter table hrsa_salary_template add replenish_name VARCHAR2(100) null; +/ + +alter table hrsa_salary_template add replenish_rule VARCHAR2(255) null; +/ + +alter table hrsa_salary_template add replenish_salary_item_setting CLOB null; +/ + +alter table hrsa_acct_result_temp add origin_result_value VARCHAR2(1000) null; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202301310403.sql b/resource/sqlupgrade/DM/sql202301310403.sql new file mode 100644 index 000000000..d3933f433 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202301310403.sql @@ -0,0 +1,92 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629577, 'ս', 'annualIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629578, 'ս˰', 'annualTaxRate', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1675043440772, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629579, 'ս۳', 'annualQuickDeductionFactor', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674894163247, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629580, 'սӦ˰', 'annualTax', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674896933031, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629581, 'Ӧս', 'annualPayable', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674897014605, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629600, 'ս˰', 'annualTaxFreeIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629601, 'ս', 'annualOther', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629602, '׼۳ľս', 'annualDonateTax', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629603, '˰ս', 'annualTaxSavings', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629604, 'עս', 'annualRemark', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'string'); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845590, 2, 746777981115629577, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 0); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845591, 2, 746777981115629578, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 1); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845592, 2, 746777981115629579, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 2); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845593, 2, 746777981115629580, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 3); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845595, 2, 746777981115629600, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 4); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845596, 2, 746777981115629601, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 5); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845597, 2, 746777981115629602, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 6); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845598, 2, 746777981115629603, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 7); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845599, 2, 746777981115629604, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 8); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845594, 2, 746777981115629581, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 9); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674894163247, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=36000){0;}else if({нĿ.ս}<=144000){210;}else if({нĿ.ս}<=300000){1410;}else if({нĿ.ս}<=420000){2660;}else if({нĿ.ս}<=660000){4410;}else if({нĿ.ս}<=960000){7160;}else{15160;}', 'if(salaryItem_annualIncome<=36000){0;}else if(salaryItem_annualIncome<=144000){210;}else if(salaryItem_annualIncome<=300000){1410;}else if(salaryItem_annualIncome<=420000){2660;}else if(salaryItem_annualIncome<=660000){4410;}else if(salaryItem_annualIncome<=960000){7160;}else{15160;}', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674896933031, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}*{нĿ.ս˰}-{нĿ.ս۳}', 'salaryItem_annualIncome*salaryItem_annualTaxRate-salaryItem_annualQuickDeductionFactor', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674897014605, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}-{нĿ.սӦ˰}', 'salaryItem_annualIncome-salaryItem_annualTax', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1675043440772, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=0){0;}else if({нĿ.ս}<=36000){0.03;}else if({нĿ.ս}<=144000){0.1;}else if({нĿ.ս}<=300000){0.2;}else if({нĿ.ս}<=420000){0.25;}else if({нĿ.ս}<=660000){0.3;}else if({нĿ.ս}<=960000){0.35;}else{0.45;}', 'if(salaryItem_annualIncome<=0){0;}else if(salaryItem_annualIncome<=36000){0.03;}else if(salaryItem_annualIncome<=144000){0.1;}else if(salaryItem_annualIncome<=300000){0.2;}else if(salaryItem_annualIncome<=420000){0.25;}else if(salaryItem_annualIncome<=660000){0.3;}else if(salaryItem_annualIncome<=960000){0.35;}else{0.45;}', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674894163265, 'ս', 1674894163247, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933036, 'ս', 1674896933031, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933041, 'ս˰', 1674896933031, 'salaryItem_annualTaxRate', '{нĿ.ս˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933045, 'ս۳', 1674896933031, 'salaryItem_annualQuickDeductionFactor', '{нĿ.ս۳}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014622, 'ս', 1674897014605, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014626, 'սӦ˰', 1674897014605, 'salaryItem_annualTax', '{нĿ.սӦ˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1675043440796, 'ս', 1675043440772, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202302060801.sql b/resource/sqlupgrade/DM/sql202302060801.sql new file mode 100644 index 000000000..cf85fb637 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202302060801.sql @@ -0,0 +1,47 @@ +delete from HtmlLabelIndex where id = 540871 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 540871,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540871 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'file management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 540869 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 540869,'ֶι' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540869 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'Field management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202302060902.sql b/resource/sqlupgrade/DM/sql202302060902.sql new file mode 100644 index 000000000..183a14737 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202302060902.sql @@ -0,0 +1,44 @@ +Delete from LeftMenuInfo where id=100125; +/ + +Delete from LeftMenuConfig where infoid=100125; +/ + +call LMConfig_U_ByInfoInsert (2,100118,2); +/ + +call LMInfo_Insert (100125,538004,'','',2,100118,2,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100125; +/ + +Delete from LeftMenuInfo where id=100185; +/ + +Delete from LeftMenuConfig where infoid=100185; +/ + +call LMConfig_U_ByInfoInsert (2,100125,0); +/ + +call LMInfo_Insert (100185,540871,'','',2,100125,0,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100185; +/ + +Delete from LeftMenuInfo where id=100184; +/ + +Delete from LeftMenuConfig where infoid=100184; +/ + +call LMConfig_U_ByInfoInsert (2,100125,-1); +/ + +call LMInfo_Insert (100184,540869,'','',2,100125,-1,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/fieldManagement' where id = 100184; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202302090303.sql b/resource/sqlupgrade/DM/sql202302090303.sql new file mode 100644 index 000000000..d70a2f03a --- /dev/null +++ b/resource/sqlupgrade/DM/sql202302090303.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_scheme_detail ADD payment_cycle NUMBER(11,0) NULL; +/ + +ALTER TABLE hrsa_scheme_detail ADD account_type NUMBER(11,0) NULL; +/ + +ALTER TABLE hrsa_scheme_detail ADD cycle_setting VARCHAR2(255) NULL; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202304040503.sql b/resource/sqlupgrade/DM/sql202304040503.sql new file mode 100644 index 000000000..774c84cbb --- /dev/null +++ b/resource/sqlupgrade/DM/sql202304040503.sql @@ -0,0 +1,66 @@ +ALTER TABLE hrsa_other_deduction ADD ( + private_pension varchar2(255) NULL +); +/ + +ALTER TABLE hrsa_add_up_situation ADD ( + add_up_private_pension varchar2(255) NULL +); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629605, 'Ͻ', 'privatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1680746056549, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629698, 'ۼƸϽ', 'addUpPrivatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1681201555316, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1680746056549, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{˰۳.Ͻ}', 'otherDeduction_privatePension', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1680746056577, 'Ͻ', 1680746056549, 'otherDeduction_privatePension', '{˰۳.Ͻ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681201555316, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.Ͻ}+{ۼ.ۼƸϽ}', 'salaryItem_privatePension+addUpSituation_addUpPrivatePension', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555332, 'Ͻ', 1681201555316, 'salaryItem_privatePension', '{нĿ.Ͻ}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555338, 'ۼƸϽ', 1681201555316, 'addUpSituation_addUpPrivatePension', '{ۼ.ۼƸϽ}', 'number', 'addUpSituation', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845610, 1, 746777981115629605, 1, 0, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 10); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845611, 1, 746777981115629698, 1, 0, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 11); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681265757380, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}-{нĿ.ۼƸϽ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation-salaryItem_addUpPrivatePension', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757404, 'ǰۼ׼۳ľ', 1681265757380, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757408, 'ǰۼƼ', 1681265757380, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757413, 'ǰۼ۳ϼ', 1681265757380, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757417, 'ǰۼרӿ۳ϼ', 1681265757380, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757421, 'ǰۼר۳ϼ', 1681265757380, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757424, 'ǰۼӦ˰ϼ', 1681265757380, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757428, 'ۼƸϽ', 1681265757380, 'salaryItem_addUpPrivatePension', '{нĿ.ۼƸϽ}', 'number', 'salaryItem', 6, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +update hrsa_sys_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö'; +/ + +update hrsa_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö'; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202304260103.sql b/resource/sqlupgrade/DM/sql202304260103.sql new file mode 100644 index 000000000..55395f986 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202304260103.sql @@ -0,0 +1,2 @@ +update hrsa_sys_salary_item set use_in_employee_salary = 1 where code in ('baseSalary','postSalary'); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202304270203.sql b/resource/sqlupgrade/DM/sql202304270203.sql new file mode 100644 index 000000000..6508455fd --- /dev/null +++ b/resource/sqlupgrade/DM/sql202304270203.sql @@ -0,0 +1,244 @@ +create table hrsa_sub_table +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + sub_table_name varchar2(100) not null, + dimension varchar2(20) not null, + start_month varchar2(10), + end_month varchar2(10), + pay_org_string varchar2(500), + pay_agency_string varchar2(500), + sub_company_string varchar2(500), + depart_string varchar2(500), + grade_string varchar2(500), + position_string varchar2(500), + status_string varchar2(500), + employee_type varchar2(500), + employee_string varchar2(500), + payment_type_string varchar2(100) +); +/ + +create table hrsa_sub_table_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + item_name varchar2(50) not null, + item_value varchar2(500) not null, + index_value int not null, + total_rule varchar2(500), + count_rule varchar2(500), + unit_type int default 2 +); +/ + +alter table hrsa_sub_table add table_type int; +/ + +alter table hrsa_sub_table modify table_type default 0; +/ + +create table hrsa_salary_stats_dim +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + dim_name varchar2(100), + dim_type varchar2(20), + remark varchar2(500), + setting varchar2(2000), + is_default int, + dim_code varchar2(50) +); +/ + +create table hrsa_salary_stats_report +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_name varchar2(100), + dimension varchar2(1000), + tax_agent_setting varchar2(1000), + income_category_setting varchar2(20), + sub_company_setting varchar2(1000), + depart_setting varchar2(1000), + grade_setting varchar2(1000), + position_setting varchar2(1000), + status_setting varchar2(1000), + employee_setting varchar2(1000), + hiredate_setting varchar2(1000), + leavedate_setting varchar2(1000), + salary_start_month date, + salary_end_month date +); +/ + +create table hrsa_salary_statistics_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + item_name varchar2(50), + item_value varchar2(1000), + count_rule varchar2(500), + sum_rule varchar2(500), + avg_rule varchar2(500), + max_rule varchar2(500), + min_rule varchar2(500), + median_rule varchar2(500), + index_value int, + unit_type int, + stat_report_id number +); +/ + +create table hrsa_charts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +); +/ + +create table hrsa_salary_echarts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +); +/ + +alter table hrsa_salary_stats_dim modify dim_type varchar2(30); +/ + +alter table hrsa_salary_stats_report modify income_category_setting varchar2(1000); +/ + +create table hrsa_statreportlogs_detail +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + mainid varchar2(36) not null, + dataid varchar2(50) not null, + belongdataid varchar2(50) not null, + tablename varchar2(200) not null, + tablenamelabelid varchar2(50) default '-1' not null, + tablenamedesc varchar2(50) not null, + fieldname varchar2(200) not null, + fieldnamelabelid varchar2(50) default '-1' not null, + newvalue clob not null, + oldvalue clob not null, + newrealvalue clob not null, + oldrealvalue clob not null, + fielddesc varchar2(200) not null, + showorder int not null, + isdetail int default 0 not null +); +/ + +create table hrsa_statreportlogs +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + log_date date not null, + device varchar2(500) not null, + log_operator number not null, + operatorname varchar2(100), + targetid number default '-1' not null, + targetname clob not null, + modulename varchar2(100) not null, + functionname varchar2(100) not null, + interfacename varchar2(100) not null, + requesturl varchar2(200) not null, + requesturi varchar2(200) not null, + operatetype varchar2(50) not null, + operatetypename varchar2(100) not null, + operatedesc varchar2(3000) not null, + params clob not null, + belongmainid varchar2(36) not null, + clientip varchar2(50) not null, + groupid varchar2(50) not null, + groupnamelabel varchar2(1000) not null, + redoservice varchar2(200) not null, + redocontext clob not null, + cancelservice varchar2(200) not null, + cancelcontext clob not null, + totalruntime number default '0' not null, + mainruntime number default '0' not null, + log_result varchar2(100) not null, + fromterminal varchar2(100) not null, + resultdesc clob not null, + old_content varchar2(3000) not null, + link_type varchar2(20) not null, + link_id number default '0' not null, + old_link_id number default '0' not null +); +/ + +alter table hrsa_salary_stats_report add remark varchar2(100); +/ + +alter table hrsa_salary_stats_report add second_dimension varchar2(100); +/ + +alter table hrsa_salary_stats_report add sort_index varchar2(100); +/ + +alter table hrsa_salary_stats_report add sort_type varchar2(100); +/ + +alter table hrsa_salary_stats_dim add label_id int; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202304270303.sql b/resource/sqlupgrade/DM/sql202304270303.sql new file mode 100644 index 000000000..a2aec6169 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202304270303.sql @@ -0,0 +1,11 @@ +declare +datashowset_id NUMBER; +hrmjobgroups_id NUMBER; +begin +INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, 'нĿ', NULL, '', NULL, NULL, NULL, NULL, '', '', TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL, '', '', '0',SYS_GUID(), '', '', '', '', '1', 0, 1); +SELECT max(id) INTO datashowset_id FROM DATASHOWSET; +INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL); +INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (datashowset_id, '', 'name', '', 1, 1, SYS_GUID(), NULL); +INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (datashowset_id, '', 'name', '2', '', 1, SYS_GUID(), ''); +end; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202304270501.sql b/resource/sqlupgrade/DM/sql202304270501.sql new file mode 100644 index 000000000..5f3f359c9 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202304270501.sql @@ -0,0 +1,23 @@ +delete from HtmlLabelIndex where id = 542781 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 542781,'нͳƱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 542781 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нͳƱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'Salary Statistics Report' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нyӋ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202305050302.sql b/resource/sqlupgrade/DM/sql202305050302.sql new file mode 100644 index 000000000..4264b16d2 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202305050302.sql @@ -0,0 +1,14 @@ +Delete from LeftMenuInfo where id=100187; +/ + +Delete from LeftMenuConfig where infoid=100187; +/ + +call LMConfig_U_ByInfoInsert (2,100118,9); +/ + +call LMInfo_Insert (100187,542781,'','',2,100118,9,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/analysisOfSalaryStatistics' where id = 100187; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202305170903.sql b/resource/sqlupgrade/DM/sql202305170903.sql new file mode 100644 index 000000000..2ab9370a5 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202305170903.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_acct_result_log ( + id NUMBER(38,0) NOT NULL, + datasource NUMBER NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + salary_acct_result_id NUMBER(38,0) NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + operator NUMBER(38,0) NOT NULL, + operate_time DATE NOT NULL, + delete_type NUMBER NOT NULL, + update_time DATE NOT NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202306020403.sql b/resource/sqlupgrade/DM/sql202306020403.sql new file mode 100644 index 000000000..ef3a5bb0b --- /dev/null +++ b/resource/sqlupgrade/DM/sql202306020403.sql @@ -0,0 +1,2 @@ +alter table HRSA_SALARY_ITEM add SORTED_INDEX number(11) null; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202306020603.sql b/resource/sqlupgrade/DM/sql202306020603.sql new file mode 100644 index 000000000..baa13842b --- /dev/null +++ b/resource/sqlupgrade/DM/sql202306020603.sql @@ -0,0 +1,7 @@ +ALTER TABLE HRSA_SALARY_TEMPLATE ADD ( + SMS_STATUS int NULL +); +/ + +UPDATE HRSA_SALARY_TEMPLATE SET MSG_STATUS = 1; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202306080103.sql b/resource/sqlupgrade/DM/sql202306080103.sql new file mode 100644 index 000000000..2ec6df974 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202306080103.sql @@ -0,0 +1,2 @@ +alter table HRSA_TAX_AGENT add SORTED_INDEX number(11) null; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202306200203.sql b/resource/sqlupgrade/DM/sql202306200203.sql new file mode 100644 index 000000000..ffbf0c05d --- /dev/null +++ b/resource/sqlupgrade/DM/sql202306200203.sql @@ -0,0 +1,5 @@ +update hrsa_formula set formula = '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}' , formulaRunScript='salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction' where id = 1651740238860; +/ + +update hrsa_formula_var set delete_type = 1 where id = 1651740241717; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202205100201.sql b/resource/sqlupgrade/JC/sql202205100201.sql new file mode 100644 index 000000000..a4930cad6 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202205100201.sql @@ -0,0 +1,455 @@ +delete from HtmlLabelIndex where id = 537997 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 537997,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537997 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'Salary management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 537998 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 537998,'ҵнʸ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537998 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнʸ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'My salary and benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 537996 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 537996,'˰۽' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537996 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'˰۽' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Individual income tax withholding agent' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Ux' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 537999 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 537999,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537999 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'Social security benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538000 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538000,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538000 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'Social security welfare scheme' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538001 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538001,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538001 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'Social security benefit file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538002 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538002,'籣̨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538002 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'Social security benefit account' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538003 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538003,'нĿ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538003 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нĿ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'Salary item management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нYĿ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538004 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538004,'нʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538004 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'Salary file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нYn' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538005 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538005,'ݲɼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538005 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'ݲɼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'data acquisition' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538006 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538006,'ۼרӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538006 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'ۼרӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Accumulated special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Ӌ헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538007 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538007,'˰۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538007 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'˰۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'Other tax exempt deductions' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'ⶐ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538008 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538008,'ۼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538008 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'ۼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Cumulative situation in previous periods' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Ӌr' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538009 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538009,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538009 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'Attendance reference' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538010 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538010,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538010 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'Salary a / C set' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'нY~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538011 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538011,'нʺ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538011 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нʺ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'Salary accounting' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538012 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538012,'ʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538012 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'ʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Payroll payment' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Yΰl' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538013 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538013,'˰걨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538013 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'˰걨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'Individual income tax return' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 538014 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 538014,'˰˰ʱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538014 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'˰˰ʱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'Individual income tax rate table' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'ʱ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202205100402.sql b/resource/sqlupgrade/JC/sql202205100402.sql new file mode 100644 index 000000000..d297514d6 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202205100402.sql @@ -0,0 +1,269 @@ +Delete from LeftMenuInfo where id=100118; +/ + +Delete from LeftMenuConfig where infoid=100118; +/ + +call LMConfig_U_ByInfoInsert (1,0,-1); +/ + +call LMInfo_Insert (100118,537997,NULL,NULL,1,0,-1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100118; +/ + +Delete from LeftMenuInfo where id=100132; +/ + +Delete from LeftMenuConfig where infoid=100132; +/ + +call LMConfig_U_ByInfoInsert (2,100118,5); +/ + +call LMInfo_Insert (100132,538011,'','',2,100118,5,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/calculate' where id = 100132; +/ + +Delete from LeftMenuInfo where id=100125; +/ + +Delete from LeftMenuConfig where infoid=100125; +/ + +call LMConfig_U_ByInfoInsert (2,100118,2); +/ + +call LMInfo_Insert (100125,538004,'','',2,100118,2,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100125; +/ + +Delete from LeftMenuInfo where id=100130; +/ + +Delete from LeftMenuConfig where infoid=100130; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100130,538009,'','',2,100126,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/attendance' where id = 100130; +/ + +Delete from LeftMenuInfo where id=100129; +/ + +Delete from LeftMenuConfig where infoid=100129; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100129,538008,'','',2,100126,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumSituation' where id = 100129; +/ + +Delete from LeftMenuInfo where id=100120; +/ + +Delete from LeftMenuConfig where infoid=100120; +/ + +call LMConfig_U_ByInfoInsert (2,100118,0); +/ + +call LMInfo_Insert (100120,537999,'','',2,100118,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100120; +/ + +Delete from LeftMenuInfo where id=100123; +/ + +Delete from LeftMenuConfig where infoid=100123; +/ + +call LMConfig_U_ByInfoInsert (2,100120,1); +/ + +call LMInfo_Insert (100123,538002,'','',2,100120,1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/standingBook' where id = 100123; +/ + +Delete from LeftMenuInfo where id=100122; +/ + +Delete from LeftMenuConfig where infoid=100122; +/ + +call LMConfig_U_ByInfoInsert (2,100120,0); +/ + +call LMInfo_Insert (100122,538001,'','',2,100120,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/archives' where id = 100122; +/ + +Delete from LeftMenuInfo where id=100135; +/ + +Delete from LeftMenuConfig where infoid=100135; +/ + +call LMConfig_U_ByInfoInsert (2,100118,8); +/ + +call LMInfo_Insert (100135,537996,'','',2,100118,8,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/taxAgent' where id = 100135; +/ + +Delete from LeftMenuInfo where id=100121; +/ + +Delete from LeftMenuConfig where infoid=100121; +/ + +call LMConfig_U_ByInfoInsert (2,100120,-1); +/ + +call LMInfo_Insert (100121,538000,'','',2,100120,-1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/programme' where id = 100121; +/ + +Delete from LeftMenuInfo where id=100126; +/ + +Delete from LeftMenuConfig where infoid=100126; +/ + +call LMConfig_U_ByInfoInsert (2,100118,3); +/ + +call LMInfo_Insert (100126,538005,'','',2,100118,3,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100126; +/ + +Delete from LeftMenuInfo where id=100127; +/ + +Delete from LeftMenuConfig where infoid=100127; +/ + +call LMConfig_U_ByInfoInsert (2,100126,-1); +/ + +call LMInfo_Insert (100127,538006,'','',2,100126,-1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumDeduct' where id = 100127; +/ + +Delete from LeftMenuInfo where id=100133; +/ + +Delete from LeftMenuConfig where infoid=100133; +/ + +call LMConfig_U_ByInfoInsert (2,100118,6); +/ + +call LMInfo_Insert (100133,538012,'','',2,100118,6,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/payroll' where id = 100133; +/ + +Delete from LeftMenuInfo where id=100128; +/ + +Delete from LeftMenuConfig where infoid=100128; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100128,538007,'','',2,100126,0,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/otherDeduct' where id = 100128; +/ + +Delete from LeftMenuInfo where id=100119; +/ + +Delete from LeftMenuConfig where infoid=100119; +/ + +call LMConfig_U_ByInfoInsert (2,100118,-1); +/ + +call LMInfo_Insert (100119,537998,'','',2,100118,-1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/mySalary' where id = 100119; +/ + +Delete from LeftMenuInfo where id=100131; +/ + +Delete from LeftMenuConfig where infoid=100131; +/ + +call LMConfig_U_ByInfoInsert (2,100118,4); +/ + +call LMInfo_Insert (100131,538010,'','',2,100118,4,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/ledger' where id = 100131; +/ + +Delete from LeftMenuInfo where id=100124; +/ + +Delete from LeftMenuConfig where infoid=100124; +/ + +call LMConfig_U_ByInfoInsert (2,100118,1); +/ + +call LMInfo_Insert (100124,538003,'','',2,100118,1,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryItem' where id = 100124; +/ + +Delete from LeftMenuInfo where id=100134; +/ + +Delete from LeftMenuConfig where infoid=100134; +/ + +call LMConfig_U_ByInfoInsert (2,100118,7); +/ + +call LMInfo_Insert (100134,538013,'','',2,100118,7,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/declare' where id = 100134; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202205130903.sql b/resource/sqlupgrade/JC/sql202205130903.sql new file mode 100644 index 000000000..2c62a0214 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202205130903.sql @@ -0,0 +1,2440 @@ +CREATE TABLE hrsa_acct_result_temp( + id NUMBER(38,0) primary key NOT NULL, + calculate_key varchar2(50) DEFAULT '', + salary_sob_id NUMBER(38,0) DEFAULT 0, + salary_acct_emp_id NUMBER(38,0) DEFAULT 0, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_item_id NUMBER(38,0) DEFAULT 0, + result_value varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT '0', + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +create sequence hrsa_acct_result_temp_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_acct_result_temp_Tri +before insert on hrsa_acct_result_temp +for each row +begin +select hrsa_acct_result_temp_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_add_up_deduction ( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + declare_month DATE DEFAULT sysdate, + add_up_child_education varchar2(255) DEFAULT '', + add_up_continuing_education varchar2(255) DEFAULT '', + add_up_housing_loan_interest varchar2(255) DEFAULT '', + add_up_housing_rent varchar2(255) DEFAULT '' , + add_up_support_elderly varchar2(255) DEFAULT '' , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0 , + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' + ); +/ + +create sequence hrsa_add_up_deduction_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_add_up_deduction_Tri +before insert on hrsa_add_up_deduction +for each row +begin +select hrsa_add_up_deduction_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_add_up_situation( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + tax_year_month date DEFAULT sysdate, + year NUMBER(38,0) DEFAULT 0, + add_up_income varchar2(255) DEFAULT '' , + add_up_subtraction varchar2(255) DEFAULT '' , + add_up_social_security_total varchar2(255) DEFAULT '' , + add_up_accumulation_fund_total varchar2(255) DEFAULT '' , + add_up_child_education varchar2(255) DEFAULT '' , + add_up_continuing_education varchar2(255) DEFAULT '' , + add_up_housing_loan_interest varchar2(255) DEFAULT '' , + add_up_housing_rent varchar2(255) DEFAULT '' , + add_up_support_elderly varchar2(255) DEFAULT '' , + add_up_enterprise_and_other varchar2(255) DEFAULT '', + add_up_other_deduction varchar2(255) DEFAULT '0.00000', + add_up_tax_exempt_income varchar2(255) DEFAULT '' , + add_up_allowed_donation varchar2(255) DEFAULT '' , + add_up_advance_tax varchar2(255) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0 , + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' + ); +/ + +create sequence hrsa_add_up_situation_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_add_up_situation_Tri +before insert on hrsa_add_up_situation +for each row +begin +select hrsa_add_up_situation_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_attend_quote( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_year_month date NOT NULL, + year number DEFAULT 0, + month number DEFAULT 0, + salary_sob_id NUMBER(38,0) DEFAULT '', + source_type number DEFAULT 0, + salary_accounting_status number DEFAULT 0, + attend_cycle varchar2(100) DEFAULT '' , + salary_cycle varchar2(100) DEFAULT '' , + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +create sequence hrsa_attend_quote_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_attend_quote_Tri +before insert on hrsa_attend_quote +for each row +begin +select hrsa_attend_quote_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_attend_quote_data( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + attend_quote_id NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_attend_quote_data_value( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + attend_quote_id NUMBER(38,0) DEFAULT 0, + attend_quote_data_id NUMBER(38,0) NOT NULL, + attend_quote_field_id NUMBER(38,0) NOT NULL, + data_value varchar2(250) NOT NULL, + create_time date DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +create sequence hrsa_attend_quote_d_v_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_attend_quote_d_v_Tri +before insert on hrsa_attend_quote_data_value +for each row +begin +select hrsa_attend_quote_d_v_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_attend_quote_field( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + field_name varchar2(100) DEFAULT '' , + source_type number DEFAULT 0, + field_type number DEFAULT 0, + enable_status number DEFAULT 0, + code varchar2(50) DEFAULT '' , + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +create sequence hrsa_attend_quote_field_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_attend_quote_field_Tri +before insert on hrsa_attend_quote_field +for each row +begin +select hrsa_attend_quote_field_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_attend_quote_sync_set( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + source_type number DEFAULT 0, + current_setting_content varchar2(4000) DEFAULT '', + default_setting_content varchar2(4000) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +create sequence hrsa_attend_quote_sync_set_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_attend_quote_sync_set_Tri +before insert on hrsa_attend_quote_sync_set +for each row +begin +select hrsa_attend_quote_sync_set_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_batch( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + bill_month varchar2(30) NOT NULL, + bill_status number NOT NULL, + social_num number DEFAULT 0, + fund_num number DEFAULT 0 , + other_num number DEFAULT 0 , + social_pay varchar2(4000) NULL, + fund_pay varchar2(4000) NULL, + other_pay varchar2(4000) NULL, + accountant varchar2(200) NOT NULL, + remarks varchar2(60) NULL, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +create sequence hrsa_bill_batch_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_bill_batch_Tri +before insert on hrsa_bill_batch +for each row +begin +select hrsa_bill_batch_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_batch_encdata( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + tablename varchar2(50) NOT NULL, + fieldname varchar2(50) NOT NULL, + enc_value varchar2(4000) NOT NULL, + skey varchar2(4000) NOT NULL, + crc varchar2(4000) NULL, + creater NUMBER(38,0) NULL, + created varchar2(50) NULL, + MODIFIER NUMBER(38,0) NULL, + modified varchar2(50) NULL, + tenant_key varchar2(10) NULL + ); +/ + +CREATE sequence hrsa_bill_batch_encdata_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_bill_batch_encdata_Tri +before insert on hrsa_bill_batch_encdata +for each row +begin +select hrsa_bill_batch_encdata_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_detail( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + bill_month varchar2(30) NOT NULL, + bill_status number NOT NULL, + payment_status number NOT NULL, + supplementary_month varchar2(50) NULL, + supplementary_projects varchar2(50) NULL, + resource_from number NOT NULL, + social_pay_org number NULL, + social_account varchar2(50) NULL, + social_scheme_id NUMBER(38,0) NULL, + social_payment_base_string varchar2(512) NULL, + fund_pay_org number NULL, + fund_account varchar2(50) NULL, + supplement_fund_account varchar2(50) NULL, + fund_scheme_id number NULL, + fund_payment_base_string varchar2(512) NULL, + other_pay_org number NULL, + other_scheme_id NUMBER(38,0) NULL, + other_payment_base_string varchar2(512) NULL, + social_per_json varchar2(512) NULL, + social_per_sum varchar2(512) NULL, + fund_per_json varchar2(512) NULL, + fund_per_sum varchar2(512) NULL, + other_per_json varchar2(512) NULL, + other_per_sum varchar2(512) NULL, + per_sum varchar2(512) NULL, + social_com_json varchar2(512) NULL, + social_com_sum varchar2(512) NULL, + fund_com_json varchar2(512) NULL, + fund_com_sum varchar2(512) NULL, + other_com_json varchar2(512) NULL, + other_com_sum varchar2(512) NULL, + com_sum varchar2(512) NULL, + social_sum varchar2(512) NULL, + fund_sum varchar2(512) NULL, + other_sum varchar2(512) NULL, + total varchar2(512) NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ); +/ + +CREATE sequence hrsa_bill_detail_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_bill_detail_Tri +before insert on hrsa_bill_detail +for each row +begin +select hrsa_bill_detail_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_detail_temp( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + bill_month varchar2(30) NOT NULL, + bill_status number NOT NULL, + payment_status number NOT NULL, + supplementary_month varchar2(50) NULL, + supplementary_projects varchar2(50) NULL, + resource_from number NOT NULL, + social_pay_org number NULL, + social_account varchar2(50) NULL, + social_scheme_id NUMBER(38,0) NULL, + social_payment_base_string varchar2(512) NULL, + fund_pay_org number NULL, + fund_account varchar2(50) NULL, + supplement_fund_account varchar2(50) NULL, + fund_scheme_id NUMBER(38,0) NULL, + fund_payment_base_string varchar2(512) NULL, + other_pay_org number NULL, + other_scheme_id number NULL, + other_payment_base_string varchar2(512) NULL, + social_per_json varchar2(512) NULL, + social_per_sum varchar2(512) NULL, + fund_per_json varchar2(512) NULL, + fund_per_sum varchar2(512) NULL, + other_per_json varchar2(512) NULL, + other_per_sum varchar2(512) NULL, + per_sum varchar2(512) NULL, + social_com_json varchar2(512) NULL, + social_com_sum varchar2(512) NULL, + fund_com_json varchar2(512) NULL, + fund_com_sum varchar2(512) NULL, + other_com_json varchar2(512) NULL, + other_com_sum varchar2(512) NULL, + com_sum varchar2(512) NULL, + social_sum varchar2(512) NULL, + fund_sum varchar2(512) NULL, + other_sum varchar2(512) NULL, + total varchar2(512) NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_bill_detail_temp_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_bill_detail_temp_Tri +before insert on hrsa_bill_detail_temp +for each row +begin +select hrsa_bill_detail_temp_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_bill_inspect( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + bill_month varchar2(30) NOT NULL, + payment_status number NOT NULL, + supplementary_month varchar2(50) NULL, + supplementary_projects varchar2(50) NULL, + inspect_status number NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + +); +/ + +CREATE sequence hrsa_bill_inspect_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_bill_inspect_Tri +before insert on hrsa_bill_inspect +for each row +begin +select hrsa_bill_inspect_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_check_result( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + salary_check_rule_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + ignore_type number NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ); +/ + +CREATE sequence hrsa_check_result_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_check_result_Tri +before insert on hrsa_check_result +for each row +begin +select hrsa_check_result_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_check_result_record( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + salary_check_rule_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + check_result_id NUMBER(38,0) NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ); +/ + +CREATE sequence hrsa_check_result_record_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_check_result_record_Tri +before insert on hrsa_check_result_record +for each row +begin +select hrsa_check_result_record_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_ck_result_detail_temp( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + salary_check_rule_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL, + calculate_key varchar2(50) NOT NULL +); +/ + +CREATE sequence hrsa_ck_result_detail_temp_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_ck_result_detail_temp_Tri +before insert on hrsa_ck_result_detail_temp +for each row +begin +select hrsa_ck_result_detail_temp_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_excel_acct_result( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + result_value varchar2(1000) NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL + ); +/ + +CREATE sequence hrsa_excel_acct_result_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_excel_acct_result_Tri +before insert on hrsa_excel_acct_result +for each row +begin +select hrsa_excel_acct_result_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_formula( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(255) NOT NULL, + description varchar2(255) NULL , + module varchar2(255) NOT NULL, + use_for varchar2(255) NULL , + reference_type varchar2(255) NULL , + return_type varchar2(255) NOT NULL, + validate_type varchar2(255) NOT NULL, + extend_param varchar2(255) NULL , + formula varchar2(4000) NOT NULL, + formulaRunScript varchar2(4000) NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + create_time date NOT NULL, + update_time date NOT NULL + ); +/ + +CREATE TABLE hrsa_formula_var( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(255) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + field_id varchar2(255) NOT NULL, + field_name varchar2(500) NOT NULL, + field_type varchar2(255) NOT NULL, + source varchar2(255) NOT NULL, + order_index number NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + create_time date NOT NULL, + update_time date NOT NULL +); +/ + +CREATE TABLE hrsa_fund_archives( + id number PRIMARY KEY NOT NULL, + employee_id number NOT NULL, + non_payment number NULL, + welfare_type number NOT NULL, + fund_start_time varchar2(20) NULL, + fund_end_time varchar2(20) NULL, + fund_scheme_id number NULL, + fund_account varchar2(50) NULL, + supplement_fund_account varchar2(50) NULL, + payment_organization number NULL, + under_take number NULL, + fund_payment_base_string varchar2(4000) NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_fund_archives_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_fund_archives_Tri +before insert on hrsa_fund_archives +for each row +begin +select hrsa_fund_archives_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_insurance_category( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + insurance_name varchar2(50) NOT NULL, + welfare_type number NOT NULL, + is_use number DEFAULT 1, + payment_scope varchar2(10) NULL, + data_type number DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_other_archives( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + non_payment number NULL, + welfare_type number NOT NULL, + other_start_time varchar2(20) NULL, + other_end_time varchar2(20) NULL, + other_scheme_id NUMBER(38,0) NULL, + payment_organization number NULL, + under_take number NULL, + other_payment_base_string varchar2(4000) NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +CREATE sequence hrsa_other_archives_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_other_archives_Tri +before insert on hrsa_other_archives +for each row +begin +select hrsa_other_archives_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_other_deduction( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + declare_month date DEFAULT sysdate, + business_healthy_insurance varchar2(255) DEFAULT '0.00000', + tax_delay_endowment_insurance varchar2(255) DEFAULT '', + other_deduction varchar2(255) DEFAULT '', + deduction_allowed_donation varchar2(255) DEFAULT '', + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +CREATE sequence hrsa_other_deduction_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_other_deduction_Tri +before insert on hrsa_other_deduction +for each row +begin +select hrsa_other_deduction_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_acct_emp( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + salary_sob_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_month DATE DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +CREATE sequence hrsa_salary_acct_emp_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_acct_emp_Tri +before insert on hrsa_salary_acct_emp +for each row +begin +select hrsa_salary_acct_emp_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_acct_record( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_month DATE DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + tax_cycle DATE DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + salary_sob_id NUMBER(38,0) DEFAULT 0, + status number DEFAULT 1, + acct_times number DEFAULT 0, + description varchar2(100) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_acct_record_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_acct_record_Tri +before insert on hrsa_salary_acct_record +for each row +begin +select hrsa_salary_acct_record_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_acct_result( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + salary_acct_emp_id NUMBER(38,0) DEFAULT 0, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_item_id NUMBER(38,0) DEFAULT 0, + result_value varchar2(1000) DEFAULT '' , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_acct_result_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_acct_result_Tri +before insert on hrsa_salary_acct_result +for each row +begin +select hrsa_salary_acct_result_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_archive( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ); +/ + +CREATE TABLE hrsa_salary_archive_dimission( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + dimission_time_interval varchar2(20) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ); +/ + +CREATE sequence hrsa_salary_archive_d_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_archive_d_Tri +before insert on hrsa_salary_archive_dimission +for each row +begin +select hrsa_salary_archive_d_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_archive_item( + id NUMBER(38,0) NOT NULL, + salary_archive_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + effective_time DATE DEFAULT sysdate, + adjust_reason varchar2(100) DEFAULT '', + salary_item_id NUMBER(38,0) DEFAULT 0, + item_value varchar2(200) DEFAULT '' , + description varchar2(200) DEFAULT '' , + operator NUMBER(38,0) DEFAULT 0, + operate_time date NULL , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_archive_item_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hhrsa_salary_archive_item_Tri +before insert on hrsa_salary_archive_item +for each row +begin +select hrsa_salary_archive_item_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_archive_tax_agent( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_archive_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + effective_time DATE DEFAULT sysdate, + adjust_reason varchar2(100) DEFAULT '' , + tax_agent_id NUMBER(38,0) DEFAULT 0, + operator NUMBER(38,0) DEFAULT 0, + operate_time date NULL , + description varchar2(200) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_archive_tax_a_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_archive_tax_a_Tri +before insert on hrsa_salary_archive_tax_agent +for each row +begin +select hrsa_salary_archive_tax_a_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '' , + code varchar2(100) DEFAULT '' , + system_type number DEFAULT 0, + sys_salary_item_id NUMBER(38,0) DEFAULT 0, + category number DEFAULT 7 , + item_type number DEFAULT 1 , + use_default number DEFAULT 0, + use_in_employee_salary number DEFAULT 0, + rounding_mode number DEFAULT 1 , + pattern number DEFAULT 5 , + value_type number DEFAULT 1 , + datasource number DEFAULT 0, + formula_id NUMBER(38,0) DEFAULT 0, + description varchar2(1000) DEFAULT '', + can_edit number DEFAULT 1 , + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + data_type varchar2(20) NOT NULL +); +/ + +CREATE TABLE hrsa_salary_send( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_month date NOT NULL, + salary_accounting_id NUMBER(38,0) DEFAULT 0, + salary_sob_id NUMBER(38,0) NOT NULL, + send_num number DEFAULT 0, + send_total number DEFAULT 0, + last_send_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_send_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_send_Tri +before insert on hrsa_salary_send +for each row +begin +select hrsa_salary_send_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_send_info( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_send_id NUMBER(38,0) NOT NULL, + salary_month date NOT NULL, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + send_status number DEFAULT 0, + send_time DATE , + salary_template clob NULL, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_salary_sob( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '' , + income_category number DEFAULT 1 , + salary_cycle_type number DEFAULT 3 , + salary_cycle_from_day number DEFAULT 1 , + tax_cycle_type number DEFAULT 3 , + attend_cycle_type number DEFAULT 3 , + attend_cycle_from_day number DEFAULT 1 , + social_security_cycle_type number DEFAULT 3 , + disable number DEFAULT 0, + description varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_sob_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_sob_Tri +before insert on hrsa_salary_sob +for each row +begin +select hrsa_salary_sob_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_adjust_rule( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + day_of_month number DEFAULT 0, + before_adjustment_type number DEFAULT 1 , + after_adjustment_type number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_sob_a_r_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_sob_a_r_Tri +before insert on hrsa_salary_sob_adjust_rule +for each row +begin +select hrsa_salary_sob_a_r_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_check_rule( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + name varchar2(100) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + description varchar2(1000) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_salary_sob_c_r_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_sob_c_r_Tri +before insert on hrsa_salary_sob_check_rule +for each row +begin +select hrsa_salary_sob_c_r_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_default_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + income_category number DEFAULT 1 , + sys_salary_item_id NUMBER(38,0) DEFAULT 0, + can_edit number DEFAULT 1 , + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '', + sob_default_item_group_id NUMBER(38,0) NOT NULL, + sorted_index number NOT NULL +); +/ + +CREATE sequence hrsa_salary_sob_d_i_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_sob_d_i_Tri +before insert on hrsa_salary_sob_default_item +for each row +begin +select hrsa_salary_sob_d_i_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_emp_field( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + field_code varchar2(100) DEFAULT '' , + sorted_index number DEFAULT 0, + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_sob_emp_field_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_sob_emp_field_Tri +before insert on hrsa_salary_sob_emp_field +for each row +begin +select hrsa_salary_sob_emp_field_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + salary_sob_item_group_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + sorted_index number NOT NULL, + description varchar2(1000) DEFAULT '' , + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_salary_sob_item_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_sob_item_Tri +before insert on hrsa_salary_sob_item +for each row +begin +select hrsa_salary_sob_item_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_sob_item_group( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + name varchar2(100) NOT NULL, + sorted_index number NOT NULL, + description varchar2(1000) DEFAULT '', + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE TABLE hrsa_salary_sob_range( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + target_type number DEFAULT 1 , + target_id NUMBER(38,0) DEFAULT 0, + employee_status number DEFAULT 0, + include_type number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_sob_range_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_sob_range_Tri +before insert on hrsa_salary_sob_range +for each row +begin +select hrsa_salary_sob_range_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_salary_template +( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '', + salary_sob_id NUMBER(38,0) NOT NULL, + use_type number DEFAULT 0, + description varchar2(100) DEFAULT '', + email_status number DEFAULT 0, + send_email_id NUMBER(38,0) DEFAULT 0, + msg_status number DEFAULT 0, + theme varchar2(100) DEFAULT '', + background varchar2(2000) DEFAULT '', + text_content varchar2(100) DEFAULT '', + text_content_position number DEFAULT 0, + salary_item_null_status number DEFAULT 0, + salary_item_zero_status number DEFAULT 0, + salary_item_setting clob NOT NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_salary_template_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_salary_template_Tri +before insert on hrsa_salary_template +for each row +begin +select hrsa_salary_template_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_scheme_detail( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + insurance_id NUMBER(38,0) NOT NULL, + primary_id NUMBER(38,0) NOT NULL, + effective_time varchar2(20) NULL, + expiration_time varchar2(20) NULL, + is_payment number DEFAULT 1 , + payment_scope number NOT NULL, + upper_limit varchar2(1024) NULL, + lower_limit varchar2(1024) NULL, + payment_proportion varchar2(1024) NULL, + fixed_cost varchar2(1024) NULL, + valid_num number DEFAULT 2 , + rentention_rule number NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_scheme_detail_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_scheme_detail_Tri +before insert on hrsa_scheme_detail +for each row +begin +select hrsa_scheme_detail_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_sob_default_emp_field( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + field_code varchar2(30) DEFAULT '' , + sorted_index number DEFAULT 0, + can_delete number DEFAULT 0, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_sob_default_item_group( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + income_category number DEFAULT 1 , + name varchar2(100) DEFAULT '', + sorted_index number DEFAULT 0, + description varchar2(1000) DEFAULT '', + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_social_archives( + id number PRIMARY KEY NOT NULL, + employee_id number NOT NULL, + non_payment number NULL, + welfare_type number NOT NULL, + social_start_time varchar2(20) NULL, + social_end_time varchar2(20) NULL, + social_scheme_id number NULL, + social_account varchar2(50) NULL, + payment_organization number NULL, + under_take number NULL, + social_payment_base_string varchar2(4000) NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_social_archives_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_social_archives_Tri +before insert on hrsa_social_archives +for each row +begin +select hrsa_social_archives_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_social_archives_encdata( + id number PRIMARY KEY NOT NULL, + tablename varchar2(50) NOT NULL, + fieldname varchar2(50) NOT NULL, + enc_value varchar2(4000) NOT NULL, + skey varchar2(4000) NOT NULL, + crc varchar2(4000) NULL, + creater number NULL, + created varchar2(50) NULL, + MODIFIER number NULL, + modified varchar2(50) NULL, + tenant_key varchar2(10) NULL +); +/ + +CREATE sequence hrsa_social_a_e_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_social_a_e_Tri +before insert on hrsa_social_archives_encdata +for each row +begin +select hrsa_social_a_e_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_social_security_scheme( + id number PRIMARY KEY NOT NULL, + payment_area varchar2(100) NOT NULL, + payment_type number DEFAULT 1 , + scheme_name varchar2(100) NOT NULL, + welfare_type number NOT NULL, + is_use number DEFAULT 1 , + remarks varchar2(30) DEFAULT '', + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator number DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_social_s_s_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_social_s_s_Tri +before insert on hrsa_social_security_scheme +for each row +begin +select hrsa_social_s_s_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_sys_salary_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '', + code varchar2(100) DEFAULT '', + system_type number DEFAULT 0, + category number DEFAULT 7 , + item_type number DEFAULT 1 , + use_default number DEFAULT 0, + use_in_employee_salary number DEFAULT 0, + rounding_mode number DEFAULT 1 , + pattern number DEFAULT 5 , + value_type number DEFAULT 1 , + datasource number DEFAULT 0, + formula_id NUMBER(38,0) DEFAULT 0, + description varchar2(1000) DEFAULT '', + can_edit number DEFAULT 1 , + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '', + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + data_type varchar2(20) NOT NULL +); +/ + +CREATE TABLE hrsa_sys_tax_rate_base( + id number PRIMARY KEY NOT NULL, + name varchar2(100) NOT NULL, + system_type number NOT NULL, + description varchar2(100) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_sys_tax_rate_base_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_sys_tax_rate_base_Tri +before insert on hrsa_sys_tax_rate_base +for each row +begin +select hrsa_sys_tax_rate_base_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_sys_tax_rate_detail( + id number PRIMARY KEY NOT NULL, + base_id number NOT NULL, + index_num number NOT NULL, + income_lower_limit number(15, 5) NULL, + income_upper_limit number(15, 5) NULL, + duty_free_value number(15, 5) NULL, + duty_free_rate number(15, 5) NULL, + taxable_income_ll number(15, 5) NULL, + taxable_income_ul number(15, 5) NOT NULL, + tax_rate number(15, 5) NOT NULL, + tax_deduction number(15, 5) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +); +/ + +CREATE sequence hrsa_sys_tax_rate_detail_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_sys_tax_rate_detail_Tri +before insert on hrsa_sys_tax_rate_detail +for each row +begin +select hrsa_sys_tax_rate_detail_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_tax_agent( + id number PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '', + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator number DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_tax_agent_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_tax_agent_Tri +before insert on hrsa_tax_agent +for each row +begin +select hrsa_tax_agent_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_tax_declaration( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_month date DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + tax_cycle date DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + tax_agent_id number DEFAULT 0, + description varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_tax_declaration_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_tax_declaration_Tri +before insert on hrsa_tax_declaration +for each row +begin +select hrsa_tax_declaration_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_tax_declaration_detail( + id NUMBER(38,0) NOT NULL, + tax_declaration_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + field_code varchar2(100) DEFAULT '' , + field_value varchar2(1000) DEFAULT '' , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_tax_rate_base( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '' , + system_type number DEFAULT 0, + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_tax_rate_base_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_tax_rate_base_Tri +before insert on hrsa_tax_rate_base +for each row +begin +select hrsa_tax_rate_base_id.nextval into :new.id from dual; +end; +/ + +CREATE TABLE hrsa_tax_rate_detail( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + base_id NUMBER(38,0) DEFAULT 0, + index_num number DEFAULT 0, + income_upper_limit number(15, 5) DEFAULT 0.00000, + income_lower_limit number(15, 5) DEFAULT 0.00000, + duty_free_value number(15, 5) DEFAULT 0.00000, + duty_free_rate number(15, 5) DEFAULT 0.00000, + taxable_income_ul number(15, 5) DEFAULT 0.00000, + taxable_income_ll number(15, 5) DEFAULT 0.00000, + tax_rate number(15, 5) DEFAULT 0.00000, + tax_deduction number(15, 5) DEFAULT 0.00000, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE sequence hrsa_tax_rate_detail_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle; +/ + +create or replace trigger hrsa_tax_rate_detail_Tri +before insert on hrsa_tax_rate_detail +for each row +begin +select hrsa_tax_rate_detail_id.nextval into :new.id from dual; +end; +/ + +ALTER TABLE hrsa_salary_sob_item ADD can_delete number NULL; +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214787, 'нϼ', 'wagesTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651736817711, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214788, 'ȫһԽϼ', 'annualBonusTotal', 1, 5, 22, 0, 0, 2, 2, 2, 1, 1651737358294, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:07','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214789, '˰ǰۿϼ', 'preTaxDeductionsTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651737635353, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:22','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214790, '£ΣӦ˰ϼ', 'income', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651737859216, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:25','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214791, 'ǰۼӦ˰ϼ', 'addUpIncome', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651738034028, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:28','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214792, 'ϸ', 'endowmentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749914746, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214793, 'ҽƸ', 'medicalInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749958879, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214795, 'ʧҵ', 'unemploymentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750005281, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214796, '', 'housingProvidentFund', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750034689, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214797, '£Σר۳ϼ', 'specialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651738826550, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:40','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214798, 'ǰۼר۳ϼ', 'addUpSpecialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651739000845, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214799, 'ۼŮ', 'addUpChildEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739053212, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214800, 'ۼסϢ', 'addUpHousingLoannumbererest', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739100651, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214801, 'ۼס', 'addUpHousingRent', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739151122, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214802, 'ۼƼ', 'addUpContinuingEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739212437, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214803, 'ۼ', 'addUpSupportElderly', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739310959, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214804, 'ǰۼרӿ۳ϼ', 'addUpSpeAddiDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 6, 1651739411365, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214805, '£Σ۳ϼ', 'otherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651739815651, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214806, 'ǰۼ۳ϼ', 'addUpOtherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651740238860, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214807, '£Σ', 'subtraction', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651740311026, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:56:11','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214808, 'ǰۼƼ', 'addUpSubtraction', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651740397225, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214809, '£Σн˰˰', 'taxRate', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742185837, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214810, '£Σн˰۳', 'quickDeductionFactor', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742702735, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214811, 'ǰۼӦ˰ö', 'addUpTaxableIncome', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651745445982, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:12','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214812, 'ǰۼӦ˰', 'addUpTaxPayable', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651748888864, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:14','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214813, 'ǰۼѿ۽˰ϼ', 'addUpAdvanceTax', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651748978482, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:18','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214814, '£ΣӦ˰', 'refundedOrSupplementedTax', 1, 6, 16, 1, 0, 2, 2, 2, 1, 1651749111981,' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214815, '£Σʵнʺϼ', 'netSalaryTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651749240004, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:24','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861648655892480, '', 'baseSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:57:46','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861768948531201, 'λ', 'postSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:57:57','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861880508628992, 'ڿۿ', 'attendanceDeduction', 1, 2, 9, 1, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:04','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093121, '˰ϼ', 'afterTaxReimbursementTotal', 1, 5, 22, 0, 0, 3, 2, 1, 1, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:06','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093122, '', 'annuity', 1, 2, 12, 0, 0, 2, 2, 2, 7, 1651749398360, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093123, 'ҵ', 'commercialHealthInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749448800, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093124, '˰ϱ', 'taxDeferredEndowmentInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749487187, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093125, 'Ʋԭֵ', 'originalValueOfProperty', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:29','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093126, '۳˰', 'deductedTax', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:42','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093127, '', 'other', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749540147, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093128, '£Σ', 'fee', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093129, '£Σ˰', 'taxFreeIncome', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:54','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093130, '˰', 'lessTaxProportion', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646657, '˰ϼ', 'afterTaxAdjustmentTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:59:09','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646658, 'ǰۼƼ˰ϼ', 'addUpTaxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 5, 0, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646659, '£Σ׼ʿ۳ľ', 'allowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651749595061, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646660, 'ǰۼ׼۳ľ', 'addUpAllowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651749675268, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646661, '£Σ˰', 'taxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:25','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646662, '˰ۿϼ', 'afterTaxDeductionsTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:37','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919424520683521, '˰ۿ', 'afterTaxDeductions', 1, 4, 15, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:39','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919682288984064, '˰', 'afterTaxReimbursement', 1, 3, 13, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:40','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919776783499264, '˰', 'afterTaxAdjustment', 1, 3, 14, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:48','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674920588574261248, 'ս', 'annualBonus', 1, 1, 2, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:51','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532371614588928, 'ǰۼ籣˺ϼ', 'addUpSocialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801433504, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-07 10:22:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:44:23','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532667749400576, 'ǰۼƹ˺ϼ', 'addUpAccumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801586972, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-07 10:22:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:40','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697536344384012289, 'ǰۼҵְҵ˺ϼ', 'addUpEnterpriseAndOther', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801667770, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-07 10:22:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:48:07','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651736817711, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.λ}', 'salaryItem_baseSalary+salaryItem_postSalary', 1, 0, to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737358294, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ս}', 'salaryItem_annualBonus', 1, 0, to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737635353, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ڿۿ}', 'salaryItem_attendanceDeduction', 1, 0, to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737859216, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.нϼ}+{нĿ.ȫһԽϼ}-{нĿ.˰ǰۿϼ}', 'salaryItem_wagesTotal+salaryItem_annualBonusTotal-salaryItem_preTaxDeductionsTotal', 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738034028, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}+{ۼ.ۼ}', 'salaryItem_income+addUpSituation_addUpIncome', 1, 0, to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749914746, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ϱո}', 'welfare_9001socialPer', 1, 0, to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749958879, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҽƱո}', 'welfare_9002socialPer', 1, 0, to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750005281, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ʧҵո}', 'welfare_9004socialPer', 1, 0, to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750034689, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ס}', 'welfare_9006fundPer', 1, 0, to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738826550, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ϸ}+{нĿ.ҽƸ}+{нĿ.ʧҵ}+{нĿ.}', 'salaryItem_endowmentInsurance+salaryItem_medicalInsurance+salaryItem_unemploymentInsurance+salaryItem_housingProvidentFund', 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739000845, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σר۳ϼ}+{ۼ.ۼ籣˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'salaryItem_specialDeduction+addUpSituation_addUpSocialSecurityTotal+addUpSituation_addUpAccumulationFundTotal', 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739053212, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼŮ}', 'addUpDeductions_addUpChildEducation', 1, 0, to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739100651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼסϢ}', 'addUpSituation_addUpHousingLoannumbererest', 1, 0, to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739151122, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼס}', 'addUpSituation_addUpHousingRent', 1, 0, to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739212437, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼƼ}', 'addUpSituation_addUpContinuingEducation', 1, 0, to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739310959, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼ}', 'addUpSituation_addUpSupportElderly', 1, 0, to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739411365, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoannumbererest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly', 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739815651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.ҵ}+{нĿ.˰ϱ}+{нĿ.Ʋԭֵ}+{нĿ.۳˰}+{нĿ.}', 'salaryItem_annuity+salaryItem_commercialHealthInsurance+salaryItem_taxDeferredEndowmentInsurance+salaryItem_originalValueOfProperty+salaryItem_deductedTax+salaryItem_other', 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740238860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}+{ۼ.ۼҵְҵ}', 'salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction+addUpSituation_addUpEnterpriseAndOther', 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740311026, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '5000', '5000', 1, 0, to_date('2022-05-05 16:45:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:45:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740397225, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ}+{ۼ.ۼƼ}', 'salaryItem_subtraction+addUpSituation_addUpSubtraction', 1, 0, to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type,extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742185837, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=0){0;}else if({нĿ.ǰۼӦ˰ö}<=36000){0.03;}else if({нĿ.ǰۼӦ˰ö}<=144000){0.1;}else if({нĿ.ǰۼӦ˰ö}<=300000){0.2;}else if({нĿ.ǰۼӦ˰ö}<=420000){0.25;}else if({нĿ.ǰۼӦ˰ö}<=660000){0.3;}else if({нĿ.ǰۼӦ˰ö}<=960000){0.35;}else{0.45;}', 'if(salaryItem_addUpTaxableIncome<=0){0;}else if(salaryItem_addUpTaxableIncome<=36000){0.03;}else if(salaryItem_addUpTaxableIncome<=144000){0.1;}else if(salaryItem_addUpTaxableIncome<=300000){0.2;}else if(salaryItem_addUpTaxableIncome<=420000){0.25;}else if(salaryItem_addUpTaxableIncome<=660000){0.3;}else if(salaryItem_addUpTaxableIncome<=960000){0.35;}else{0.45;}', 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742702735, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=36000){{нĿ.ǰۼӦ˰ö}<=36000){0;}else if({нĿ.ǰۼӦ˰ö}<=144000){2520;}else if({нĿ.ǰۼӦ˰ö}<=300000){16920;}else if({нĿ.ǰۼӦ˰ö}<=420000){31920;}else if({нĿ.ǰۼӦ˰ö}<=660000){52920;}else if({нĿ.ǰۼӦ˰ö}<=960000){85920;}else{181920;}', 'if(salaryItem_addUpTaxableIncome<=36000){0;}else if(salaryItem_addUpTaxableIncome<=144000){2520;}else if(salaryItem_addUpTaxableIncome<=300000){16920;}else if(salaryItem_addUpTaxableIncome<=420000){31920;}else if(salaryItem_addUpTaxableIncome<=660000){52920;}else if(salaryItem_addUpTaxableIncome<=960000){85920;}else{181920;}', 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651745445982, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation', 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748888864, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ö}*{нĿ.£Σн˰˰}-{нĿ.£Σн˰۳}', 'salaryItem_addUpTaxableIncome*salaryItem_taxRate-salaryItem_quickDeductionFactor', 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748978482, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼԤԤ˰}', 'addUpSituation_addUpAdvanceTax', 1, 0, to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749111981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰}-{нĿ.ǰۼѿ۽˰ϼ}-{нĿ.ǰۼƼ˰ϼ}', 'salaryItem_addUpTaxPayable-salaryItem_addUpAdvanceTax-salaryItem_addUpTaxDeduction', 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749240004, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}-{нĿ.£Σר۳ϼ}-{нĿ.£ΣӦ˰}+{нĿ.˰ϼ}+{нĿ.˰ϼ}-{нĿ.˰ۿϼ}', 'salaryItem_income-salaryItem_specialDeduction-salaryItem_refundedOrSupplementedTax+salaryItem_afterTaxAdjustmentTotal+salaryItem_afterTaxReimbursementTotal-salaryItem_afterTaxDeductionsTotal', 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749398360, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҵ}', 'welfare_9007otherPer', 1, 0, to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749448800, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 1, 0, to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749487187, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 1, 0, to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749540147, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 1, 0, to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749595061, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 1, 0, to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749675268, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ׼ʿ۳ľ}+{ۼ.ۼ׼۳ľ}', 'salaryItem_allowedDonation+addUpSituation_addUpAllowedDonation', 1, 0, to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801433504, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}+{ۼ.ۼ籣˺ϼ}', 'welfare_socialPerSum+addUpSituation_addUpSocialSecurityTotal', 1, 0, to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801586972, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'welfare_fundPerSum+addUpSituation_addUpAccumulationFundTotal', 1, 0, to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801667770, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼҵְҵ}', 'welfare_otherPerSum+addUpSituation_addUpEnterpriseAndOther', 1, 0, to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818266, '', 1651736817711, 'salaryItem_baseSalary', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818329, 'λ', 1651736817711, 'salaryItem_postSalary', '{нĿ.λ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737360610, 'ս', 1651737358294, 'salaryItem_annualBonus', '{нĿ.ս}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737636061, 'ڿۿ', 1651737635353, 'salaryItem_attendanceDeduction', '{нĿ.ڿۿ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859281, 'нϼ', 1651737859216, 'salaryItem_wagesTotal', '{нĿ.нϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859342, 'ȫһԽϼ', 1651737859216, 'salaryItem_annualBonusTotal', '{нĿ.ȫһԽϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859401, '˰ǰۿϼ', 1651737859216, 'salaryItem_preTaxDeductionsTotal', '{нĿ.˰ǰۿϼ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035450, '£ΣӦ˰ϼ', 1651738034028, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035488, 'ۼ', 1651738034028, 'addUpSituation_addUpIncome', '{ۼ.ۼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738832854, 'ϸ', 1651738826550, 'salaryItem_endowmentInsurance', '{нĿ.ϸ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837363, 'ҽƸ', 1651738826550, 'salaryItem_medicalInsurance', '{нĿ.ҽƸ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837909, 'ʧҵ', 1651738826550, 'salaryItem_unemploymentInsurance', '{нĿ.ʧҵ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738838429, '', 1651738826550, 'salaryItem_housingProvidentFund', '{нĿ.}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002623, '£Σר۳ϼ', 1651739000845, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002682, 'ۼ籣˺ϼ', 1651739000845, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739003139, 'ۼƹ˺ϼ', 1651739000845, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 2, 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739054270, 'ۼŮ', 1651739053212, 'addUpDeductions_addUpChildEducation', '{ۼרӿ۳.ۼŮ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739101122, 'ۼסϢ', 1651739100651, 'addUpSituation_addUpHousingLoannumbererest', '{ۼ.ۼסϢ}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739151221, 'ۼס', 1651739151122, 'addUpSituation_addUpHousingRent', '{ۼ.ۼס}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739213082, 'ۼƼ', 1651739212437, 'addUpSituation_addUpContinuingEducation', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739311009, 'ۼ', 1651739310959, 'addUpSituation_addUpSupportElderly', '{ۼ.ۼ}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411502, 'ۼŮ', 1651739411365, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411637, 'ۼסϢ', 1651739411365, 'salaryItem_addUpHousingLoannumbererest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411715, 'ۼס', 1651739411365, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411773, 'ۼƼ', 1651739411365, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739412718, 'ۼ', 1651739411365, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739819892, '', 1651739815651, 'salaryItem_annuity', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739822564, 'ҵ', 1651739815651, 'salaryItem_commercialHealthInsurance', '{нĿ.ҵ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739826637, '˰ϱ', 1651739815651, 'salaryItem_taxDeferredEndowmentInsurance', '{нĿ.˰ϱ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739828954, 'Ʋԭֵ?', 1651739815651, 'salaryItem_originalValueOfProperty', '{нĿ.Ʋԭֵ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739829915, '۳˰', 1651739815651, 'salaryItem_deductedTax', '{нĿ.۳˰}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739830465, '', 1651739815651, 'salaryItem_other', '{нĿ.}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740240713, '£Σ۳ϼ', 1651740238860, 'salaryItem_otherDeduction', '{нĿ.£Σ۳ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241221, 'ۼ˰۳', 1651740238860, 'addUpSituation_addUpOtherDeduction', '{ۼ.ۼ˰۳}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241717, 'ۼҵְҵ', 1651740238860, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 2, 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397497, '£Σ', 1651740397225, 'salaryItem_subtraction', '{нĿ.£Σ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397989, 'ۼƼ', 1651740397225, 'addUpSituation_addUpSubtraction', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185950, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185995, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186035, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186085, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186122, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186155, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186199, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 6, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742704826, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705308, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705782, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705831, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706306, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706368, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745446904, 'ǰۼӦ˰ϼ', 1651745445982, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447442, 'ǰۼר۳ϼ', 1651745445982, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447969, 'ǰۼרӿ۳ϼ', 1651745445982, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745448475, 'ǰۼ۳ϼ', 1651745445982, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745451616, 'ǰۼƼ', 1651745445982, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745452097, 'ǰۼ׼۳ľ', 1651745445982, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888918, 'ǰۼӦ˰ö', 1651748888864, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888952, '£Σн˰˰', 1651748888864, 'salaryItem_taxRate', '{нĿ.£Σн˰˰}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888989, '£Σн˰۳', 1651748888864, 'salaryItem_quickDeductionFactor', '{нĿ.£Σн˰۳}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748978520, 'ۼԤԤ˰', 1651748978482, 'addUpSituation_addUpAdvanceTax', '{ۼ.ۼԤԤ˰}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112037, 'ǰۼӦ˰', 1651749111981, 'salaryItem_addUpTaxPayable', '{нĿ.ǰۼӦ˰}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112068, 'ǰۼѿ۽˰ϼ', 1651749111981, 'salaryItem_addUpAdvanceTax', '{нĿ.ǰۼѿ۽˰ϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112116, 'ǰۼƼ˰ϼ', 1651749111981, 'salaryItem_addUpTaxDeduction', '{нĿ.ǰۼƼ˰ϼ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240040, '£ΣӦ˰ϼ', 1651749240004, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240082, '£Σר۳ϼ', 1651749240004, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240117, '£ΣӦ˰', 1651749240004, 'salaryItem_refundedOrSupplementedTax', '{нĿ.£ΣӦ˰}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240164, '˰ϼ', 1651749240004, 'salaryItem_afterTaxAdjustmentTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240199, '˰ϼ', 1651749240004, 'salaryItem_afterTaxReimbursementTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240245, '˰ۿϼ', 1651749240004, 'salaryItem_afterTaxDeductionsTotal', '{нĿ.˰ۿϼ}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749398399, 'ҵ', 1651749398360, 'welfare_9007otherPer', '{籣.ҵ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749448843, 'ҵ', 1651749448800, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749487225, '˰ϱ', 1651749487187, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749540213, '', 1651749540147, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749596472, '׼۳ľ', 1651749595061, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675326, '£Σ׼ʿ۳ľ', 1651749675268, 'salaryItem_allowedDonation', '{нĿ.£Σ׼ʿ۳ľ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675365, 'ۼ׼۳ľ', 1651749675268, 'addUpSituation_addUpAllowedDonation', '{ۼ.ۼ׼۳ľ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749914793, 'ϱո', 1651749914746, 'welfare_9001socialPer', '{籣.ϱո}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749958917, 'ҽƱո', 1651749958879, 'welfare_9002socialPer', '{籣.ҽƱո}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750005320, 'ʧҵո', 1651750005281, 'welfare_9004socialPer', '{籣.ʧҵո}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750034727, 'ס', 1651750034689, 'welfare_9006fundPer', '{籣.ס}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801435862, '籣˺ϼ', 1651801433504, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801436423, 'ۼ籣˺ϼ', 1651801433504, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587331, '˺ϼ', 1651801586972, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587794, 'ۼƹ˺ϼ', 1651801586972, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801669969, '˺ϼ', 1651801667770, 'welfare_otherPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801670474, 'ۼҵְҵ', 1651801667770, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT into hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291652, 'taxAgentName', 0, 0, 0, to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291653, 'username', 1, 0, 0, to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291654, 'departmentName', 2, 0, 0, to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams'); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368900, 4, 703459464954929153, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368899, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368902, 4, 703458434280095745, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368901, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368903, 4, 703458558739300353, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368901, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368905, 4, 674914626953093123, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368906, 4, 674914626953093124, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368907, 4, 674914626953093127, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368908, 4, 674916065864646659, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368910, 4, 704467747234045953, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368911, 4, 704468391612751873, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368912, 4, 704468443048992769, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368913, 4, 704468490269204481, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368914, 4, 704468528928063488, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368915, 4, 703459151591383041, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312448, 1, 703459151591383041, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312449, 1, 674861648655892480, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312450, 1, 674861768948531201, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312451, 1, 674861880508628992, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312452, 1, 674920588574261248, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312453, 1, 674853617092214790, 1, 0, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312454, 1, 674853617092214791, 1, 0, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312455, 1, 674914626953093129, 1, 0, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312456, 1, 703419929857687552, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 7); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312457, 1, 674853617092214792, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312458, 1, 674853617092214793, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312459, 1, 674853617092214795, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312460, 1, 674853617092214796, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312461, 1, 700599184238075904, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312462, 1, 700599446244319233, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312463, 1, 674853617092214797, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312464, 1, 697532371614588928, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 7); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312465, 1, 697532667749400576, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 8); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312466, 1, 697536344384012289, 1, 0, 0, to_date('2022-03-18 16:24:49','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 9); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312467, 1, 674853617092214798, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 10); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312468, 1, 674853617092214803, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312469, 1, 674853617092214802, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312470, 1, 674853617092214801, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312471, 1, 674853617092214800, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312472, 1, 674853617092214799, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312473, 1, 705641858303836161, 1, 0, 0, to_date('2022-03-17 13:48:51','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312474, 1, 674853617092214804, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312475, 1, 674853617092214807, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312476, 1, 674853617092214808, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312477, 1, 674914626953093122, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312478, 1, 674914626953093123, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312479, 1, 674914626953093124, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312480, 1, 674914626953093127, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312481, 1, 674853617092214805, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312482, 1, 674853617092214806, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 7); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312483, 1, 674916065864646659, 1, 0, 0, to_date('2022-03-18 16:30:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 8); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312484, 1, 674916065864646660, 1, 0, 0, to_date('2022-03-18 16:30:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 9); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312485, 1, 674853617092214811, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 0); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312486, 1, 674853617092214809, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 1); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312487, 1, 674853617092214810, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 2); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312488, 1, 674853617092214812, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 3); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312489, 1, 674853617092214813, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 4); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312490, 1, 674916065864646661, 1, 1, 0, to_date('2022-03-18 16:33:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 5); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312491, 1, 674916065864646658, 1, 1, 0, to_date('2022-03-18 16:33:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312492, 1, 674853617092214814, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 7); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312493, 1, 674853617092214815, 1, 1, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614126, 6); +/ + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312494, 1, 700769462612156416, 1, 1, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614126, 7); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614083, 1, 'Լ˰', 0, ' ', SYSDATE, SYSDATE, 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614092, 1, 'ר۳', 1, ' ', SYSDATE, SYSDATE, 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614103, 1, 'ۼרӿ۳', 2, ' ', to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614110, 1, '۳Ϣ', 3, ' ', to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614119, 1, '˰', 4, ' ', to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614126, 1, 'Ӧʵ', 5, ' ', to_date('2022-03-11 14:49:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:28','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368899, 4, 'Ŀ', 0, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368901, 4, '뼰˰', 1, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368904, 4, '۳Ϣ', 2, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368909, 4, '˰', 3, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, 'ϱ', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, 'ҽƱ', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '˱', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, 'ʧҵ', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, 'ס', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, 'ҵ', 3, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, 'ס', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams'); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202205200203.sql b/resource/sqlupgrade/JC/sql202205200203.sql new file mode 100644 index 000000000..8ebf5b90a --- /dev/null +++ b/resource/sqlupgrade/JC/sql202205200203.sql @@ -0,0 +1,12 @@ +ALTER TABLE hrsa_add_up_situation ADD ( + add_up_illness_medical varchar2(255) NULL , + add_up_tax_savings varchar2(255) NULL , + add_up_infant_care varchar2(255) NULL +); +/ + +ALTER TABLE hrsa_add_up_deduction add ( + add_up_illness_medical varchar2(255) NULL, + add_up_infant_care varchar2(255) NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202205310203.sql b/resource/sqlupgrade/JC/sql202205310203.sql new file mode 100644 index 000000000..9d3350e63 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202205310203.sql @@ -0,0 +1,47 @@ +INSERT INTO hrsa_formula (id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1653993466778, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼסϢ}', 'addUpDeductions_addUpHousingLoanInterest', 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993466787, 'ۼסϢ', 1653993466778, 'addUpDeductions_addUpHousingLoanInterest', '{ۼרӿ۳.ۼסϢ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993837931, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼס}', 'addUpDeductions_addUpHousingRent', 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993837947, 'ۼס', 1653993837931, 'addUpDeductions_addUpHousingRent', '{ۼרӿ۳.ۼס}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993954233, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƼ}', 'addUpDeductions_addUpContinuingEducation', 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993954257, 'ۼƼ', 1653993954233, 'addUpDeductions_addUpContinuingEducation', '{ۼרӿ۳.ۼƼ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653994061764, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼ}', 'addUpDeductions_addUpSupportElderly', 1, 0,to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'),to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653994061780, 'ۼ', 1653994061764, 'addUpDeductions_addUpSupportElderly', '{ۼרӿ۳.ۼ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +update hrsa_sys_salary_item set formula_id = 1653993466778 where id = 674853617092214800; +/ + +update hrsa_sys_salary_item set formula_id = 1653993837931 where id = 674853617092214801; +/ + +update hrsa_sys_salary_item set formula_id = 1653993954233 where id = 674853617092214802; +/ + +update hrsa_sys_salary_item set formula_id = 1653994061764 where id = 674853617092214803; +/ + +update hrsa_salary_item set formula_id = 1653993466778 where sys_salary_item_id = 674853617092214800; +/ + +update hrsa_salary_item set formula_id = 1653993837931 where sys_salary_item_id = 674853617092214801; +/ + +update hrsa_salary_item set formula_id = 1653993954233 where sys_salary_item_id = 674853617092214802; +/ + +update hrsa_salary_item set formula_id = 1653994061764 where sys_salary_item_id = 674853617092214803; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202206071403.sql b/resource/sqlupgrade/JC/sql202206071403.sql new file mode 100644 index 000000000..c54be8e40 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202206071403.sql @@ -0,0 +1,131 @@ +CREATE TABLE hrsa_tax_agent_emp +( + id NUMBER(38,0) primary key NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + employee_name varchar2(255) +); +/ + +CREATE TABLE hrsa_tax_agent_emp_change +( + id NUMBER(38,0) primary key NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + change_type number DEFAULT 0 , + employee_name varchar2(255) DEFAULT NULL, + module_type NUMBER(4,0) DEFAULT 0 +); +/ + +CREATE TABLE hrsa_tax_agent_admin +( + id NUMBER(38,0) primary key NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_tax_agent_manage_range +( + id NUMBER(38,0) primary key NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_sub_admin_id NUMBER(38,0) DEFAULT 0, + target_type number DEFAULT 1, + target_id NUMBER(38,0) NOT NULL, + employee_status varchar2(100) NOT NULL, + include_type number DEFAULT 1, + creator NUMBER(38,0) DEFAULT '0', + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + range_type number DEFAULT 0 +); +/ + +CREATE TABLE hrsa_tax_agent_base +( + id NUMBER(38,0) primary key NOT NULL, + devolution_status NUMBER(11,0) DEFAULT 0 , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT '0', + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' +); +/ + +CREATE TABLE hrsa_tax_agent_sub_admin +( + id NUMBER(38,0) primary key NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + description varchar2(100) , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT '0', + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + remark clob +); +/ + +CREATE TABLE hrsa_tax_agent_sub_admin_emp +( + id NUMBER(38,0) primary key NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT '0', + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + tax_agent_id NUMBER(38,0) NOT NULL, + tax_agent_sub_admin_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + employee_name varchar2(255) +); +/ + +ALTER TABLE hrsa_tax_agent add ( + payment_agency varchar2(255) +); +/ + +ALTER TABLE hrsa_salary_sob add ( + tax_agent_id NUMBER(38,0) +); +/ + +INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 1, 0, 'all_teams'); +/ + +ALTER TABLE hrsa_bill_detail_temp add ( + payment_organization NUMBER(38,0) +); +/ + +ALTER TABLE hrsa_bill_detail add ( + payment_organization NUMBER(38,0) +); +/ + +ALTER TABLE hrsa_bill_batch add ( + payment_organization NUMBER(38,0) +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202206090403.sql b/resource/sqlupgrade/JC/sql202206090403.sql new file mode 100644 index 000000000..039aa99b5 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202206090403.sql @@ -0,0 +1,9 @@ +ALTER TABLE hrsa_tax_declaration add ( + income_category number +); +/ + +ALTER TABLE hrsa_tax_declaration_detail add ( + employee_type number +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202206141003.sql b/resource/sqlupgrade/JC/sql202206141003.sql new file mode 100644 index 000000000..8a0e262f9 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202206141003.sql @@ -0,0 +1,44 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836162, 'ۼӤ׶ջ', 'addUpInfantCare', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655196897860, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703419929857687552, 'ǰۼ˰', 'addUpTaxFreeIncome', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197296054, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836161, 'ۼƴҽ', 'addUpIllnessMedical', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197430967, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655196897860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼӤ׶ջ}', 'addUpDeductions_addUpInfantCare', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197296054, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ˰}+{ۼ.ۼ˰}', 'salaryItem_taxFreeIncome+addUpSituation_addUpTaxExemptIncome', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197430967, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƴҽ}', 'addUpDeductions_addUpIllnessMedical', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655196897869, 'ۼӤ׶ջ', 1655196897860, 'addUpDeductions_addUpInfantCare', '{ۼרӿ۳.ۼӤ׶ջ}', 'number', 'addUpDeductions', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296059, '£Σ˰', 1655197296054, 'salaryItem_taxFreeIncome', '{нĿ.£Σ˰}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296063, 'ۼ˰', 1655197296054, 'addUpSituation_addUpTaxExemptIncome', '{ۼ.ۼ˰}', 'number', 'addUpSituation', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197430986, 'ۼƴҽ', 1655197430967, 'addUpDeductions_addUpIllnessMedical', '{ۼרӿ۳.ۼƴҽ}', 'number', 'addUpDeductions', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (728615865977528321, 1, 705641858303836162, 1, 0, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 7); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845569, 1, 674853617092214787, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 8); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845572, 1, 674853617092214788, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 9); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845578, 1, 674853617092214789, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 10); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845567, 1, 733975748932845568, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 11); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202206160500.sql b/resource/sqlupgrade/JC/sql202206160500.sql new file mode 100644 index 000000000..de7812981 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202206160500.sql @@ -0,0 +1,41 @@ +delete from SystemRightDetail where rightid =2693; +/ + +delete from SystemRightsLanguage where id =2693; +/ + +delete from SystemRights where id =2693; +/ + +delete from SystemRightToGroup where rightid =2693; +/ + +delete from SystemRightType where id =36; +/ + +delete from SystemRightGroups where id =-22; +/ + +insert into SystemRights (id,rightdesc,righttype,detachable) values (2693,'нȨ','36',0); +/ + +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,8,'Salary management authority','Salary management authority'); +/ + +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,9,'н','н'); +/ + +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,7,'нȨ','нȨ'); +/ + +insert into SystemRightDetail (id,rightdetailname,rightdetail,rightid) values (43969,'нܹԱ','Salary:Chief',2693); +/ + +insert into SystemRightToGroup(rightid,groupid) values (2693,-22); +/ + +insert into SystemRightGroups (id,rightgroupmark, rightgroupname, rightgroupremark) values(-22,'SALARY','нȨ','н'); +/ + +insert into SystemRightType(id,rightTypeName,rightTypeDesc) VALUES (36,'н','н'); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202206230403.sql b/resource/sqlupgrade/JC/sql202206230403.sql new file mode 100644 index 000000000..1a84b5a61 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202206230403.sql @@ -0,0 +1,29 @@ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655976865885, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}+{нĿ.ۼƴҽ}+{нĿ.ۼӤ׶ջ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoanInterest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly+salaryItem_addUpIllnessMedical+salaryItem_addUpInfantCare', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865909, 'ۼ', 1655976865885, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865913, 'ۼƼ', 1655976865885, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865917, 'ۼס', 1655976865885, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865921, 'ۼסϢ', 1655976865885, 'salaryItem_addUpHousingLoanInterest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865924, 'ۼŮ', 1655976865885, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865929, 'ۼƴҽ', 1655976865885, 'salaryItem_addUpIllnessMedical', '{нĿ.ۼƴҽ}', 'number', 'salaryItem', 5, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865933, 'ۼӤ׶ջ', 1655976865885, 'salaryItem_addUpInfantCare', '{нĿ.ۼӤ׶ջ}', 'number', 'salaryItem', 6, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +update hrsa_sys_salary_item set formula_id = 1655976865885 where id = 674853617092214804; +/ + +update hrsa_salary_item set formula_id = 1655976865885 where sys_salary_item_id = 674853617092214804; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202207110803.sql b/resource/sqlupgrade/JC/sql202207110803.sql new file mode 100644 index 000000000..801b616d4 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202207110803.sql @@ -0,0 +1,22 @@ +CREATE TABLE hrsa_salary_acct_result_report +( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + salary_acct_emp_id varchar2(200) DEFAULT '', + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + employee_id varchar2(200) DEFAULT '', + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_item_id NUMBER(38,0) DEFAULT 0, + result_value varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '', + department_id NUMBER(38,0) DEFAULT 0, + subcompany_id NUMBER(38,0) DEFAULT 0, + costcenter_id NUMBER(38,0) DEFAULT 0, + jobtitle_id NUMBER(38,0) DEFAULT 0, + location_id NUMBER(38,0) DEFAULT 0 +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202207120303.sql b/resource/sqlupgrade/JC/sql202207120303.sql new file mode 100644 index 000000000..a1adf5847 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202207120303.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_sys_conf +( + id NUMBER(38,0) primary key NOT NULL, + conf_key varchar2(200) NOT NULL , + conf_value varchar2(500) NOT NULL, + title varchar2(200) , + module varchar2(200) , + order_weight number , + description varchar2(200) , + delete_type number DEFAULT 0 , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202207210203.sql b/resource/sqlupgrade/JC/sql202207210203.sql new file mode 100644 index 000000000..18db54e12 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202207210203.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_archive ADD ( + tax_agent_id NUMBER(38,0) NULL , + pay_start_date date NULL , + pay_end_date date NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202208051103.sql b/resource/sqlupgrade/JC/sql202208051103.sql new file mode 100644 index 000000000..d43c31244 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202208051103.sql @@ -0,0 +1,137 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599184238075904, '籣˺ϼ', 'socialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339100298, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599446244319233, '˺ϼ', 'accumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339063868, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458434280095745, '', 'laborIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458558739300353, '˰', 'laborTaxFreeIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459151591383041, 'ע', 'description', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'string'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459464954929153, 'Ŀ', 'incomeItems', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'string'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704467747234045953, '˰', 'laborSubtraction', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340673739, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468391612751873, '˰Ӧ˰ö', 'laborTaxableIncome', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340916981, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468443048992769, '˰˰', 'laborTaxRate', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341397524, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468490269204481, '˰۳', 'laborQuickDeductionFactor', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341564390, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468528928063488, '˰Ӧ˰', 'laborTaxPayable', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341811881, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (733975748932845568, '˰', 'taxAdjustment', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629570, 'ҵ', 'commercialHealthInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341909423, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629571, '˰ϱ', 'taxDeferredEndowmentInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341966905, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629572, '', 'other4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341993723, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629573, '£Σ׼۳ľ', 'allowedDonation4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659342041963, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629574, 'ע', 'description4', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'string'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629575, 'ѷнʺϼ', 'issuedTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629576, 'нʺϼ', 'ressueTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339063868, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}', 'welfare_fundPerSum', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339100298, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}', 'welfare_socialPerSum', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340673739, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.}-{нĿ.˰}<=4000){800/}else{0.2*({нĿ.}-{нĿ.˰})}', 'if(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome<=4000){800/}else{0.2*(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome)}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340916981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}-{нĿ.˰}-{нĿ.˰}', 'salaryItem_laborIncome-salaryItem_laborTaxFreeIncome-salaryItem_laborSubtraction', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341397524, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0.2/}else if({нĿ.˰Ӧ˰ö}<=50000){0.3/}else{0.4/}', 'if(salaryItem_laborTaxableIncome<=20000){0.2/}else if(salaryItem_laborTaxableIncome<=50000){0.3/}else{0.4/}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341564390, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0/}else if({нĿ.˰Ӧ˰ö}<=50000){2000/}else{7000/}', 'if(salaryItem_laborTaxableIncome<=20000){0/}else if(salaryItem_laborTaxableIncome<=50000){2000/}else{7000/}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341811881, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=0){0/}else{{нĿ.˰Ӧ˰ö}*{нĿ.˰˰}-{нĿ.˰۳}}', 'if(salaryItem_laborTaxableIncome<=0){0/}else{salaryItem_laborTaxableIncome*salaryItem_laborTaxRate-salaryItem_laborQuickDeductionFactor}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341909423, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341966905, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341993723, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659342041963, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339063886, '˺ϼ', 1659339063868, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339100354, '籣˺ϼ', 1659339100298, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673751, '', 1659340673739, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673754, '˰', 1659340673739, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917032, '', 1659340916981, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917035, '˰', 1659340916981, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917039, '˰', 1659340916981, 'salaryItem_laborSubtraction', '{нĿ.˰}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341397539, '˰Ӧ˰ö', 1659341397524, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341564447, '˰Ӧ˰ö', 1659341564390, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811897, '˰Ӧ˰ö', 1659341811881, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811901, '˰˰', 1659341811881, 'salaryItem_laborTaxRate', '{нĿ.˰˰}', 'number', 'salaryItem', 3, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811904, '˰۳', 1659341811881, 'salaryItem_laborQuickDeductionFactor', '{нĿ.˰۳}', 'number', 'salaryItem', 4, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341909473, 'ҵ', 1659341909423, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341966920, '˰ϱ', 1659341966905, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341993736, '', 1659341993723, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659342041967, '׼۳ľ', 1659342041963, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202208080403.sql b/resource/sqlupgrade/JC/sql202208080403.sql new file mode 100644 index 000000000..5f653eac0 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202208080403.sql @@ -0,0 +1,53 @@ +Alter table hrsa_bill_detail modify social_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail modify fund_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail modify other_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail modify social_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify fund_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify other_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify social_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify fund_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail modify other_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify social_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify fund_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify other_payment_base_string varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify social_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify fund_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify other_per_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify social_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify fund_com_json varchar2(4000); +/ + +Alter table hrsa_bill_detail_temp modify other_com_json varchar2(4000); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202208240403.sql b/resource/sqlupgrade/JC/sql202208240403.sql new file mode 100644 index 000000000..2a2df6e91 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202208240403.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_social_security_scheme ADD ( + shared_type varchar2(255) NULL , + tax_agent_ids varchar2(500) NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202208240503.sql b/resource/sqlupgrade/JC/sql202208240503.sql new file mode 100644 index 000000000..dbc6bf9fc --- /dev/null +++ b/resource/sqlupgrade/JC/sql202208240503.sql @@ -0,0 +1,16 @@ +CREATE TABLE HRSA_SALARY_ITEM_HIDE ( + ID NUMBER(38,0) NOT NULL, + SALARY_SOB_ID NUMBER(38,0) NOT NULL, + SALARY_ITEM_ID NUMBER(38,0) NOT NULL, + IS_GROUP NUMBER NOT NULL, + ITEM_HIDE NUMBER(38,0) DEFAULT 0, + CREATOR NUMBER(38,0) NOT NULL, + DELETE_TYPE NUMBER DEFAULT 0 NOT NULL, + TENANT_KEY VARCHAR2(255 BYTE) NOT NULL, + CREATE_TIME DATE DEFAULT sysdate NOT NULL, + UPDATE_TIME DATE DEFAULT sysdate +); +/ + +ALTER TABLE HRSA_SALARY_ITEM_HIDE ADD CONSTRAINT SYS_C0024450 PRIMARY KEY ("ID"); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202209010603.sql b/resource/sqlupgrade/JC/sql202209010603.sql new file mode 100644 index 000000000..4f7f90f00 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202209010603.sql @@ -0,0 +1,5 @@ +drop sequence hrsa_tax_declaration_id; +/ + +DROP TRIGGER hrsa_tax_declaration_Tri; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202209050303.sql b/resource/sqlupgrade/JC/sql202209050303.sql new file mode 100644 index 000000000..e66079ded --- /dev/null +++ b/resource/sqlupgrade/JC/sql202209050303.sql @@ -0,0 +1,5 @@ +drop sequence hrsa_salary_send_id; +/ + +drop trigger hrsa_salary_send_Tri; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202210080203.sql b/resource/sqlupgrade/JC/sql202210080203.sql new file mode 100644 index 000000000..46d55e2ed --- /dev/null +++ b/resource/sqlupgrade/JC/sql202210080203.sql @@ -0,0 +1,94 @@ +CREATE TABLE hrsa_excel_bill_detail ( + + id NUMBER(20,0) NOT NULL, + + employee_id NUMBER(20,0) NOT NULL, + + bill_month VARCHAR2(30) NOT NULL, + + bill_status NUMBER(11,0) NOT NULL, + + payment_status NUMBER(11,0) NOT NULL, + + supplementary_month VARCHAR2(50) NULL, + + supplementary_projects VARCHAR2(50) NULL, + + resource_from NUMBER(11,0) NOT NULL, + + social_pay_org NUMBER(11,0) NULL, + + social_account VARCHAR2(50) NULL, + + social_scheme_id NUMBER(20,0) NULL, + + social_payment_base_string CLOB NULL, + + fund_pay_org NUMBER(11,0) NULL, + + fund_account VARCHAR2(50) NULL, + + supplement_fund_account VARCHAR2(50) NULL, + + fund_scheme_id NUMBER(11,0) NULL, + + fund_payment_base_string CLOB NULL, + + other_pay_org NUMBER(11,0) NULL, + + other_scheme_id NUMBER(20,0) NULL, + + other_payment_base_string CLOB NULL, + + social_per_json CLOB NULL, + + social_per_sum CLOB NULL, + + fund_per_json CLOB NULL, + + fund_per_sum CLOB NULL, + + other_per_json CLOB NULL, + + other_per_sum CLOB NULL, + + per_sum CLOB NULL, + + social_com_json CLOB NULL, + + social_com_sum CLOB NULL, + + fund_com_json CLOB NULL, + + fund_com_sum CLOB NULL, + + other_com_json CLOB NULL, + + other_com_sum CLOB NULL, + + com_sum CLOB NULL, + + social_sum CLOB NULL, + + fund_sum CLOB NULL, + + other_sum CLOB NULL, + + total CLOB NULL, + + creator NUMBER(20,0) NOT NULL, + + create_time DATE DEFAULT sysdate, + + update_time DATE DEFAULT sysdate, + + delete_type NUMBER(11,0) NOT NULL, + + tenant_key VARCHAR2(255 BYTE), + + payment_organization NUMBER(20,0) NULL, + +PRIMARY KEY ( id ) + +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202210080403.sql b/resource/sqlupgrade/JC/sql202210080403.sql new file mode 100644 index 000000000..f0b71f93f --- /dev/null +++ b/resource/sqlupgrade/JC/sql202210080403.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_archive ADD ( + run_status varchar2(255) NULL , + add_type varchar2(255) NULL , + stop_type varchar2(255) NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202210170203.sql b/resource/sqlupgrade/JC/sql202210170203.sql new file mode 100644 index 000000000..895fcc2f4 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202210170203.sql @@ -0,0 +1,30 @@ +CREATE TABLE hrsa_insurance_base_info ( + + id NUMBER(38,0) NOT NULL, + + employee_id NUMBER(38,0) NOT NULL, + + payment_organization NUMBER(11,0) NULL, + + social_archives_id NUMBER(38,0) NULL, + + fund_archives_id NUMBER(38,0) NULL, + + other_archives_id NUMBER(38,0) NULL, + + tenant_key VARCHAR2(255 BYTE) NOT NULL, + + creator NUMBER(11,0) NOT NULL, + + delete_type NUMBER(11,0) NOT NULL, + + create_time DATE NOT NULL, + + update_time DATE NOT NULL, + + run_status VARCHAR2(20 BYTE) NOT NULL, + +PRIMARY KEY ( id ) + +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202210170303.sql b/resource/sqlupgrade/JC/sql202210170303.sql new file mode 100644 index 000000000..0de41e5bb --- /dev/null +++ b/resource/sqlupgrade/JC/sql202210170303.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_sob_range ADD employee_statuses VARCHAR(255); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202211090103.sql b/resource/sqlupgrade/JC/sql202211090103.sql new file mode 100644 index 000000000..fe1415b27 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202211090103.sql @@ -0,0 +1,41 @@ +create table hrsa_special_add_deduction +( +id NUMBER(38, 0) primary key, +employee_id NUMBER(38, 0) not null, +tax_agent_id NUMBER(38, 0) not null, +children_education varchar2(255) default '' , +continuing_education varchar2(255) default '' , +housing_loan_interest varchar2(255) default '' , +housing_rent varchar2(255) default '', +supporting_elder varchar2(255) default '' , +serious_illness_treatment varchar2(255) default '' , +infant_care varchar2(255) default '', +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +creator NUMBER(38, 0), +delete_type NUMBER(11, 0) default 0 , +tenant_key varchar2(10) default '' +); +/ + +create sequence hrsa_special_a_d_id +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle +nocache; +/ + +CREATE TRIGGER hrsa_spec_add_dct_trigger +before INSERT ON hrsa_special_add_deduction FOR each ROW WHEN (new.id IS NULL) +BEGIN +SELECT hrsa_special_a_d_id.nextval into:New.id from dual; +END; +/ + +CREATE TRIGGER hrsa_spec_add_dct_time_trigger +before UPDATE ON hrsa_special_add_deduction FOR each ROW WHEN (new.update_time IS NOT NULL) +BEGIN +SELECT sysdate into:new.update_time from dual; +END; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202211090301.sql b/resource/sqlupgrade/JC/sql202211090301.sql new file mode 100644 index 000000000..d35f99180 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202211090301.sql @@ -0,0 +1,119 @@ +delete from HtmlLabelIndex where id = 539971 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 539971,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539971 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'Rule Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'ҎtO' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlModuleLabel where indexId = 539971 and moduleCode = 'HRM' and type = 'label' ; +/ + +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539971) ; +/ + +delete from HtmlLabelIndex where id = 539970 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 539970,'Ӧ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539970 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Ӧ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Apply Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlModuleLabel where indexId = 539970 and moduleCode = 'HRM' and type = 'label' ; +/ + +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539970) ; +/ + +delete from HtmlLabelIndex where id = 539968 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 539968,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539968 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'set up' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlModuleLabel where indexId = 539968 and moduleCode = 'HRM' and type = 'label' ; +/ + +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539968) ; +/ + +delete from HtmlLabelIndex where id = 539967 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 539967,'רӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539967 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'רӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'Special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlModuleLabel where indexId = 539967 and moduleCode = 'HRM' and type = 'label' ; +/ + +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539967) ; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202211090402.sql b/resource/sqlupgrade/JC/sql202211090402.sql new file mode 100644 index 000000000..5306d7b0f --- /dev/null +++ b/resource/sqlupgrade/JC/sql202211090402.sql @@ -0,0 +1,59 @@ +Delete from LeftMenuInfo where id=100183; +/ + +Delete from LeftMenuConfig where infoid=100183; +/ + +call LMConfig_U_ByInfoInsert (2,100181,0); +/ + +call LMInfo_Insert (100183,539970,'','',2,100181,0,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/appconfig' where id = 100183; +/ + +Delete from LeftMenuInfo where id=100182; +/ + +Delete from LeftMenuConfig where infoid=100182; +/ + +call LMConfig_U_ByInfoInsert (2,100181,-1); +/ + +call LMInfo_Insert (100182,539971,'','',2,100181,-1,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/sysconfig-1' where id = 100182; +/ + +Delete from LeftMenuInfo where id=100180; +/ + +Delete from LeftMenuConfig where infoid=100180; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100180,539967,'','',2,100126,0,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/specialAddDeduction' where id = 100180; +/ + +Delete from LeftMenuInfo where id=100181; +/ + +Delete from LeftMenuConfig where infoid=100181; +/ + +call LMConfig_U_ByInfoInsert (2,100118,9); +/ + +call LMInfo_Insert (100181,539968,'','',2,100118,9,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100181; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202211170503.sql b/resource/sqlupgrade/JC/sql202211170503.sql new file mode 100644 index 000000000..5a985e45e --- /dev/null +++ b/resource/sqlupgrade/JC/sql202211170503.sql @@ -0,0 +1,8 @@ +alter table HRSA_SALARY_ITEM add SHARED_TYPE number(11); +/ + +alter table HRSA_SALARY_ITEM add TAX_AGENT_IDS varchar2(1024); +/ + +ALTER TABLE HRSA_SALARY_ACCT_RECORD ADD LOCK_SALARY_ITEM_IDS varchar2(2000); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202212080903.sql b/resource/sqlupgrade/JC/sql202212080903.sql new file mode 100644 index 000000000..8741ee7ac --- /dev/null +++ b/resource/sqlupgrade/JC/sql202212080903.sql @@ -0,0 +1,69 @@ +CREATE TABLE hrsa_compensation_log ( + + id NUMBER(20,0) NOT NULL, + + payment_agency NUMBER(20,0) NULL, + + payment_organization NUMBER(20,0) NULL, + + employee_id NUMBER(20,0) NULL, + + welfare_type NUMBER(11,0) NULL, + + category_type VARCHAR2(100) NULL, + + country_total VARCHAR2(512) NULL, + + company_total VARCHAR2(512) NULL, + + adjustment_total VARCHAR2(512) NULL, + + adjust_to NUMBER(20,0) NULL, + + bill_month VARCHAR2(30) NULL, + + creator NUMBER(20,0) NULL, + + delete_type NUMBER(11,0) NULL, + + create_time DATE DEFAULT sysdate, + + update_time DATE DEFAULT sysdate, + + tenant_key VARCHAR2(10) NULL, + +PRIMARY KEY ( id ) + +); +/ + +CREATE TABLE hrsa_compensation_config ( + + id NUMBER(20,0) NOT NULL, + + payment_agency NUMBER(20,0) NULL, + + payment_organization NUMBER(20,0) NULL, + + employee_id NUMBER(20,0) NULL, + + welfare_type NUMBER(11,0) NULL, + + category_type VARCHAR2(100) NULL, + + adjust_to NUMBER(20,0) NULL, + + creator NUMBER(20,0) NULL, + + delete_type NUMBER(11,0) NULL, + + create_time DATE DEFAULT sysdate, + + update_time DATE DEFAULT sysdate, + + tenant_key VARCHAR2(10) NULL, + +PRIMARY KEY ( id ) + +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202212081003.sql b/resource/sqlupgrade/JC/sql202212081003.sql new file mode 100644 index 000000000..df179aa20 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202212081003.sql @@ -0,0 +1,60 @@ +create table HRSA_SALARY_SEND_RANGE +( + ID NUMBER(38) not null + primary key, + SALARY_SEND_ID NUMBER(38), + GRANT_TYPE VARCHAR2(64), + CREATE_TIME TIMESTAMP(6) default sysdate, + CREATOR NUMBER(38), + UPDATE_TIME TIMESTAMP(6) default sysdate, + DELETE_TYPE NUMBER(11) default 0, + TENANT_KEY VARCHAR2(10) +); +/ + +create sequence HRSA_S_S_R_ID +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle +nocache; +/ + +CREATE TRIGGER HRSA_S_S_R_TRIGGER +before INSERT ON HRSA_SALARY_SEND_RANGE FOR each ROW WHEN (NEW.ID IS NULL) +BEGIN +SELECT HRSA_S_S_R_ID.nextval into:NEW.ID from dual; +END; +/ + +create table HRSA_SALARY_SEND_RANGE_OBJ +( + ID NUMBER(38) not null + primary key, + SALARY_SEND_ID NUMBER(38) not null, + SALARY_SEND_RANGE_ID NUMBER(38) not null, + RANGE_TYPE NUMBER(11) not null, + TARGET_TYPE NUMBER(11) not null, + TARGET_ID NUMBER(38) not null, + CREATOR NUMBER(38), + CREATE_TIME DATE default sysdate, + UPDATE_TIME DATE default sysdate, + DELETE_TYPE NUMBER(11) default 0, + TENANT_KEY VARCHAR2(10) +); +/ + +create sequence HRSA_S_S_R_O_ID +start with 1 +increment by 1 +MAXVALUE 9223372036854775807 +nocycle +nocache; +/ + +CREATE TRIGGER HRSA_S_S_R_O_TRIGGER +before INSERT ON HRSA_SALARY_SEND_RANGE_OBJ FOR each ROW WHEN (NEW.ID IS NULL) +BEGIN +SELECT HRSA_S_S_R_O_ID.nextval into:NEW.ID from dual; +END; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202212230103.sql b/resource/sqlupgrade/JC/sql202212230103.sql new file mode 100644 index 000000000..5e461d645 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202212230103.sql @@ -0,0 +1,48 @@ +CREATE TABLE hrsa_salary_sob_back_item ( +id NUMBER(38,0) primary key NOT NULL, +salary_sob_id NUMBER(38,0) DEFAULT NULL NULL, +salary_item_id NUMBER(38,0) DEFAULT NULL NULL, +salary_item_code VARCHAR2(255) DEFAULT NULL NULL, +data_type VARCHAR2(255) DEFAULT NULL NULL, +rounding_mode NUMBER(38,0) DEFAULT NULL NULL, +pattern NUMBER(38,0) DEFAULT NULL NULL, +value_type NUMBER(38,0) DEFAULT NULL NULL, +formula_id NUMBER(38,0) DEFAULT NULL NULL, +back_calc_type NUMBER(38,0) DEFAULT NULL NULL, +tenant_key VARCHAR2(255) DEFAULT NULL NULL, +creator NUMBER(38,0) DEFAULT NULL NULL, +delete_type NUMBER(38,0) DEFAULT NULL NULL, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate +); +/ + +alter table hrsa_salary_acct_record add back_calc_status NUMBER(38,0) null; +/ + +alter table hrsa_salary_acct_result add origin_result_value VARCHAR2(1000) null; +/ + +alter table hrsa_salary_acct_result_report add origin_result_value VARCHAR2(1000) null; +/ + +alter table hrsa_salary_send add salary_acct_type NUMBER(38,0) null; +/ + +alter table hrsa_salary_send add send_status NUMBER(38,0) null; +/ + +alter table hrsa_salary_send_info add salary_acct_type NUMBER(38,0) null; +/ + +alter table hrsa_salary_template add replenish_name VARCHAR2(100) null; +/ + +alter table hrsa_salary_template add replenish_rule VARCHAR2(255) null; +/ + +alter table hrsa_salary_template add replenish_salary_item_setting CLOB null; +/ + +alter table hrsa_acct_result_temp add origin_result_value VARCHAR2(1000) null; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202301310403.sql b/resource/sqlupgrade/JC/sql202301310403.sql new file mode 100644 index 000000000..d3933f433 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202301310403.sql @@ -0,0 +1,92 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629577, 'ս', 'annualIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629578, 'ս˰', 'annualTaxRate', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1675043440772, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629579, 'ս۳', 'annualQuickDeductionFactor', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674894163247, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629580, 'սӦ˰', 'annualTax', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674896933031, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629581, 'Ӧս', 'annualPayable', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674897014605, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629600, 'ս˰', 'annualTaxFreeIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629601, 'ս', 'annualOther', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629602, '׼۳ľս', 'annualDonateTax', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629603, '˰ս', 'annualTaxSavings', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629604, 'עս', 'annualRemark', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'string'); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845590, 2, 746777981115629577, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 0); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845591, 2, 746777981115629578, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 1); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845592, 2, 746777981115629579, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 2); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845593, 2, 746777981115629580, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 3); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845595, 2, 746777981115629600, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 4); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845596, 2, 746777981115629601, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 5); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845597, 2, 746777981115629602, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 6); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845598, 2, 746777981115629603, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 7); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845599, 2, 746777981115629604, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 8); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845594, 2, 746777981115629581, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 9); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674894163247, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=36000){0;}else if({нĿ.ս}<=144000){210;}else if({нĿ.ս}<=300000){1410;}else if({нĿ.ս}<=420000){2660;}else if({нĿ.ս}<=660000){4410;}else if({нĿ.ս}<=960000){7160;}else{15160;}', 'if(salaryItem_annualIncome<=36000){0;}else if(salaryItem_annualIncome<=144000){210;}else if(salaryItem_annualIncome<=300000){1410;}else if(salaryItem_annualIncome<=420000){2660;}else if(salaryItem_annualIncome<=660000){4410;}else if(salaryItem_annualIncome<=960000){7160;}else{15160;}', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674896933031, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}*{нĿ.ս˰}-{нĿ.ս۳}', 'salaryItem_annualIncome*salaryItem_annualTaxRate-salaryItem_annualQuickDeductionFactor', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674897014605, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}-{нĿ.սӦ˰}', 'salaryItem_annualIncome-salaryItem_annualTax', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1675043440772, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=0){0;}else if({нĿ.ս}<=36000){0.03;}else if({нĿ.ս}<=144000){0.1;}else if({нĿ.ս}<=300000){0.2;}else if({нĿ.ս}<=420000){0.25;}else if({нĿ.ս}<=660000){0.3;}else if({нĿ.ս}<=960000){0.35;}else{0.45;}', 'if(salaryItem_annualIncome<=0){0;}else if(salaryItem_annualIncome<=36000){0.03;}else if(salaryItem_annualIncome<=144000){0.1;}else if(salaryItem_annualIncome<=300000){0.2;}else if(salaryItem_annualIncome<=420000){0.25;}else if(salaryItem_annualIncome<=660000){0.3;}else if(salaryItem_annualIncome<=960000){0.35;}else{0.45;}', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674894163265, 'ս', 1674894163247, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933036, 'ս', 1674896933031, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933041, 'ս˰', 1674896933031, 'salaryItem_annualTaxRate', '{нĿ.ս˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933045, 'ս۳', 1674896933031, 'salaryItem_annualQuickDeductionFactor', '{нĿ.ս۳}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014622, 'ս', 1674897014605, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014626, 'սӦ˰', 1674897014605, 'salaryItem_annualTax', '{нĿ.սӦ˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1675043440796, 'ս', 1675043440772, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202302060801.sql b/resource/sqlupgrade/JC/sql202302060801.sql new file mode 100644 index 000000000..cf85fb637 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202302060801.sql @@ -0,0 +1,47 @@ +delete from HtmlLabelIndex where id = 540871 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 540871,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540871 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'file management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelIndex where id = 540869 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 540869,'ֶι' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540869 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'Field management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202302060902.sql b/resource/sqlupgrade/JC/sql202302060902.sql new file mode 100644 index 000000000..183a14737 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202302060902.sql @@ -0,0 +1,44 @@ +Delete from LeftMenuInfo where id=100125; +/ + +Delete from LeftMenuConfig where infoid=100125; +/ + +call LMConfig_U_ByInfoInsert (2,100118,2); +/ + +call LMInfo_Insert (100125,538004,'','',2,100118,2,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100125; +/ + +Delete from LeftMenuInfo where id=100185; +/ + +Delete from LeftMenuConfig where infoid=100185; +/ + +call LMConfig_U_ByInfoInsert (2,100125,0); +/ + +call LMInfo_Insert (100185,540871,'','',2,100125,0,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100185; +/ + +Delete from LeftMenuInfo where id=100184; +/ + +Delete from LeftMenuConfig where infoid=100184; +/ + +call LMConfig_U_ByInfoInsert (2,100125,-1); +/ + +call LMInfo_Insert (100184,540869,'','',2,100125,-1,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/fieldManagement' where id = 100184; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202302090303.sql b/resource/sqlupgrade/JC/sql202302090303.sql new file mode 100644 index 000000000..d70a2f03a --- /dev/null +++ b/resource/sqlupgrade/JC/sql202302090303.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_scheme_detail ADD payment_cycle NUMBER(11,0) NULL; +/ + +ALTER TABLE hrsa_scheme_detail ADD account_type NUMBER(11,0) NULL; +/ + +ALTER TABLE hrsa_scheme_detail ADD cycle_setting VARCHAR2(255) NULL; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202304040503.sql b/resource/sqlupgrade/JC/sql202304040503.sql new file mode 100644 index 000000000..774c84cbb --- /dev/null +++ b/resource/sqlupgrade/JC/sql202304040503.sql @@ -0,0 +1,66 @@ +ALTER TABLE hrsa_other_deduction ADD ( + private_pension varchar2(255) NULL +); +/ + +ALTER TABLE hrsa_add_up_situation ADD ( + add_up_private_pension varchar2(255) NULL +); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629605, 'Ͻ', 'privatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1680746056549, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629698, 'ۼƸϽ', 'addUpPrivatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1681201555316, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number'); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1680746056549, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{˰۳.Ͻ}', 'otherDeduction_privatePension', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1680746056577, 'Ͻ', 1680746056549, 'otherDeduction_privatePension', '{˰۳.Ͻ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681201555316, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.Ͻ}+{ۼ.ۼƸϽ}', 'salaryItem_privatePension+addUpSituation_addUpPrivatePension', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555332, 'Ͻ', 1681201555316, 'salaryItem_privatePension', '{нĿ.Ͻ}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555338, 'ۼƸϽ', 1681201555316, 'addUpSituation_addUpPrivatePension', '{ۼ.ۼƸϽ}', 'number', 'addUpSituation', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845610, 1, 746777981115629605, 1, 0, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 10); +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845611, 1, 746777981115629698, 1, 0, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 11); +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681265757380, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}-{нĿ.ۼƸϽ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation-salaryItem_addUpPrivatePension', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757404, 'ǰۼ׼۳ľ', 1681265757380, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757408, 'ǰۼƼ', 1681265757380, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757413, 'ǰۼ۳ϼ', 1681265757380, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757417, 'ǰۼרӿ۳ϼ', 1681265757380, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757421, 'ǰۼר۳ϼ', 1681265757380, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757424, 'ǰۼӦ˰ϼ', 1681265757380, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757428, 'ۼƸϽ', 1681265757380, 'salaryItem_addUpPrivatePension', '{нĿ.ۼƸϽ}', 'number', 'salaryItem', 6, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')); +/ + +update hrsa_sys_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö'; +/ + +update hrsa_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö'; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202304260103.sql b/resource/sqlupgrade/JC/sql202304260103.sql new file mode 100644 index 000000000..55395f986 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202304260103.sql @@ -0,0 +1,2 @@ +update hrsa_sys_salary_item set use_in_employee_salary = 1 where code in ('baseSalary','postSalary'); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202304270203.sql b/resource/sqlupgrade/JC/sql202304270203.sql new file mode 100644 index 000000000..6508455fd --- /dev/null +++ b/resource/sqlupgrade/JC/sql202304270203.sql @@ -0,0 +1,244 @@ +create table hrsa_sub_table +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + sub_table_name varchar2(100) not null, + dimension varchar2(20) not null, + start_month varchar2(10), + end_month varchar2(10), + pay_org_string varchar2(500), + pay_agency_string varchar2(500), + sub_company_string varchar2(500), + depart_string varchar2(500), + grade_string varchar2(500), + position_string varchar2(500), + status_string varchar2(500), + employee_type varchar2(500), + employee_string varchar2(500), + payment_type_string varchar2(100) +); +/ + +create table hrsa_sub_table_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + item_name varchar2(50) not null, + item_value varchar2(500) not null, + index_value int not null, + total_rule varchar2(500), + count_rule varchar2(500), + unit_type int default 2 +); +/ + +alter table hrsa_sub_table add table_type int; +/ + +alter table hrsa_sub_table modify table_type default 0; +/ + +create table hrsa_salary_stats_dim +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + dim_name varchar2(100), + dim_type varchar2(20), + remark varchar2(500), + setting varchar2(2000), + is_default int, + dim_code varchar2(50) +); +/ + +create table hrsa_salary_stats_report +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_name varchar2(100), + dimension varchar2(1000), + tax_agent_setting varchar2(1000), + income_category_setting varchar2(20), + sub_company_setting varchar2(1000), + depart_setting varchar2(1000), + grade_setting varchar2(1000), + position_setting varchar2(1000), + status_setting varchar2(1000), + employee_setting varchar2(1000), + hiredate_setting varchar2(1000), + leavedate_setting varchar2(1000), + salary_start_month date, + salary_end_month date +); +/ + +create table hrsa_salary_statistics_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + item_name varchar2(50), + item_value varchar2(1000), + count_rule varchar2(500), + sum_rule varchar2(500), + avg_rule varchar2(500), + max_rule varchar2(500), + min_rule varchar2(500), + median_rule varchar2(500), + index_value int, + unit_type int, + stat_report_id number +); +/ + +create table hrsa_charts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +); +/ + +create table hrsa_salary_echarts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +); +/ + +alter table hrsa_salary_stats_dim modify dim_type varchar2(30); +/ + +alter table hrsa_salary_stats_report modify income_category_setting varchar2(1000); +/ + +create table hrsa_statreportlogs_detail +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + mainid varchar2(36) not null, + dataid varchar2(50) not null, + belongdataid varchar2(50) not null, + tablename varchar2(200) not null, + tablenamelabelid varchar2(50) default '-1' not null, + tablenamedesc varchar2(50) not null, + fieldname varchar2(200) not null, + fieldnamelabelid varchar2(50) default '-1' not null, + newvalue clob not null, + oldvalue clob not null, + newrealvalue clob not null, + oldrealvalue clob not null, + fielddesc varchar2(200) not null, + showorder int not null, + isdetail int default 0 not null +); +/ + +create table hrsa_statreportlogs +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + log_date date not null, + device varchar2(500) not null, + log_operator number not null, + operatorname varchar2(100), + targetid number default '-1' not null, + targetname clob not null, + modulename varchar2(100) not null, + functionname varchar2(100) not null, + interfacename varchar2(100) not null, + requesturl varchar2(200) not null, + requesturi varchar2(200) not null, + operatetype varchar2(50) not null, + operatetypename varchar2(100) not null, + operatedesc varchar2(3000) not null, + params clob not null, + belongmainid varchar2(36) not null, + clientip varchar2(50) not null, + groupid varchar2(50) not null, + groupnamelabel varchar2(1000) not null, + redoservice varchar2(200) not null, + redocontext clob not null, + cancelservice varchar2(200) not null, + cancelcontext clob not null, + totalruntime number default '0' not null, + mainruntime number default '0' not null, + log_result varchar2(100) not null, + fromterminal varchar2(100) not null, + resultdesc clob not null, + old_content varchar2(3000) not null, + link_type varchar2(20) not null, + link_id number default '0' not null, + old_link_id number default '0' not null +); +/ + +alter table hrsa_salary_stats_report add remark varchar2(100); +/ + +alter table hrsa_salary_stats_report add second_dimension varchar2(100); +/ + +alter table hrsa_salary_stats_report add sort_index varchar2(100); +/ + +alter table hrsa_salary_stats_report add sort_type varchar2(100); +/ + +alter table hrsa_salary_stats_dim add label_id int; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202304270303.sql b/resource/sqlupgrade/JC/sql202304270303.sql new file mode 100644 index 000000000..a2aec6169 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202304270303.sql @@ -0,0 +1,11 @@ +declare +datashowset_id NUMBER; +hrmjobgroups_id NUMBER; +begin +INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, 'нĿ', NULL, '', NULL, NULL, NULL, NULL, '', '', TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL, '', '', '0',SYS_GUID(), '', '', '', '', '1', 0, 1); +SELECT max(id) INTO datashowset_id FROM DATASHOWSET; +INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL); +INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (datashowset_id, '', 'name', '', 1, 1, SYS_GUID(), NULL); +INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (datashowset_id, '', 'name', '2', '', 1, SYS_GUID(), ''); +end; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202304270501.sql b/resource/sqlupgrade/JC/sql202304270501.sql new file mode 100644 index 000000000..5f3f359c9 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202304270501.sql @@ -0,0 +1,23 @@ +delete from HtmlLabelIndex where id = 542781 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 542781,'нͳƱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 542781 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нͳƱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'Salary Statistics Report' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нyӋ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202305050302.sql b/resource/sqlupgrade/JC/sql202305050302.sql new file mode 100644 index 000000000..4264b16d2 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202305050302.sql @@ -0,0 +1,14 @@ +Delete from LeftMenuInfo where id=100187; +/ + +Delete from LeftMenuConfig where infoid=100187; +/ + +call LMConfig_U_ByInfoInsert (2,100118,9); +/ + +call LMInfo_Insert (100187,542781,'','',2,100118,9,18); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/analysisOfSalaryStatistics' where id = 100187; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202305170903.sql b/resource/sqlupgrade/JC/sql202305170903.sql new file mode 100644 index 000000000..2ab9370a5 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202305170903.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_acct_result_log ( + id NUMBER(38,0) NOT NULL, + datasource NUMBER NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + salary_acct_result_id NUMBER(38,0) NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + operator NUMBER(38,0) NOT NULL, + operate_time DATE NOT NULL, + delete_type NUMBER NOT NULL, + update_time DATE NOT NULL +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202306020403.sql b/resource/sqlupgrade/JC/sql202306020403.sql new file mode 100644 index 000000000..066cd2785 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202306020403.sql @@ -0,0 +1,2 @@ +alter table HRSA_SALARY_ITEM add sorted_index number(11) null; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202306020603.sql b/resource/sqlupgrade/JC/sql202306020603.sql new file mode 100644 index 000000000..2647c87eb --- /dev/null +++ b/resource/sqlupgrade/JC/sql202306020603.sql @@ -0,0 +1,7 @@ +ALTER TABLE hrsa_salary_template ADD ( + sms_status int NULL +); +/ + +UPDATE hrsa_salary_template SET msg_status = 1; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202306080103.sql b/resource/sqlupgrade/JC/sql202306080103.sql new file mode 100644 index 000000000..2ec6df974 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202306080103.sql @@ -0,0 +1,2 @@ +alter table HRSA_TAX_AGENT add SORTED_INDEX number(11) null; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202306200203.sql b/resource/sqlupgrade/JC/sql202306200203.sql new file mode 100644 index 000000000..ffbf0c05d --- /dev/null +++ b/resource/sqlupgrade/JC/sql202306200203.sql @@ -0,0 +1,5 @@ +update hrsa_formula set formula = '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}' , formulaRunScript='salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction' where id = 1651740238860; +/ + +update hrsa_formula_var set delete_type = 1 where id = 1651740241717; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202205100201.sql b/resource/sqlupgrade/Mysql/sql202205100201.sql new file mode 100644 index 000000000..6cbf0ae7b --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202205100201.sql @@ -0,0 +1,340 @@ +delete from HtmlLabelIndex where id = 537997 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 537997,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537997 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'Salary management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 537998 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 537998,'ҵнʸ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537998 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнʸ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'My salary and benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 537996 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 537996,'˰۽' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537996 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'˰۽' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Individual income tax withholding agent' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Ux' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 537999 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 537999,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537999 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'Social security benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538000 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538000,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538000 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'Social security welfare scheme' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538001 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538001,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538001 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'Social security benefit file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538002 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538002,'籣̨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538002 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'Social security benefit account' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538003 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538003,'нĿ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538003 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нĿ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'Salary item management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нYĿ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538004 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538004,'нʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538004 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'Salary file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нYn' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538005 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538005,'ݲɼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538005 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'ݲɼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'data acquisition' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538006 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538006,'ۼרӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538006 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'ۼרӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Accumulated special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Ӌ헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538007 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538007,'˰۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538007 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'˰۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'Other tax exempt deductions' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'ⶐ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538008 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538008,'ۼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538008 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'ۼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Cumulative situation in previous periods' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Ӌr' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538009 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538009,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538009 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'Attendance reference' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538010 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538010,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538010 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'Salary a / C set' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'нY~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538011 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538011,'нʺ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538011 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нʺ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'Salary accounting' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538012 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538012,'ʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538012 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'ʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Payroll payment' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Yΰl' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538013 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538013,'˰걨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538013 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'˰걨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'Individual income tax return' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538014 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538014,'˰˰ʱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538014 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'˰˰ʱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'Individual income tax rate table' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'ʱ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202205100402.sql b/resource/sqlupgrade/Mysql/sql202205100402.sql new file mode 100644 index 000000000..a8b6dc00a --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202205100402.sql @@ -0,0 +1,197 @@ +Delete from LeftMenuInfo where id=100118 +; +Delete from LeftMenuConfig where infoid=100118 +; +call LMConfig_U_ByInfoInsert (1,0,-1) +; +call LMInfo_Insert (100118,537997,NULL,NULL,1,0,-1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100118 +; + +Delete from LeftMenuInfo where id=100132 +; +Delete from LeftMenuConfig where infoid=100132 +; +call LMConfig_U_ByInfoInsert (2,100118,5) +; +call LMInfo_Insert (100132,538011,'','',2,100118,5,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/calculate' where id = 100132 +; + +Delete from LeftMenuInfo where id=100125 +; +Delete from LeftMenuConfig where infoid=100125 +; +call LMConfig_U_ByInfoInsert (2,100118,2) +; +call LMInfo_Insert (100125,538004,'','',2,100118,2,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100125 +; + +Delete from LeftMenuInfo where id=100130 +; +Delete from LeftMenuConfig where infoid=100130 +; +call LMConfig_U_ByInfoInsert (2,100126,0) +; +call LMInfo_Insert (100130,538009,'','',2,100126,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/attendance' where id = 100130 +; + +Delete from LeftMenuInfo where id=100129 +; +Delete from LeftMenuConfig where infoid=100129 +; +call LMConfig_U_ByInfoInsert (2,100126,0) +; +call LMInfo_Insert (100129,538008,'','',2,100126,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumSituation' where id = 100129 +; + +Delete from LeftMenuInfo where id=100120 +; +Delete from LeftMenuConfig where infoid=100120 +; +call LMConfig_U_ByInfoInsert (2,100118,0) +; +call LMInfo_Insert (100120,537999,'','',2,100118,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100120 +; + +Delete from LeftMenuInfo where id=100123 +; +Delete from LeftMenuConfig where infoid=100123 +; +call LMConfig_U_ByInfoInsert (2,100120,1) +; +call LMInfo_Insert (100123,538002,'','',2,100120,1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/standingBook' where id = 100123 +; + +Delete from LeftMenuInfo where id=100122 +; +Delete from LeftMenuConfig where infoid=100122 +; +call LMConfig_U_ByInfoInsert (2,100120,0) +; +call LMInfo_Insert (100122,538001,'','',2,100120,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/archives' where id = 100122 +; + +Delete from LeftMenuInfo where id=100135 +; +Delete from LeftMenuConfig where infoid=100135 +; +call LMConfig_U_ByInfoInsert (2,100118,8) +; +call LMInfo_Insert (100135,537996,'','',2,100118,8,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/taxAgent' where id = 100135 +; + +Delete from LeftMenuInfo where id=100121 +; +Delete from LeftMenuConfig where infoid=100121 +; +call LMConfig_U_ByInfoInsert (2,100120,-1) +; +call LMInfo_Insert (100121,538000,'','',2,100120,-1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/programme' where id = 100121 +; + +Delete from LeftMenuInfo where id=100126 +; +Delete from LeftMenuConfig where infoid=100126 +; +call LMConfig_U_ByInfoInsert (2,100118,3) +; +call LMInfo_Insert (100126,538005,'','',2,100118,3,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100126 +; + +Delete from LeftMenuInfo where id=100127 +; +Delete from LeftMenuConfig where infoid=100127 +; +call LMConfig_U_ByInfoInsert (2,100126,-1) +; +call LMInfo_Insert (100127,538006,'','',2,100126,-1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumDeduct' where id = 100127 +; + +Delete from LeftMenuInfo where id=100133 +; +Delete from LeftMenuConfig where infoid=100133 +; +call LMConfig_U_ByInfoInsert (2,100118,6) +; +call LMInfo_Insert (100133,538012,'','',2,100118,6,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/payroll' where id = 100133 +; + +Delete from LeftMenuInfo where id=100128 +; +Delete from LeftMenuConfig where infoid=100128 +; +call LMConfig_U_ByInfoInsert (2,100126,0) +; +call LMInfo_Insert (100128,538007,'','',2,100126,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/otherDeduct' where id = 100128 +; + +Delete from LeftMenuInfo where id=100119 +; +Delete from LeftMenuConfig where infoid=100119 +; +call LMConfig_U_ByInfoInsert (2,100118,-1) +; +call LMInfo_Insert (100119,537998,'','',2,100118,-1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/mySalary' where id = 100119 +; + +Delete from LeftMenuInfo where id=100131 +; +Delete from LeftMenuConfig where infoid=100131 +; +call LMConfig_U_ByInfoInsert (2,100118,4) +; +call LMInfo_Insert (100131,538010,'','',2,100118,4,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/ledger' where id = 100131 +; + +Delete from LeftMenuInfo where id=100124 +; +Delete from LeftMenuConfig where infoid=100124 +; +call LMConfig_U_ByInfoInsert (2,100118,1) +; +call LMInfo_Insert (100124,538003,'','',2,100118,1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryItem' where id = 100124 +; + +Delete from LeftMenuInfo where id=100134 +; +Delete from LeftMenuConfig where infoid=100134 +; +call LMConfig_U_ByInfoInsert (2,100118,7) +; +call LMInfo_Insert (100134,538013,'','',2,100118,7,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/declare' where id = 100134 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202205130903.sql b/resource/sqlupgrade/Mysql/sql202205130903.sql new file mode 100644 index 000000000..6d13096a0 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202205130903.sql @@ -0,0 +1,1464 @@ +CREATE TABLE hrsa_acct_result_temp ( + id bigint(0) NOT NULL AUTO_INCREMENT, + calculate_key varchar(50) NOT NULL DEFAULT '' COMMENT 'ʱɵuuidijһκ', + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нid', + salary_acct_emp_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺԱid', + salary_acct_record_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺid', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Աid', + tax_agent_id bigint(0) NOT NULL DEFAULT 0 COMMENT '˰۽id', + salary_item_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нĿid', + result_value varchar(1000) NOT NULL DEFAULT '' COMMENT 'ֵ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_calculate_key(calculate_key) USING BTREE +) COMMENT = 'нʺʱ洢' ; + + + + +CREATE TABLE hrsa_add_up_deduction ( + id bigint(0) NOT NULL AUTO_INCREMENT, + employee_id bigint(0) NOT NULL COMMENT 'ԱϢid', + tax_agent_id bigint(0) NOT NULL COMMENT '˰۽˵id', + declare_month datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '걨·', + add_up_child_education varchar(255) NULL DEFAULT '' COMMENT 'ۼŮ', + add_up_continuing_education varchar(255) NULL DEFAULT '' COMMENT 'ۼƼ', + add_up_housing_loan_interest varchar(255) NULL DEFAULT '' COMMENT 'ۼסϢ', + add_up_housing_rent varchar(255) NULL DEFAULT '' COMMENT 'ۼס', + add_up_support_elderly varchar(255) NULL DEFAULT '' COMMENT 'ۼ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_employee_id(employee_id) USING BTREE, + INDEX idx_declare_month(declare_month) USING BTREE +) COMMENT = 'ݲɼ-ۼרӿ۳' ; + + + +CREATE TABLE hrsa_add_up_situation ( + id bigint(0) NOT NULL AUTO_INCREMENT, + employee_id bigint(0) NOT NULL COMMENT 'ԱϢid', + tax_agent_id bigint(0) NOT NULL COMMENT '˰۽˵id', + tax_year_month datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '˰', + year int(0) NOT NULL DEFAULT 0 COMMENT '', + add_up_income varchar(255) NULL DEFAULT '' COMMENT 'ۼ', + add_up_subtraction varchar(255) NULL DEFAULT '' COMMENT 'ۼƼ', + add_up_social_security_total varchar(255) NULL DEFAULT '' COMMENT 'ۼ籣˺ϼ', + add_up_accumulation_fund_total varchar(255) NULL DEFAULT '' COMMENT 'ۼƹ˺ϼ', + add_up_child_education varchar(255) NULL DEFAULT '' COMMENT 'ۼŮ', + add_up_continuing_education varchar(255) NULL DEFAULT '' COMMENT 'ۼƼ', + add_up_housing_loan_interest varchar(255) NULL DEFAULT '' COMMENT 'ۼסϢ', + add_up_housing_rent varchar(255) NULL DEFAULT '' COMMENT 'ۼס', + add_up_support_elderly varchar(255) NULL DEFAULT '' COMMENT 'ۼ', + add_up_enterprise_and_other varchar(255) NULL DEFAULT '' COMMENT 'ۼҵְҵ', + add_up_other_deduction varchar(255) NULL DEFAULT '0.00000' COMMENT 'ۼ۳', + add_up_tax_exempt_income varchar(255) NULL DEFAULT '' COMMENT 'ۼ˰', + add_up_allowed_donation varchar(255) NULL DEFAULT '' COMMENT 'ۼ׼۳ľ', + add_up_advance_tax varchar(255) NULL DEFAULT '' COMMENT 'ۼԤԤ˰', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_employee_id(employee_id) USING BTREE, + INDEX idx_tax_year_month(tax_year_month) USING BTREE +) COMMENT = 'ݲɼ-ۼ' ; + + + + + +CREATE TABLE hrsa_attend_quote ( + id bigint(0) NOT NULL COMMENT '', + salary_year_month datetime(0) NOT NULL COMMENT '˰', + year int(0) NOT NULL DEFAULT 0 COMMENT '', + month int(0) NOT NULL DEFAULT 0 COMMENT '·', + salary_sob_id bigint(0) NOT NULL COMMENT 'нױid', + source_type int(0) NOT NULL DEFAULT 0 COMMENT 'Դ1á2', + salary_accounting_status int(0) NOT NULL DEFAULT 0 COMMENT 'нʺ״̬0δ㡢1Ѻ', + attend_cycle varchar(100) NOT NULL DEFAULT '' COMMENT '', + salary_cycle varchar(100) NOT NULL DEFAULT '' COMMENT 'н', + description varchar(100) NOT NULL DEFAULT '' COMMENT 'ע', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) COMMENT = 'ñ' ; + + + +CREATE TABLE hrsa_attend_quote_data ( + id bigint(0) NOT NULL, + employee_id bigint(0) NOT NULL COMMENT 'ԱϢid', + attend_quote_id bigint(0) NOT NULL COMMENT 'ñid', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_attend_quote_id(attend_quote_id) USING BTREE +) COMMENT = 'ݱ' ; + + + +CREATE TABLE hrsa_attend_quote_data_value ( + id bigint(0) NOT NULL AUTO_INCREMENT COMMENT '', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ԱϢid', + attend_quote_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ñid', + attend_quote_data_id bigint(0) NOT NULL COMMENT 'ݱid', + attend_quote_field_id bigint(0) NOT NULL COMMENT 'ֶαid', + data_value varchar(250) NOT NULL COMMENT 'ֵ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_attend_quote_id(attend_quote_id) USING BTREE +) COMMENT = 'ֵ' ; + + + +CREATE TABLE hrsa_attend_quote_field ( + id bigint(0) NOT NULL AUTO_INCREMENT, + field_name varchar(100) NOT NULL DEFAULT '' COMMENT 'ֶ', + source_type int(0) NOT NULL DEFAULT 0 COMMENT 'Դ1Զ塢2ģ', + field_type int(0) NOT NULL DEFAULT 0 COMMENT 'ֶ͡1ֵ2ı', + enable_status int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿá01', + code varchar(50) NOT NULL DEFAULT '' COMMENT '루ӦģֶΣ', + description varchar(100) NOT NULL DEFAULT '' COMMENT 'ע', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) COMMENT = 'ֶα' ; + + + +CREATE TABLE hrsa_attend_quote_sync_set ( + id bigint(0) NOT NULL AUTO_INCREMENT, + source_type int(0) NOT NULL DEFAULT 0 COMMENT 'Դ1á2', + current_setting_content varchar(4000) NOT NULL DEFAULT '' COMMENT 'ǰ', + default_setting_content varchar(4000) NOT NULL DEFAULT '' COMMENT 'Ĭ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) COMMENT = 'ֶñ' ; + + + +CREATE TABLE hrsa_bill_batch ( + id bigint(0) NOT NULL AUTO_INCREMENT, + bill_month varchar(30) NOT NULL COMMENT '˵·', + bill_status tinyint(1) NOT NULL COMMENT '˵״̬ 0-δ鵵 1-ѹ鵵', + social_num int(0) NULL DEFAULT 0 COMMENT '籣', + fund_num int(0) NULL DEFAULT 0 COMMENT '', + other_num int(0) NULL DEFAULT 0 COMMENT '', + social_pay varchar(4000) NULL DEFAULT NULL COMMENT '籣ɷ', + fund_pay varchar(4000) NULL DEFAULT NULL COMMENT 'ɷ', + other_pay varchar(4000) NULL DEFAULT NULL COMMENT 'ɷ', + accountant varchar(200) NOT NULL COMMENT '', + remarks varchar(60) NULL DEFAULT NULL COMMENT 'ע', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_month(tenant_key, bill_month) USING BTREE +) COMMENT = '' ; + + + +CREATE TABLE hrsa_bill_detail ( + id bigint(0) NOT NULL AUTO_INCREMENT, + employee_id bigint(0) NOT NULL COMMENT 'Աid', + bill_month varchar(30) NOT NULL COMMENT '˵·', + bill_status tinyint(1) NOT NULL COMMENT '˵״̬ 0-δ鵵 1-ѹ鵵', + payment_status tinyint(1) NOT NULL COMMENT '״̬ 0- 1-', + supplementary_month varchar(50) NULL DEFAULT NULL COMMENT '·', + supplementary_projects varchar(50) NULL DEFAULT NULL COMMENT 'Ŀ', + resource_from tinyint(1) NOT NULL COMMENT 'Դ 0-ϵͳ 1-ʱ', + social_pay_org bigint(0) NULL DEFAULT NULL COMMENT '籣֯', + social_account varchar(50) NULL DEFAULT NULL COMMENT '籣˺', + social_scheme_id bigint(0) NULL DEFAULT NULL COMMENT '籣ID', + social_payment_base_string varchar(512) NULL DEFAULT NULL COMMENT '籣ɻ', + fund_pay_org bigint(0) NULL DEFAULT NULL COMMENT '֯', + fund_account varchar(50) NULL DEFAULT NULL COMMENT '˺', + supplement_fund_account varchar(50) NULL DEFAULT NULL COMMENT '乫˺', + fund_scheme_id bigint(0) NULL DEFAULT NULL COMMENT '𷽰id', + fund_payment_base_string varchar(512) NULL DEFAULT NULL COMMENT 'ɻ', + other_pay_org bigint(0) NULL DEFAULT NULL COMMENT '֯', + other_scheme_id bigint(0) NULL DEFAULT NULL COMMENT 'id', + other_payment_base_string varchar(512) NULL DEFAULT NULL COMMENT 'ɻ', + social_per_json varchar(512) NULL DEFAULT NULL COMMENT '籣˽ɷϸ', + social_per_sum varchar(512) NULL DEFAULT NULL COMMENT '籣˺ϼ', + fund_per_json varchar(512) NULL DEFAULT NULL COMMENT '˽ɷϸ', + fund_per_sum varchar(512) NULL DEFAULT NULL COMMENT '˺ϼ', + other_per_json varchar(512) NULL DEFAULT NULL COMMENT '˽ɷϸ', + other_per_sum varchar(512) NULL DEFAULT NULL COMMENT '˺ϼ', + per_sum varchar(512) NULL DEFAULT NULL COMMENT '˺ϼ', + social_com_json varchar(512) NULL DEFAULT NULL COMMENT '籣λɷϸ', + social_com_sum varchar(512) NULL DEFAULT NULL COMMENT '籣λϼ', + fund_com_json varchar(512) NULL DEFAULT NULL COMMENT 'λɷϸ', + fund_com_sum varchar(512) NULL DEFAULT NULL COMMENT 'λϼ', + other_com_json varchar(512) NULL DEFAULT NULL COMMENT 'λɷϸ', + other_com_sum varchar(512) NULL DEFAULT NULL COMMENT 'λϼ', + com_sum varchar(512) NULL DEFAULT NULL COMMENT 'λϼ', + social_sum varchar(512) NULL DEFAULT NULL COMMENT '籣ϼ', + fund_sum varchar(512) NULL DEFAULT NULL COMMENT 'ϼ', + other_sum varchar(512) NULL DEFAULT NULL COMMENT 'ϼ', + total varchar(512) NULL DEFAULT NULL COMMENT 'ϼ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_month(tenant_key, bill_month, employee_id) USING BTREE +) COMMENT = 'ϸ' ; + + + +CREATE TABLE hrsa_bill_detail_temp ( + id bigint(0) NOT NULL AUTO_INCREMENT, + employee_id bigint(0) NOT NULL COMMENT 'Աid', + bill_month varchar(30) NOT NULL COMMENT '˵·', + bill_status tinyint(1) NOT NULL COMMENT '˵״̬ 0-δ鵵 1-ѹ鵵', + payment_status tinyint(1) NOT NULL COMMENT '״̬ 0- 1-', + supplementary_month varchar(50) NULL DEFAULT NULL COMMENT '·', + supplementary_projects varchar(50) NULL DEFAULT NULL COMMENT 'Ŀ', + resource_from tinyint(1) NOT NULL COMMENT 'Դ 0-ϵͳ 1-ʱ', + social_pay_org bigint(0) NULL DEFAULT NULL COMMENT '籣֯', + social_account varchar(50) NULL DEFAULT NULL COMMENT '籣˺', + social_scheme_id bigint(0) NULL DEFAULT NULL COMMENT '籣ID', + social_payment_base_string varchar(512) NULL DEFAULT NULL COMMENT '籣ɻ', + fund_pay_org bigint(0) NULL DEFAULT NULL COMMENT '֯', + fund_account varchar(50) NULL DEFAULT NULL COMMENT '˺', + supplement_fund_account varchar(50) NULL DEFAULT NULL COMMENT '乫˺', + fund_scheme_id bigint(0) NULL DEFAULT NULL COMMENT '𷽰id', + fund_payment_base_string varchar(512) NULL DEFAULT NULL COMMENT 'ɻ', + other_pay_org bigint(0) NULL DEFAULT NULL COMMENT '֯', + other_scheme_id bigint(0) NULL DEFAULT NULL COMMENT 'id', + other_payment_base_string varchar(512) NULL DEFAULT NULL COMMENT 'ɻ', + social_per_json varchar(512) NULL DEFAULT NULL COMMENT '籣˽ɷϸ', + social_per_sum varchar(512) NULL DEFAULT NULL COMMENT '籣˺ϼ', + fund_per_json varchar(512) NULL DEFAULT NULL COMMENT '˽ɷϸ', + fund_per_sum varchar(512) NULL DEFAULT NULL COMMENT '˺ϼ', + other_per_json varchar(512) NULL DEFAULT NULL COMMENT '˽ɷϸ', + other_per_sum varchar(512) NULL DEFAULT NULL COMMENT '˺ϼ', + per_sum varchar(512) NULL DEFAULT NULL COMMENT '˺ϼ', + social_com_json varchar(512) NULL DEFAULT NULL COMMENT '籣λɷϸ', + social_com_sum varchar(512) NULL DEFAULT NULL COMMENT '籣λϼ', + fund_com_json varchar(512) NULL DEFAULT NULL COMMENT 'λɷϸ', + fund_com_sum varchar(512) NULL DEFAULT NULL COMMENT 'λϼ', + other_com_json varchar(512) NULL DEFAULT NULL COMMENT 'λɷϸ', + other_com_sum varchar(512) NULL DEFAULT NULL COMMENT 'λϼ', + com_sum varchar(512) NULL DEFAULT NULL COMMENT 'λϼ', + social_sum varchar(512) NULL DEFAULT NULL COMMENT '籣ϼ', + fund_sum varchar(512) NULL DEFAULT NULL COMMENT 'ϼ', + other_sum varchar(512) NULL DEFAULT NULL COMMENT 'ϼ', + total varchar(512) NULL DEFAULT NULL COMMENT 'ϼ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_month(tenant_key, bill_month, employee_id) USING BTREE +) COMMENT = 'ϸʱ' ; + + + +CREATE TABLE hrsa_bill_inspect ( + id bigint(0) NOT NULL AUTO_INCREMENT, + employee_id bigint(0) NOT NULL COMMENT 'Աid', + bill_month varchar(30) NOT NULL COMMENT '˵·', + payment_status tinyint(1) NOT NULL COMMENT '״̬ 0- 1-', + supplementary_month varchar(50) NULL DEFAULT NULL COMMENT '·', + supplementary_projects varchar(50) NULL DEFAULT NULL COMMENT 'Ŀ', + inspect_status tinyint(1) NOT NULL COMMENT '״̬ 0- 1-ȷ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_month(tenant_key, bill_month, employee_id) USING BTREE +) COMMENT = 'ϸ' ; + + + +CREATE TABLE hrsa_check_result ( + id bigint(0) NOT NULL COMMENT 'id', + salary_acct_record_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺid', + salary_check_rule_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Уid', + formula_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ʽid', + ignore_type tinyint(0) NOT NULL DEFAULT 0 COMMENT 'ǷѾԡ0ûкԡ1Ѿ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_record_id(salary_acct_record_id) USING BTREE +) COMMENT = 'нʺУ쳣' ; + + + +CREATE TABLE hrsa_check_result_record ( + id bigint(0) NOT NULL COMMENT 'id', + salary_acct_record_id bigint(0) NOT NULL COMMENT 'нʺid', + salary_check_rule_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Уid', + formula_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ʽid', + check_result_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'У쳣id', + salary_acct_emp_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺԱid', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Աid', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_record(salary_acct_record_id) USING BTREE, + INDEX idx_check_result_id(check_result_id) USING BTREE +) COMMENT = 'нʺУ쳣ϸ' ; + + + +CREATE TABLE hrsa_ck_result_detail_temp ( + id bigint(0) NOT NULL COMMENT 'id', + salary_acct_emp_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺԱid', + salary_acct_record_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺid', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Աid', + salary_check_rule_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'id', + formula_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'УеĹʽid', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + calculate_key varchar(50) NOT NULL COMMENT 'УʱɵkeyijһУ', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_record(salary_acct_record_id) USING BTREE, + INDEX idx_calculate_key(calculate_key) USING BTREE +) COMMENT = 'нʺУ쳣ϸʱ洢' ; + + + +CREATE TABLE hrsa_excel_acct_result ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нid', + salary_acct_emp_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺԱid', + salary_acct_record_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺid', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Աid', + salary_item_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нĿid', + result_value varchar(1000) NOT NULL DEFAULT '' COMMENT 'ֵ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + tax_agent_id bigint(0) NOT NULL DEFAULT 0 COMMENT '˰۽id', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_acct_emp_id(salary_acct_emp_id) USING BTREE, + INDEX idx_record_employee(salary_acct_record_id, employee_id) USING BTREE +) COMMENT = 'excelĽ' ; + + + +CREATE TABLE hrsa_formula ( + id bigint(0) NOT NULL, + name varchar(255) NOT NULL COMMENT '', + description varchar(255) NULL DEFAULT NULL COMMENT 'ע', + module varchar(255) NOT NULL COMMENT 'ģ', + use_for varchar(255) NULL DEFAULT NULL COMMENT ';', + reference_type varchar(255) NOT NULL COMMENT '', + return_type varchar(255) NOT NULL COMMENT '', + validate_type varchar(255) NOT NULL COMMENT 'У', + extend_param varchar(255) NULL DEFAULT NULL COMMENT 'չ', + formula varchar(4000) NOT NULL COMMENT 'ʽ', + formulaRunScript varchar(4000) NOT NULL COMMENT 'ʽű', + creator bigint(0) NOT NULL COMMENT '', + delete_type int(0) NOT NULL COMMENT 'Ƿɾ01', + create_time datetime(0) NOT NULL COMMENT 'ʱ', + update_time datetime(0) NOT NULL COMMENT 'ɾʱ', + PRIMARY KEY (id) USING BTREE +) ; + + + +CREATE TABLE hrsa_formula_var ( + id bigint(0) NOT NULL, + name varchar(255) NOT NULL COMMENT '', + formula_id bigint(0) NOT NULL COMMENT 'ʽid', + field_id varchar(255) NOT NULL COMMENT 'ֶid', + field_name varchar(500) NOT NULL COMMENT 'ֶ', + field_type varchar(255) NOT NULL COMMENT 'ֶͣnumber,string', + source varchar(255) NOT NULL COMMENT 'Դ', + order_index int(0) NOT NULL COMMENT '', + creator bigint(0) NOT NULL COMMENT '', + delete_type int(0) NOT NULL COMMENT 'Ƿɾ,01', + create_time datetime(0) NOT NULL COMMENT 'ʱ', + update_time datetime(0) NOT NULL COMMENT 'ɾʱ', + PRIMARY KEY (id) USING BTREE +) ; + + + +CREATE TABLE hrsa_fund_archives ( + id bigint(0) NOT NULL AUTO_INCREMENT, + employee_id bigint(0) NOT NULL COMMENT 'Աid', + non_payment tinyint(1) NULL DEFAULT 0 COMMENT 'ݲ 0- 1-', + welfare_type tinyint(1) NOT NULL COMMENT ' 1-籣2-3-ҵ', + fund_start_time varchar(20) NULL DEFAULT NULL COMMENT 'ʼ', + fund_end_time varchar(20) NULL DEFAULT NULL COMMENT '', + fund_scheme_id bigint(0) NULL DEFAULT NULL COMMENT '𷽰id', + fund_account varchar(50) NULL DEFAULT NULL COMMENT '˺', + supplement_fund_account varchar(50) NULL DEFAULT NULL COMMENT '乫˺', + payment_organization bigint(0) NULL DEFAULT NULL COMMENT '֯', + under_take tinyint(1) NULL DEFAULT 2 COMMENT 'ʵʳе 1-˾ 2-', + fund_payment_base_string varchar(4000) NULL DEFAULT NULL COMMENT 'ɻ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_sub_tenant(tenant_key, employee_id) USING BTREE, + INDEX employee_id(employee_id) USING BTREE +) COMMENT = 'Ա𵵰' ; + + + +CREATE TABLE hrsa_insurance_category ( + id bigint(0) NOT NULL , + insurance_name varchar(50) NOT NULL COMMENT '', + welfare_type tinyint(0) NOT NULL COMMENT ' 1-籣2-3-ҵ', + is_use tinyint(0) NOT NULL DEFAULT 1 COMMENT 'Ƿ 0-ͣ 1-', + payment_scope varchar(10) NULL DEFAULT NULL COMMENT 'ɶ 1-˾ 2-', + data_type tinyint(1) NOT NULL DEFAULT 0 COMMENT '0-Զ 1-ϵͳ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_ic_tenant(tenant_key, delete_type, welfare_type, insurance_name) USING BTREE +) COMMENT = 'Ϣ' ; + + + +CREATE TABLE hrsa_other_archives ( + id bigint(0) NOT NULL AUTO_INCREMENT, + employee_id bigint(0) NOT NULL COMMENT 'Աid', + non_payment tinyint(1) NULL DEFAULT 0 COMMENT 'ݲ 0- 1-', + welfare_type tinyint(1) NOT NULL COMMENT ' 1-籣2-3-ҵ', + other_start_time varchar(20) NULL DEFAULT NULL COMMENT 'ʼ', + other_end_time varchar(20) NULL DEFAULT NULL COMMENT '', + other_scheme_id bigint(0) NULL DEFAULT NULL COMMENT 'id', + payment_organization bigint(0) NULL DEFAULT NULL COMMENT '֯', + under_take tinyint(1) NULL DEFAULT 2 COMMENT 'ʵʳе 1-˾ 2-', + other_payment_base_string varchar(4000) NULL DEFAULT NULL COMMENT 'ɻ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_sub_tenant(tenant_key, employee_id) USING BTREE, + INDEX employee_id(employee_id) USING BTREE +) COMMENT = 'Ա' ; + + + +CREATE TABLE hrsa_other_deduction ( + id bigint(0) NOT NULL AUTO_INCREMENT, + employee_id bigint(0) NOT NULL COMMENT 'ԱϢid', + tax_agent_id bigint(0) NOT NULL COMMENT '˰۽˵id', + declare_month datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '걨', + business_healthy_insurance varchar(255) NULL DEFAULT '0.00000' COMMENT 'ҵ', + tax_delay_endowment_insurance varchar(255) NULL DEFAULT '' COMMENT '˰ϱ', + other_deduction varchar(255) NULL DEFAULT '' COMMENT '', + deduction_allowed_donation varchar(255) NULL DEFAULT '' COMMENT '׼۳ľ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_declare_month(declare_month) USING BTREE, + INDEX idx_employee_id(employee_id) USING BTREE +) COMMENT = 'ݲɼ-˰۳' ; + + + + +CREATE TABLE hrsa_salary_acct_emp ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_acct_record_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺid', + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нid', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Աid', + tax_agent_id bigint(0) NOT NULL DEFAULT 0 COMMENT '˰۽id', + salary_month datetime(0) NOT NULL DEFAULT '0000-01-01 00:00:00' COMMENT 'н', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_record_employee(salary_acct_record_id, employee_id) USING BTREE +) COMMENT = 'нʺԱȷϱ' ; + + + +CREATE TABLE hrsa_salary_acct_record ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_month date NOT NULL DEFAULT '0000-01-01' COMMENT 'н', + tax_cycle date NOT NULL DEFAULT '0000-01-01' COMMENT '˰', + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нid', + status tinyint(0) NOT NULL DEFAULT 1 COMMENT '״̬1δ鵵2ѹ鵵3걨', + acct_times int(0) NOT NULL DEFAULT 0 COMMENT '', + description varchar(100) NOT NULL DEFAULT '' COMMENT 'ע', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_salary_sob_id(salary_sob_id) USING BTREE +) COMMENT = 'нʺ¼' ; + + + +CREATE TABLE hrsa_salary_acct_result ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нid', + salary_acct_emp_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺԱid', + salary_acct_record_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺid', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Աid', + tax_agent_id bigint(0) NOT NULL DEFAULT 0 COMMENT '˰۽id', + salary_item_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нĿid', + result_value varchar(1000) NOT NULL DEFAULT '' COMMENT 'ֵ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_acct_emp_id(salary_acct_emp_id) USING BTREE, + INDEX idx_record_employee(salary_acct_record_id, employee_id) USING BTREE +) COMMENT = 'нʺ' ; + + + +CREATE TABLE hrsa_salary_archive ( + id bigint(0) NOT NULL, + employee_id bigint(0) NOT NULL COMMENT 'ԱϢid', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_employee_id(employee_id) USING BTREE +) COMMENT = 'нʵ' ; + + + +CREATE TABLE hrsa_salary_archive_dimission ( + id bigint(0) NOT NULL AUTO_INCREMENT, + dimission_time_interval varchar(20) NOT NULL COMMENT 'ְʱ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) COMMENT = 'нʵְʱα' ; + + + +CREATE TABLE hrsa_salary_archive_item ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_archive_id bigint(0) NOT NULL COMMENT 'нʵid', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ԱϢid', + effective_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Чʱ', + adjust_reason varchar(100) NOT NULL DEFAULT '' COMMENT 'ԭ', + salary_item_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нĿid', + item_value varchar(200) NOT NULL DEFAULT '' COMMENT 'нĿֵ', + description varchar(200) NOT NULL DEFAULT '' COMMENT '˵', + operator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + operate_time datetime(0) NULL DEFAULT NULL COMMENT 'ʱ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_salary_item_id(salary_item_id) USING BTREE, + INDEX idx_effective_time(effective_time) USING BTREE +) COMMENT = 'нʵнĿ' ; + + + +CREATE TABLE hrsa_salary_archive_tax_agent ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_archive_id bigint(0) NOT NULL COMMENT 'нʵid', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ԱϢid', + effective_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Чʱ', + adjust_reason varchar(100) NOT NULL DEFAULT '' COMMENT 'ԭ', + tax_agent_id bigint(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '˰۽˵id', + operator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + operate_time datetime(0) NULL DEFAULT NULL COMMENT 'ʱ', + description varchar(200) NULL DEFAULT '' COMMENT '˵', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_effective_time(effective_time) USING BTREE +) COMMENT = 'нʵ˰۽˱' ; + + + +CREATE TABLE hrsa_salary_item ( + id bigint(0) NOT NULL, + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + code varchar(100) NOT NULL DEFAULT '' COMMENT '', + system_type tinyint(0) NOT NULL DEFAULT 0 COMMENT 'ǷϵͳĿ0ԶĿ1ϵͳĿ', + sys_salary_item_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ϵͳнĿid', + category tinyint(0) NOT NULL DEFAULT 7 COMMENT 'ԡ1˰ǰ2˰ǰ3˰4˰5ͳ6˰7Ŀ', + item_type tinyint(0) NOT NULL DEFAULT 1 COMMENT '͡1н', + use_default tinyint(0) NOT NULL DEFAULT 0 COMMENT 'Ĭʹá0Ĭϲʹá1Ĭʹ', + use_in_employee_salary tinyint(0) NOT NULL DEFAULT 0 COMMENT 'нʵá0нʵδá1нʵ', + rounding_mode tinyint(0) NOT NULL DEFAULT 1 COMMENT 'λ1롢2ԭʼݡ3롢4', + pattern tinyint(0) NOT NULL DEFAULT 5 COMMENT 'Сλ05', + value_type tinyint(0) NOT NULL DEFAULT 1 COMMENT 'ȡֵʽ1ֶ롢2ʽ', + datasource tinyint(0) NOT NULL DEFAULT 0 COMMENT 'Դ0롢1Զ幫ʽ2нĿ3ԱϢ4нʵ5ۼ6ۼרӿ۳7籣8۳', + formula_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ʽid', + description varchar(1000) NOT NULL DEFAULT '' COMMENT '', + can_edit tinyint(0) NOT NULL DEFAULT 1 COMMENT 'ǷԱ༭', + can_delete tinyint(0) NOT NULL DEFAULT 1 COMMENT 'Ƿɾ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + data_type varchar(20) NOT NULL DEFAULT 'number' COMMENT 'ֶ͡stringַnumber', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE +) COMMENT = 'нĿ' ; + + + +CREATE TABLE hrsa_salary_send ( + id bigint(0) NOT NULL COMMENT 'id', + salary_month date NOT NULL, + salary_accounting_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺid', + salary_sob_id bigint(0) NOT NULL COMMENT 'нid', + send_num int(0) NOT NULL DEFAULT 0 COMMENT 'ѷ', + send_total int(0) NOT NULL DEFAULT 0 COMMENT '', + last_send_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_salary_accounting_id(salary_accounting_id) USING BTREE +) COMMENT = 'ʵű' ; + + + +CREATE TABLE hrsa_salary_send_info ( + id bigint(0) NOT NULL COMMENT 'id', + salary_send_id bigint(0) NOT NULL COMMENT 'ʵid', + salary_month date NOT NULL, + salary_acct_record_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нʺid', + tax_agent_id bigint(0) NOT NULL DEFAULT 0 COMMENT '˰۽˱id', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Աid', + send_status int(0) NOT NULL DEFAULT 0 COMMENT '״̬0δ͡1ѷ͡2ѳ', + send_time datetime(0) NULL DEFAULT NULL, + salary_template text NULL COMMENT 'ʵģ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_salary_send(salary_send_id) USING BTREE, + INDEX idx_salary_acct_record(salary_acct_record_id) USING BTREE +) COMMENT = 'ʵϢ' ; + + + +CREATE TABLE hrsa_salary_sob ( + id bigint(0) NOT NULL AUTO_INCREMENT, + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + income_category tinyint(0) NOT NULL DEFAULT 1 COMMENT 'Ӧ˰Ŀ1:н', + salary_cycle_type tinyint(0) NOT NULL DEFAULT 3 COMMENT 'нڡ1:¡2:¡3:¡4:', + salary_cycle_from_day tinyint(0) NOT NULL DEFAULT 1 COMMENT 'нڵʼ', + tax_cycle_type tinyint(0) NOT NULL DEFAULT 3 COMMENT '˰ڡ1:¡2:¡3:¡4:', + attend_cycle_type tinyint(0) NOT NULL DEFAULT 3 COMMENT 'ڡ1:¡2:¡3:¡4:', + attend_cycle_from_day tinyint(0) NOT NULL DEFAULT 1 COMMENT 'ڵʼ', + social_security_cycle_type tinyint(0) NOT NULL DEFAULT 3 COMMENT '籣ڡ1:¡2:¡3:¡4:', + disable tinyint(0) NOT NULL DEFAULT 0 COMMENT 'Ƿá0ʹá1', + description varchar(1000) NOT NULL DEFAULT '' COMMENT '', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE +) COMMENT = 'нױ' ; + + + +CREATE TABLE hrsa_salary_sob_adjust_rule ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_sob_id bigint(0) NOT NULL COMMENT 'нid', + salary_item_id bigint(0) NOT NULL COMMENT 'нĿid', + day_of_month tinyint(0) NOT NULL DEFAULT 0 COMMENT 'Ч', + before_adjustment_type tinyint(0) NOT NULL DEFAULT 1 COMMENT 'Ч֮ǰнε1ȡнǰнʡ2ȡннʡ3ƽֵ4ֶμн', + after_adjustment_type tinyint(0) NOT NULL DEFAULT 1 COMMENT 'Ч֮нε1ȡнǰнʡ2ȡннʡ3ƽֵ4ֶμн', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_salary_sob_id(salary_sob_id) USING BTREE +) COMMENT = 'н׵ĵнн' ; + + + +CREATE TABLE hrsa_salary_sob_check_rule ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'н׵id', + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + formula_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ʽid', + description varchar(1000) NOT NULL DEFAULT '' COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_salary_sob_id(salary_sob_id) USING BTREE +) COMMENT = 'нУ' ; + + +CREATE TABLE hrsa_salary_sob_default_item ( + id bigint(0) NOT NULL COMMENT 'id', + income_category tinyint(0) NOT NULL DEFAULT 1 COMMENT 'н͡1н', + sys_salary_item_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ϵͳĬϵнĿid', + can_edit tinyint(0) NOT NULL DEFAULT 1 COMMENT 'ܷ༭0ܱ༭1ܱ༭', + can_delete tinyint(0) NOT NULL DEFAULT 1 COMMENT 'ܷɾ0ɾ1ɾ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + sob_default_item_group_id bigint(0) NOT NULL COMMENT 'нĬнĿid', + sorted_index int(0) NOT NULL COMMENT 'ʾ˳', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE +) COMMENT = 'нĬӵнĿ' ; + + + +CREATE TABLE hrsa_salary_sob_emp_field ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нid', + field_code varchar(100) NOT NULL DEFAULT '' COMMENT 'ֶCODE', + sorted_index int(0) NOT NULL DEFAULT 0 COMMENT 'ֶ', + can_delete tinyint(0) NOT NULL DEFAULT 1 COMMENT 'Ƿɾ0ɾ1ɾ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_salary_sob_id(salary_sob_id) USING BTREE +) COMMENT = 'нԱϢֶ' ; + + +CREATE TABLE hrsa_salary_sob_item ( + id bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'id', + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'н׵id', + salary_item_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'нĿid', + salary_sob_item_group_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'н׵нĿid', + formula_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ʽid', + sorted_index int(0) NOT NULL DEFAULT 0 COMMENT 'нĿе˳', + description varchar(1000) NOT NULL DEFAULT '' COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_salary_sob_id(tenant_key) USING BTREE, + INDEX idx_salary_item_id(salary_item_id) USING BTREE +) COMMENT = 'ннĿ' ; + + + +CREATE TABLE hrsa_salary_sob_item_group ( + id bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'id', + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'н׵id', + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + sorted_index int(0) NOT NULL DEFAULT 0, + description varchar(1000) NOT NULL DEFAULT '' COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_salary_sob_id(salary_sob_id) USING BTREE +) COMMENT = 'ннĿ' ; + + +CREATE TABLE hrsa_salary_sob_range ( + id bigint(0) NOT NULL AUTO_INCREMENT, + salary_sob_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'н׵id', + target_type tinyint(0) NOT NULL DEFAULT 1 COMMENT '͡1Ա2š3λ', + target_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'id', + employee_status tinyint(0) NOT NULL DEFAULT 0 COMMENT 'Ա״̬0ȫ1ְ2ְ', + include_type tinyint(0) NOT NULL DEFAULT 1 COMMENT 'ǰų 01', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_salary_sob_id(salary_sob_id) USING BTREE +) COMMENT = 'нԱΧ' ; + + + +CREATE TABLE hrsa_salary_template ( + id bigint(0) NOT NULL AUTO_INCREMENT, + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + salary_sob_id bigint(0) NOT NULL COMMENT 'нױid', + use_type int(0) NOT NULL DEFAULT 0 COMMENT 'ʹ͡0ͨ1Ĭ', + description varchar(100) NOT NULL DEFAULT '' COMMENT 'ע', + email_status int(0) NOT NULL DEFAULT 0 COMMENT '俪״̬0ء1', + send_email_id bigint(0) NOT NULL DEFAULT 0 COMMENT '͵ַ:˺id', + msg_status int(0) NOT NULL DEFAULT 0 COMMENT 'ϢĿ״̬0ء1', + theme varchar(100) NOT NULL DEFAULT '' COMMENT '', + background varchar(2000) NULL DEFAULT NULL, + text_content varchar(100) NOT NULL DEFAULT '' COMMENT 'ı', + text_content_position int(0) NOT NULL DEFAULT 0 COMMENT 'ıʾλá1нĿǰ2нĿ', + salary_item_null_status int(0) NOT NULL DEFAULT 0 COMMENT 'нΪʱʾ״̬0ء1', + salary_item_zero_status int(0) NOT NULL DEFAULT 0 COMMENT 'нΪ0ʱʾ״̬0ء1', + salary_item_setting text NOT NULL COMMENT 'нĿ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) COMMENT = 'ʵģ' ; + + + + +CREATE TABLE hrsa_scheme_detail ( + id bigint(0) NOT NULL AUTO_INCREMENT, + insurance_id bigint(0) NOT NULL COMMENT 'id', + primary_id bigint(0) NOT NULL COMMENT '籣id', + effective_time varchar(20) NULL DEFAULT NULL COMMENT 'Ч()', + expiration_time varchar(20) NULL DEFAULT NULL COMMENT 'ʧЧ()', + is_payment tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Ƿɷ 0- 1-', + payment_scope tinyint(1) NOT NULL COMMENT 'ɶ 1-˾ 2-', + upper_limit varchar(1024) NULL DEFAULT NULL COMMENT '', + lower_limit varchar(1024) NULL DEFAULT NULL COMMENT '', + payment_proportion varchar(1024) NULL DEFAULT NULL COMMENT 'ɱ', + fixed_cost varchar(1024) NULL DEFAULT NULL COMMENT '̶', + valid_num tinyint(1) NULL DEFAULT 2 COMMENT 'ЧСλ', + rentention_rule tinyint(1) NULL DEFAULT NULL COMMENT 'λ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_ic_tenant(tenant_key, delete_type, insurance_id) USING BTREE, + INDEX idx_primary_id(tenant_key, primary_id) USING BTREE +) COMMENT = '籣ϸ' ; + + + +CREATE TABLE hrsa_sob_default_emp_field ( + id bigint(0) NOT NULL COMMENT 'id', + field_code varchar(30) NOT NULL DEFAULT '' COMMENT 'ֶCODE', + sorted_index int(0) NOT NULL DEFAULT 0 COMMENT 'ֶ', + can_delete tinyint(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0ɾ1ɾ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE +) COMMENT = 'нĬԱϢֶ' ; + + + +CREATE TABLE hrsa_sob_default_item_group ( + id bigint(0) NOT NULL COMMENT 'id', + income_category tinyint(0) NOT NULL DEFAULT 1 COMMENT 'н', + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + sorted_index int(0) NOT NULL DEFAULT 0, + description varchar(1000) NOT NULL DEFAULT '' COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE +) COMMENT = 'нĬϵнĿ' ; + + + +CREATE TABLE hrsa_social_archives ( + id bigint(0) NOT NULL AUTO_INCREMENT, + employee_id bigint(0) NOT NULL COMMENT 'Աid', + non_payment tinyint(1) NULL DEFAULT 0 COMMENT 'ݲ 0- 1-', + welfare_type tinyint(1) NOT NULL COMMENT ' 1-籣2-3-ҵ', + social_start_time varchar(20) NULL DEFAULT NULL COMMENT '籣ʼ', + social_end_time varchar(20) NULL DEFAULT NULL COMMENT '籣', + social_scheme_id bigint(0) NULL DEFAULT NULL COMMENT '籣ID', + social_account varchar(50) NULL DEFAULT NULL COMMENT '籣˺', + payment_organization bigint(0) NULL DEFAULT NULL COMMENT '籣֯', + under_take tinyint(1) NULL DEFAULT 2 COMMENT '籣ʵʳе 1-˾ 2-', + social_payment_base_string varchar(4000) NULL DEFAULT NULL COMMENT '籣ɻ', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_sub_tenant(tenant_key, employee_id) USING BTREE, + INDEX employee_id(employee_id) USING BTREE +) COMMENT = 'Ա籣' ; + + + +CREATE TABLE hrsa_social_security_scheme ( + id bigint(0) NOT NULL AUTO_INCREMENT, + payment_area varchar(100) NOT NULL COMMENT '', + payment_type tinyint(0) NOT NULL DEFAULT 1 COMMENT ' 1- 2-ũ', + scheme_name varchar(100) NOT NULL COMMENT '', + welfare_type tinyint(1) NOT NULL COMMENT ' 1-籣2-3-ҵ', + is_use tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Ƿ 0-ͣ 1-', + remarks varchar(30) NULL DEFAULT '' COMMENT 'ע', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_sss_tenant(tenant_key, welfare_type, is_use) USING BTREE +) COMMENT = '籣' ; + + + +CREATE TABLE hrsa_sys_salary_item ( + id bigint(0) NOT NULL COMMENT 'id', + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + code varchar(100) NOT NULL DEFAULT '' COMMENT '', + system_type tinyint(0) NOT NULL DEFAULT 0 COMMENT 'ǷϵͳĿ0ԶĿ1ϵͳĿ', + category tinyint(0) NOT NULL DEFAULT 7 COMMENT 'ԡ1˰ǰ2˰ǰ3˰4˰5ͳ6˰7Ŀ', + item_type tinyint(0) NOT NULL DEFAULT 1 COMMENT '͡1н', + use_default tinyint(0) NOT NULL DEFAULT 0 COMMENT 'Ĭʹá0Ĭϲʹá1Ĭʹ', + use_in_employee_salary tinyint(0) NOT NULL DEFAULT 0 COMMENT 'нʵá0нʵδá1нʵ', + rounding_mode tinyint(0) NOT NULL DEFAULT 1 COMMENT 'λ1롢2ԭʼݡ3롢4', + pattern tinyint(0) NOT NULL DEFAULT 5 COMMENT 'Сλ05', + value_type tinyint(0) NOT NULL DEFAULT 1 COMMENT 'ȡֵʽ1ֶ롢2ʽ', + datasource tinyint(0) NOT NULL DEFAULT 0 COMMENT 'Դ0롢1Զ幫ʽ2нĿ3ԱϢ4нʵ5ۼ6ۼרӿ۳7籣8۳', + formula_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'ʽid', + description varchar(1000) NOT NULL DEFAULT '' COMMENT '', + can_edit tinyint(0) NOT NULL DEFAULT 1 COMMENT 'ǷԱ༭', + can_delete tinyint(0) NOT NULL DEFAULT 1 COMMENT 'Ƿɾ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + data_type varchar(20) NOT NULL DEFAULT 'number' COMMENT 'ֶ͡stringַnumber', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE +) COMMENT = 'ϵͳнĿ' ; + + + +CREATE TABLE hrsa_sys_tax_rate_base ( + id bigint(0) NOT NULL COMMENT '', + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + system_type tinyint(0) NOT NULL DEFAULT 0 COMMENT 'ǷϵͳĬϵġ0Զ塢1ϵͳĬ', + description varchar(100) NOT NULL DEFAULT '' COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) COMMENT = 'ϵͳõ˰ʱ' ; + + + +CREATE TABLE hrsa_sys_tax_rate_detail ( + id bigint(0) NOT NULL COMMENT '', + base_id bigint(0) NOT NULL DEFAULT 0 COMMENT '˰hrsa_tax_rate_baseid', + index_num int(0) NOT NULL DEFAULT 0 COMMENT '', + income_lower_limit decimal(15, 5) NULL DEFAULT 0.00000 COMMENT 'ޣ', + income_upper_limit decimal(15, 5) NULL DEFAULT 0.00000 COMMENT 'ޣ', + duty_free_value decimal(15, 5) NULL DEFAULT 0.00000 COMMENT '˰׼-̶ֵ', + duty_free_rate decimal(15, 5) NULL DEFAULT 0.00000 COMMENT '˰׼-', + taxable_income_ll decimal(15, 5) NULL DEFAULT 0.00000 COMMENT 'Ӧ˰öޣ', + taxable_income_ul decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT 'Ӧ˰öޣ', + tax_rate decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '˰', + tax_deduction decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '۳', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_base(tenant_key, base_id) USING BTREE +) COMMENT = 'ϵͳõ˰ϸ' ; + + + +CREATE TABLE hrsa_tax_agent ( + id bigint(0) NOT NULL AUTO_INCREMENT, + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + description varchar(100) NOT NULL DEFAULT '' COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) COMMENT = '˰۽˱' ; + + + +CREATE TABLE hrsa_tax_declaration ( + id bigint(0) NOT NULL , + salary_month datetime(0) NOT NULL DEFAULT '0000-01-01 00:00:00' COMMENT 'н', + tax_cycle datetime(0) NOT NULL DEFAULT '0000-01-01 00:00:00' COMMENT '˰', + tax_agent_id bigint(0) NOT NULL DEFAULT 0 COMMENT '˰۽id', + description varchar(1000) NOT NULL DEFAULT '' COMMENT 'ע', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_tenant_tax_cycle(tenant_key, tax_cycle) USING BTREE, + INDEX idx_tenant_salary_month(tenant_key, salary_month) USING BTREE +) COMMENT = '˰걨' ; + + + +CREATE TABLE hrsa_tax_declaration_detail ( + id bigint(0) NOT NULL COMMENT 'id', + tax_declaration_id bigint(0) NOT NULL DEFAULT 0 COMMENT '˰걨¼id', + employee_id bigint(0) NOT NULL DEFAULT 0 COMMENT 'Աid', + field_code varchar(100) NOT NULL DEFAULT '' COMMENT 'ֶcode', + field_value varchar(1000) NOT NULL DEFAULT '' COMMENT 'ֶεֵ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_tax_declaration_id(tax_declaration_id) USING BTREE +) COMMENT = '˰걨' ; + + + +CREATE TABLE hrsa_tax_rate_base ( + id bigint(0) NOT NULL AUTO_INCREMENT, + name varchar(100) NOT NULL DEFAULT '' COMMENT '', + system_type tinyint(0) NOT NULL DEFAULT 0 COMMENT 'ǷϵͳĬϵġ0Զ塢1ϵͳĬ', + description varchar(100) NOT NULL DEFAULT '' COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) COMMENT = '˰' ; + + + +CREATE TABLE hrsa_tax_rate_detail ( + id bigint(0) NOT NULL AUTO_INCREMENT, + base_id bigint(0) NOT NULL DEFAULT 0 COMMENT '˰hrsa_tax_rate_baseid', + index_num int(0) NOT NULL DEFAULT 0 COMMENT '', + income_upper_limit decimal(15, 5) NULL DEFAULT 0.00000 COMMENT 'ޣ', + income_lower_limit decimal(15, 5) NULL DEFAULT 0.00000 COMMENT 'ޣ', + duty_free_value decimal(15, 5) NULL DEFAULT 0.00000 COMMENT '˰׼-̶ֵ', + duty_free_rate decimal(15, 5) NULL DEFAULT 0.00000 COMMENT '˰׼-', + taxable_income_ul decimal(15, 5) NULL DEFAULT 0.00000 COMMENT 'Ӧ˰öޣ', + taxable_income_ll decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT 'Ӧ˰öޣ', + tax_rate decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '˰', + tax_deduction decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '۳', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + creator bigint(0) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(0) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_base(tenant_key, base_id) USING BTREE +) COMMENT = '˰ϸ' ; + + + + + + + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214787, 'нϼ', 'wagesTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651736817711, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:02', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214788, 'ȫһԽϼ', 'annualBonusTotal', 1, 5, 22, 0, 0, 2, 2, 2, 1, 1651737358294, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:07', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214789, '˰ǰۿϼ', 'preTaxDeductionsTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651737635353, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:22', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214790, '£ΣӦ˰ϼ', 'income', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651737859216, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:25', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214791, 'ǰۼӦ˰ϼ', 'addUpIncome', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651738034028, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:28', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214792, 'ϸ', 'endowmentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749914746, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214793, 'ҽƸ', 'medicalInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749958879, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214795, 'ʧҵ', 'unemploymentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750005281, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214796, '', 'housingProvidentFund', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750034689, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214797, '£Σר۳ϼ', 'specialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651738826550, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 16:03:40', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214798, 'ǰۼר۳ϼ', 'addUpSpecialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651739000845, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214799, 'ۼŮ', 'addUpChildEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739053212, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214800, 'ۼסϢ', 'addUpHousingLoanInterest', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739100651, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214801, 'ۼס', 'addUpHousingRent', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739151122, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214802, 'ۼƼ', 'addUpContinuingEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739212437, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214803, 'ۼ', 'addUpSupportElderly', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739310959, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214804, 'ǰۼרӿ۳ϼ', 'addUpSpeAddiDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 6, 1651739411365, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214805, '£Σ۳ϼ', 'otherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651739815651, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214806, 'ǰۼ۳ϼ', 'addUpOtherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651740238860, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214807, '£Σ', 'subtraction', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651740311026, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:56:11', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214808, 'ǰۼƼ', 'addUpSubtraction', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651740397225, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214809, '£Σн˰˰', 'taxRate', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742185837, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214810, '£Σн˰۳', 'quickDeductionFactor', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742702735, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214811, 'ǰۼӦ˰ö', 'addUpTaxableIncome', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651745445982, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:12', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214812, 'ǰۼӦ˰', 'addUpTaxPayable', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651748888864, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:14', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214813, 'ǰۼѿ۽˰ϼ', 'addUpAdvanceTax', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651748978482, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:18', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214814, '£ΣӦ˰', 'refundedOrSupplementedTax', 1, 6, 16, 1, 0, 2, 2, 2, 1, 1651749111981, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214815, '£Σʵнʺϼ', 'netSalaryTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651749240004, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:24', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861648655892480, '', 'baseSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:57:46', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861768948531201, 'λ', 'postSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:57:57', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861880508628992, 'ڿۿ', 'attendanceDeduction', 1, 2, 9, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:58:04', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093121, '˰ϼ', 'afterTaxReimbursementTotal', 1, 5, 22, 0, 0, 3, 2, 1, 1, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:58:06', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093122, '', 'annuity', 1, 2, 12, 0, 0, 2, 2, 2, 7, 1651749398360, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093123, 'ҵ', 'commercialHealthInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749448800, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093124, '˰ϱ', 'taxDeferredEndowmentInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749487187, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093125, 'Ʋԭֵ', 'originalValueOfProperty', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:58:29', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093126, '۳˰', 'deductedTax', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:58:42', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093127, '', 'other', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749540147, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093128, '£Σ', 'fee', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093129, '£Σ˰', 'taxFreeIncome', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:58:54', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093130, '˰', 'lessTaxProportion', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646657, '˰ϼ', 'afterTaxAdjustmentTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:59:09', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646658, 'ǰۼƼ˰ϼ', 'addUpTaxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 5, 0, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646659, '£Σ׼ʿ۳ľ', 'allowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651749595061, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646660, 'ǰۼ׼۳ľ', 'addUpAllowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651749675268, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646661, '£Σ˰', 'taxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 16:00:25', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646662, '˰ۿϼ', 'afterTaxDeductionsTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:37', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919424520683521, '˰ۿ', 'afterTaxDeductions', 1, 4, 15, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:39', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919682288984064, '˰', 'afterTaxReimbursement', 1, 3, 13, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:40', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919776783499264, '˰', 'afterTaxAdjustment', 1, 3, 14, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:48', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674920588574261248, 'ս', 'annualBonus', 1, 1, 2, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:51', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532371614588928, 'ǰۼ籣˺ϼ', 'addUpSocialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801433504, '', 0, 1, 0, 0, 'all_teams', '2022-03-07 10:22:55', '2022-05-06 09:44:23', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532667749400576, 'ǰۼƹ˺ϼ', 'addUpAccumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801586972, '', 0, 1, 0, 0, 'all_teams', '2022-03-07 10:22:55', '2022-05-06 09:46:40', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697536344384012289, 'ǰۼҵְҵ˺ϼ', 'addUpEnterpriseAndOther', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801667770, '', 0, 1, 0, 0, 'all_teams', '2022-03-07 10:22:56', '2022-05-06 09:48:07', 'number'); + + + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651736817711, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.λ}', 'salaryItem_baseSalary+salaryItem_postSalary', 1, 0, '2022-05-05 15:46:58', '2022-05-05 15:46:58'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737358294, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ս}', 'salaryItem_annualBonus', 1, 0, '2022-05-05 15:55:58', '2022-05-05 15:55:58'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737635353, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ڿۿ}', 'salaryItem_attendanceDeduction', 1, 0, '2022-05-05 16:00:35', '2022-05-05 16:00:35'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737859216, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.нϼ}+{нĿ.ȫһԽϼ}-{нĿ.˰ǰۿϼ}', 'salaryItem_wagesTotal+salaryItem_annualBonusTotal-salaryItem_preTaxDeductionsTotal', 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738034028, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}+{ۼ.ۼ}', 'salaryItem_income+addUpSituation_addUpIncome', 1, 0, '2022-05-05 16:07:14', '2022-05-05 16:07:14'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749914746, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ϱո}', 'welfare_9001socialPer', 1, 0, '2022-05-05 19:25:15', '2022-05-05 19:25:15'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749958879, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҽƱո}', 'welfare_9002socialPer', 1, 0, '2022-05-05 19:25:59', '2022-05-05 19:25:59'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750005281, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ʧҵո}', 'welfare_9004socialPer', 1, 0, '2022-05-05 19:26:45', '2022-05-05 19:26:45'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750034689, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ס}', 'welfare_9006fundPer', 1, 0, '2022-05-05 19:27:15', '2022-05-05 19:27:15'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738826550, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ϸ}+{нĿ.ҽƸ}+{нĿ.ʧҵ}+{нĿ.}', 'salaryItem_endowmentInsurance+salaryItem_medicalInsurance+salaryItem_unemploymentInsurance+salaryItem_housingProvidentFund', 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739000845, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σר۳ϼ}+{ۼ.ۼ籣˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'salaryItem_specialDeduction+addUpSituation_addUpSocialSecurityTotal+addUpSituation_addUpAccumulationFundTotal', 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739053212, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼŮ}', 'addUpDeductions_addUpChildEducation', 1, 0, '2022-05-05 16:24:13', '2022-05-05 16:24:13'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739100651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼסϢ}', 'addUpSituation_addUpHousingLoanInterest', 1, 0, '2022-05-05 16:25:01', '2022-05-05 16:25:01'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739151122, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼס}', 'addUpSituation_addUpHousingRent', 1, 0, '2022-05-05 16:25:51', '2022-05-05 16:25:51'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739212437, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼƼ}', 'addUpSituation_addUpContinuingEducation', 1, 0, '2022-05-05 16:26:52', '2022-05-05 16:26:52'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739310959, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼ}', 'addUpSituation_addUpSupportElderly', 1, 0, '2022-05-05 16:28:31', '2022-05-05 16:28:31'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739411365, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoanInterest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly', 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739815651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.ҵ}+{нĿ.˰ϱ}+{нĿ.Ʋԭֵ}+{нĿ.۳˰}+{нĿ.}', 'salaryItem_annuity+salaryItem_commercialHealthInsurance+salaryItem_taxDeferredEndowmentInsurance+salaryItem_originalValueOfProperty+salaryItem_deductedTax+salaryItem_other', 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740238860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}+{ۼ.ۼҵְҵ}', 'salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction+addUpSituation_addUpEnterpriseAndOther', 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740311026, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '5000', '5000', 1, 0, '2022-05-05 16:45:11', '2022-05-05 16:45:11'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740397225, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ}+{ۼ.ۼƼ}', 'salaryItem_subtraction+addUpSituation_addUpSubtraction', 1, 0, '2022-05-05 16:46:37', '2022-05-05 16:46:37'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742185837, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=0){0;}else if({нĿ.ǰۼӦ˰ö}<=36000){0.03;}else if({нĿ.ǰۼӦ˰ö}<=144000){0.1;}else if({нĿ.ǰۼӦ˰ö}<=300000){0.2;}else if({нĿ.ǰۼӦ˰ö}<=420000){0.25;}else if({нĿ.ǰۼӦ˰ö}<=660000){0.3;}else if({нĿ.ǰۼӦ˰ö}<=960000){0.35;}else{0.45;}', 'if(salaryItem_addUpTaxableIncome<=0){0;}else if(salaryItem_addUpTaxableIncome<=36000){0.03;}else if(salaryItem_addUpTaxableIncome<=144000){0.1;}else if(salaryItem_addUpTaxableIncome<=300000){0.2;}else if(salaryItem_addUpTaxableIncome<=420000){0.25;}else if(salaryItem_addUpTaxableIncome<=660000){0.3;}else if(salaryItem_addUpTaxableIncome<=960000){0.35;}else{0.45;}', 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742702735, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=36000){0;}else if({нĿ.ǰۼӦ˰ö}<=144000){2520;}else if({нĿ.ǰۼӦ˰ö}<=300000){16920;}else if({нĿ.ǰۼӦ˰ö}<=420000){31920;}else if({нĿ.ǰۼӦ˰ö}<=660000){52920;}else if({нĿ.ǰۼӦ˰ö}<=960000){85920;}else{181920;}', 'if(salaryItem_addUpTaxableIncome<=36000){0;}else if(salaryItem_addUpTaxableIncome<=144000){2520;}else if(salaryItem_addUpTaxableIncome<=300000){16920;}else if(salaryItem_addUpTaxableIncome<=420000){31920;}else if(salaryItem_addUpTaxableIncome<=660000){52920;}else if(salaryItem_addUpTaxableIncome<=960000){85920;}else{181920;}', 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651745445982, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation', 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748888864, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ö}*{нĿ.£Σн˰˰}-{нĿ.£Σн˰۳}', 'salaryItem_addUpTaxableIncome*salaryItem_taxRate-salaryItem_quickDeductionFactor', 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748978482, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼԤԤ˰}', 'addUpSituation_addUpAdvanceTax', 1, 0, '2022-05-05 19:09:38', '2022-05-05 19:09:38'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749111981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰}-{нĿ.ǰۼѿ۽˰ϼ}-{нĿ.ǰۼƼ˰ϼ}', 'salaryItem_addUpTaxPayable-salaryItem_addUpAdvanceTax-salaryItem_addUpTaxDeduction', 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749240004, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}-{нĿ.£Σר۳ϼ}-{нĿ.£ΣӦ˰}+{нĿ.˰ϼ}+{нĿ.˰ϼ}-{нĿ.˰ۿϼ}', 'salaryItem_income-salaryItem_specialDeduction-salaryItem_refundedOrSupplementedTax+salaryItem_afterTaxAdjustmentTotal+salaryItem_afterTaxReimbursementTotal-salaryItem_afterTaxDeductionsTotal', 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749398360, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҵ}', 'welfare_9007otherPer', 1, 0, '2022-05-05 19:16:38', '2022-05-05 19:16:38'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749448800, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 1, 0, '2022-05-05 19:17:29', '2022-05-05 19:17:29'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749487187, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 1, 0, '2022-05-05 19:18:07', '2022-05-05 19:18:07'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749540147, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 1, 0, '2022-05-05 19:19:00', '2022-05-05 19:19:00'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749595061, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 1, 0, '2022-05-05 19:19:55', '2022-05-05 19:19:55'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749675268, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ׼ʿ۳ľ}+{ۼ.ۼ׼۳ľ}', 'salaryItem_allowedDonation+addUpSituation_addUpAllowedDonation', 1, 0, '2022-05-05 19:21:15', '2022-05-05 19:21:15'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801433504, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}+{ۼ.ۼ籣˺ϼ}', 'welfare_socialPerSum+addUpSituation_addUpSocialSecurityTotal', 1, 0, '2022-05-06 09:43:54', '2022-05-06 09:43:54'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801586972, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'welfare_fundPerSum+addUpSituation_addUpAccumulationFundTotal', 1, 0, '2022-05-06 09:46:27', '2022-05-06 09:46:27'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801667770, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼҵְҵ}', 'welfare_otherPerSum+addUpSituation_addUpEnterpriseAndOther', 1, 0, '2022-05-06 09:47:48', '2022-05-06 09:47:48'); + + + + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818266, '', 1651736817711, 'salaryItem_baseSalary', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 15:46:58', '2022-05-05 15:46:58'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818329, 'λ', 1651736817711, 'salaryItem_postSalary', '{нĿ.λ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 15:46:58', '2022-05-05 15:46:58'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737360610, 'ս', 1651737358294, 'salaryItem_annualBonus', '{нĿ.ս}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 15:55:58', '2022-05-05 15:55:58'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737636061, 'ڿۿ', 1651737635353, 'salaryItem_attendanceDeduction', '{нĿ.ڿۿ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:00:35', '2022-05-05 16:00:35'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859281, 'нϼ', 1651737859216, 'salaryItem_wagesTotal', '{нĿ.нϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859342, 'ȫһԽϼ', 1651737859216, 'salaryItem_annualBonusTotal', '{нĿ.ȫһԽϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859401, '˰ǰۿϼ', 1651737859216, 'salaryItem_preTaxDeductionsTotal', '{нĿ.˰ǰۿϼ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035450, '£ΣӦ˰ϼ', 1651738034028, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:07:14', '2022-05-05 16:07:14'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035488, 'ۼ', 1651738034028, 'addUpSituation_addUpIncome', '{ۼ.ۼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:07:14', '2022-05-05 16:07:14'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738832854, 'ϸ', 1651738826550, 'salaryItem_endowmentInsurance', '{нĿ.ϸ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837363, 'ҽƸ', 1651738826550, 'salaryItem_medicalInsurance', '{нĿ.ҽƸ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837909, 'ʧҵ', 1651738826550, 'salaryItem_unemploymentInsurance', '{нĿ.ʧҵ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738838429, '', 1651738826550, 'salaryItem_housingProvidentFund', '{нĿ.}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002623, '£Σר۳ϼ', 1651739000845, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002682, 'ۼ籣˺ϼ', 1651739000845, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739003139, 'ۼƹ˺ϼ', 1651739000845, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 2, 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739054270, 'ۼŮ', 1651739053212, 'addUpDeductions_addUpChildEducation', '{ۼרӿ۳.ۼŮ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-05 16:24:13', '2022-05-05 16:24:13'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739101122, 'ۼסϢ', 1651739100651, 'addUpSituation_addUpHousingLoanInterest', '{ۼ.ۼסϢ}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:25:01', '2022-05-05 16:25:01'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739151221, 'ۼס', 1651739151122, 'addUpSituation_addUpHousingRent', '{ۼ.ۼס}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:25:51', '2022-05-05 16:25:51'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739213082, 'ۼƼ', 1651739212437, 'addUpSituation_addUpContinuingEducation', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:26:52', '2022-05-05 16:26:52'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739311009, 'ۼ', 1651739310959, 'addUpSituation_addUpSupportElderly', '{ۼ.ۼ}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:28:31', '2022-05-05 16:28:31'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411502, 'ۼŮ', 1651739411365, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411637, 'ۼסϢ', 1651739411365, 'salaryItem_addUpHousingLoanInterest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411715, 'ۼס', 1651739411365, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411773, 'ۼƼ', 1651739411365, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739412718, 'ۼ', 1651739411365, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739819892, '', 1651739815651, 'salaryItem_annuity', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739822564, 'ҵ', 1651739815651, 'salaryItem_commercialHealthInsurance', '{нĿ.ҵ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739826637, '˰ϱ', 1651739815651, 'salaryItem_taxDeferredEndowmentInsurance', '{нĿ.˰ϱ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739828954, 'Ʋԭֵ', 1651739815651, 'salaryItem_originalValueOfProperty', '{нĿ.Ʋԭֵ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739829915, '۳˰', 1651739815651, 'salaryItem_deductedTax', '{нĿ.۳˰}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739830465, '', 1651739815651, 'salaryItem_other', '{нĿ.}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740240713, '£Σ۳ϼ', 1651740238860, 'salaryItem_otherDeduction', '{нĿ.£Σ۳ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241221, 'ۼ˰۳', 1651740238860, 'addUpSituation_addUpOtherDeduction', '{ۼ.ۼ˰۳}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241717, 'ۼҵְҵ', 1651740238860, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 2, 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397497, '£Σ', 1651740397225, 'salaryItem_subtraction', '{нĿ.£Σ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:46:37', '2022-05-05 16:46:37'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397989, 'ۼƼ', 1651740397225, 'addUpSituation_addUpSubtraction', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:46:37', '2022-05-05 16:46:37'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185950, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185995, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186035, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186085, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186122, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186155, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186199, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 6, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742704826, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705308, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705782, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705831, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706306, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706368, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745446904, 'ǰۼӦ˰ϼ', 1651745445982, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447442, 'ǰۼר۳ϼ', 1651745445982, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447969, 'ǰۼרӿ۳ϼ', 1651745445982, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745448475, 'ǰۼ۳ϼ', 1651745445982, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745451616, 'ǰۼƼ', 1651745445982, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745452097, 'ǰۼ׼۳ľ', 1651745445982, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888918, 'ǰۼӦ˰ö', 1651748888864, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888952, '£Σн˰˰', 1651748888864, 'salaryItem_taxRate', '{нĿ.£Σн˰˰}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888989, '£Σн˰۳', 1651748888864, 'salaryItem_quickDeductionFactor', '{нĿ.£Σн˰۳}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748978520, 'ۼԤԤ˰', 1651748978482, 'addUpSituation_addUpAdvanceTax', '{ۼ.ۼԤԤ˰}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 19:09:38', '2022-05-05 19:09:38'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112037, 'ǰۼӦ˰', 1651749111981, 'salaryItem_addUpTaxPayable', '{нĿ.ǰۼӦ˰}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112068, 'ǰۼѿ۽˰ϼ', 1651749111981, 'salaryItem_addUpAdvanceTax', '{нĿ.ǰۼѿ۽˰ϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112116, 'ǰۼƼ˰ϼ', 1651749111981, 'salaryItem_addUpTaxDeduction', '{нĿ.ǰۼƼ˰ϼ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240040, '£ΣӦ˰ϼ', 1651749240004, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240082, '£Σר۳ϼ', 1651749240004, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240117, '£ΣӦ˰', 1651749240004, 'salaryItem_refundedOrSupplementedTax', '{нĿ.£ΣӦ˰}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240164, '˰ϼ', 1651749240004, 'salaryItem_afterTaxAdjustmentTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240199, '˰ϼ', 1651749240004, 'salaryItem_afterTaxReimbursementTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240245, '˰ۿϼ', 1651749240004, 'salaryItem_afterTaxDeductionsTotal', '{нĿ.˰ۿϼ}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749398399, 'ҵ', 1651749398360, 'welfare_9007otherPer', '{籣.ҵ}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:16:38', '2022-05-05 19:16:38'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749448843, 'ҵ', 1651749448800, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:17:29', '2022-05-05 19:17:29'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749487225, '˰ϱ', 1651749487187, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:18:07', '2022-05-05 19:18:07'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749540213, '', 1651749540147, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:19:00', '2022-05-05 19:19:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749596472, '׼۳ľ', 1651749595061, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:19:55', '2022-05-05 19:19:55'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675326, '£Σ׼ʿ۳ľ', 1651749675268, 'salaryItem_allowedDonation', '{нĿ.£Σ׼ʿ۳ľ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:21:15', '2022-05-05 19:21:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675365, 'ۼ׼۳ľ', 1651749675268, 'addUpSituation_addUpAllowedDonation', '{ۼ.ۼ׼۳ľ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 19:21:15', '2022-05-05 19:21:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749914793, 'ϱո', 1651749914746, 'welfare_9001socialPer', '{籣.ϱո}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:25:15', '2022-05-05 19:25:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749958917, 'ҽƱո', 1651749958879, 'welfare_9002socialPer', '{籣.ҽƱո}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:25:59', '2022-05-05 19:25:59'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750005320, 'ʧҵո', 1651750005281, 'welfare_9004socialPer', '{籣.ʧҵո}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:26:45', '2022-05-05 19:26:45'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750034727, 'ס', 1651750034689, 'welfare_9006fundPer', '{籣.ס}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:27:15', '2022-05-05 19:27:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801435862, '籣˺ϼ', 1651801433504, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 0, 1, 0, '2022-05-06 09:43:54', '2022-05-06 09:43:54'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801436423, 'ۼ籣˺ϼ', 1651801433504, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-06 09:43:54', '2022-05-06 09:43:54'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587331, '˺ϼ', 1651801586972, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, '2022-05-06 09:46:27', '2022-05-06 09:46:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587794, 'ۼƹ˺ϼ', 1651801586972, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-06 09:46:27', '2022-05-06 09:46:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801669969, '˺ϼ', 1651801667770, 'welfare_otherPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, '2022-05-06 09:47:48', '2022-05-06 09:47:48'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801670474, 'ۼҵְҵ', 1651801667770, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-06 09:47:48', '2022-05-06 09:47:48'); + + + + +INSERT INTO hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291652, 'taxAgentName', 0, 0, 0, '2022-02-23 17:32:08', '2022-02-23 17:32:08', 0, 'all_teams'); +INSERT INTO hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291653, 'username', 1, 0, 0, '2022-02-23 17:32:08', '2022-02-23 17:32:08', 0, 'all_teams'); +INSERT INTO hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291654, 'departmentName', 2, 0, 0, '2022-02-23 17:32:08', '2022-02-23 17:32:08', 0, 'all_teams'); + + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368900, 4, 703459464954929153, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368899, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368902, 4, 703458434280095745, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368901, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368903, 4, 703458558739300353, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368901, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368905, 4, 674914626953093123, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368906, 4, 674914626953093124, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368907, 4, 674914626953093127, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368908, 4, 674916065864646659, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368910, 4, 704467747234045953, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368911, 4, 704468391612751873, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368912, 4, 704468443048992769, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368913, 4, 704468490269204481, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368914, 4, 704468528928063488, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368915, 4, 703459151591383041, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 0, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312448, 1, 703459151591383041, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 0, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312449, 1, 674861648655892480, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312450, 1, 674861768948531201, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312451, 1, 674861880508628992, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312452, 1, 674920588574261248, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312453, 1, 674853617092214790, 1, 0, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312454, 1, 674853617092214791, 1, 0, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312455, 1, 674914626953093129, 1, 0, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312456, 1, 703419929857687552, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312457, 1, 674853617092214792, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312458, 1, 674853617092214793, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312459, 1, 674853617092214795, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312460, 1, 674853617092214796, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312461, 1, 700599184238075904, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312462, 1, 700599446244319233, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312463, 1, 674853617092214797, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312464, 1, 697532371614588928, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312465, 1, 697532667749400576, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 8); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312466, 1, 697536344384012289, 1, 0, 0, '2022-03-18 16:24:49', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 9); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312467, 1, 674853617092214798, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 10); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312468, 1, 674853617092214803, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614103, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312469, 1, 674853617092214802, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312470, 1, 674853617092214801, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312471, 1, 674853617092214800, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312472, 1, 674853617092214799, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614103, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312473, 1, 705641858303836161, 1, 0, 0, '2022-03-17 13:48:51', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312474, 1, 674853617092214804, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614103, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312475, 1, 674853617092214807, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312476, 1, 674853617092214808, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312477, 1, 674914626953093122, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312478, 1, 674914626953093123, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312479, 1, 674914626953093124, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312480, 1, 674914626953093127, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312481, 1, 674853617092214805, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312482, 1, 674853617092214806, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312483, 1, 674916065864646659, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 8); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312484, 1, 674916065864646660, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 9); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312485, 1, 674853617092214811, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614119, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312486, 1, 674853617092214809, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312487, 1, 674853617092214810, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312488, 1, 674853617092214812, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312489, 1, 674853617092214813, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312490, 1, 674916065864646661, 1, 1, 0, '2022-03-18 16:33:37', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312491, 1, 674916065864646658, 1, 1, 0, '2022-03-18 16:33:37', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312492, 1, 674853617092214814, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614119, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312493, 1, 674853617092214815, 1, 1, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614126, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312494, 1, 700769462612156416, 1, 1, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614126, 7); + + + + +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614083, 1, 'Լ˰', 0, '', '2022-03-11 14:49:01', '2022-03-11 14:49:01', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614092, 1, 'ר۳', 1, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614103, 1, 'ۼרӿ۳', 2, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614110, 1, '۳Ϣ', 3, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614119, 1, '˰', 4, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614126, 1, 'Ӧʵ', 5, '', '2022-03-11 14:49:28', '2022-03-11 14:49:28', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368899, 4, 'Ŀ', 0, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368901, 4, '뼰˰', 1, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368904, 4, '۳Ϣ', 2, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368909, 4, '˰', 3, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams'); + + + + +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, 'ϱ', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, 'ҽƱ', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '˱', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, 'ʧҵ', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, 'ס', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, 'ҵ', 3, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, 'ס', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); + +ALTER TABLE hrsa_salary_sob_item ADD COLUMN can_delete int(0) NULL COMMENT 'Ƿɾ0ɾ1ɾ'; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202205200203.sql b/resource/sqlupgrade/Mysql/sql202205200203.sql new file mode 100644 index 000000000..4e9a2d109 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202205200203.sql @@ -0,0 +1,9 @@ +ALTER TABLE hrsa_add_up_situation +ADD COLUMN add_up_illness_medical varchar(255) NULL COMMENT 'ۼƴҽ', +ADD COLUMN add_up_tax_savings varchar(255) NULL COMMENT 'ۼƼ˰' , +ADD COLUMN add_up_infant_care varchar(255) NULL COMMENT 'ۼӤ׶ջ' ; + + +ALTER TABLE hrsa_add_up_deduction +ADD COLUMN add_up_illness_medical varchar(255) NULL COMMENT 'ۼƴҽ', +ADD COLUMN add_up_infant_care varchar(255) NULL COMMENT 'ۼӤ׶ջ' ; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202205310203.sql b/resource/sqlupgrade/Mysql/sql202205310203.sql new file mode 100644 index 000000000..3853d84d8 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202205310203.sql @@ -0,0 +1,26 @@ +INSERT INTO hrsa_formula (id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1653993466778, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼסϢ}', 'addUpDeductions_addUpHousingLoanInterest', 1, 0, '2022-05-31 18:37:47', '2022-05-31 18:37:47'); +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993466787, 'ۼסϢ', 1653993466778, 'addUpDeductions_addUpHousingLoanInterest', '{ۼרӿ۳.ۼסϢ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:37:47', '2022-05-31 18:37:47'); + + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993837931, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼס}', 'addUpDeductions_addUpHousingRent', 1, 0, '2022-05-31 18:43:58', '2022-05-31 18:43:58'); +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993837947, 'ۼס', 1653993837931, 'addUpDeductions_addUpHousingRent', '{ۼרӿ۳.ۼס}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:43:58', '2022-05-31 18:43:58'); + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993954233, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƼ}', 'addUpDeductions_addUpContinuingEducation', 1, 0, '2022-05-31 18:45:54', '2022-05-31 18:45:54'); +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993954257, 'ۼƼ', 1653993954233, 'addUpDeductions_addUpContinuingEducation', '{ۼרӿ۳.ۼƼ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:45:54', '2022-05-31 18:45:54'); + + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653994061764, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼ}', 'addUpDeductions_addUpSupportElderly', 1, 0, '2022-05-31 18:47:42', '2022-05-31 18:47:42'); +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653994061780, 'ۼ', 1653994061764, 'addUpDeductions_addUpSupportElderly', '{ۼרӿ۳.ۼ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:47:42', '2022-05-31 18:47:42'); + + + +update hrsa_sys_salary_item set formula_id = 1653993466778 where id = 674853617092214800; +update hrsa_sys_salary_item set formula_id = 1653993837931 where id = 674853617092214801; +update hrsa_sys_salary_item set formula_id = 1653993954233 where id = 674853617092214802; +update hrsa_sys_salary_item set formula_id = 1653994061764 where id = 674853617092214803; + + +update hrsa_salary_item set formula_id = 1653993466778 where sys_salary_item_id = 674853617092214800; +update hrsa_salary_item set formula_id = 1653993837931 where sys_salary_item_id = 674853617092214801; +update hrsa_salary_item set formula_id = 1653993954233 where sys_salary_item_id = 674853617092214802; +update hrsa_salary_item set formula_id = 1653994061764 where sys_salary_item_id = 674853617092214803; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202206071403.sql b/resource/sqlupgrade/Mysql/sql202206071403.sql new file mode 100644 index 000000000..ada9c72c7 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202206071403.sql @@ -0,0 +1,141 @@ +CREATE TABLE hrsa_tax_agent_emp +( + id bigint(20) NOT NULL COMMENT 'ID', + create_time datetime(0) NULL DEFAULT NULL COMMENT 'ʱ', + update_time datetime(0) NULL DEFAULT NULL COMMENT '޸ʱ', + creator bigint(20) NULL DEFAULT NULL COMMENT 'id', + delete_type int(11) NULL DEFAULT 0, + tenant_key varchar(10) NULL DEFAULT NULL COMMENT '⻧KEY', + tax_agent_id bigint(20) NULL DEFAULT NULL COMMENT '˰۽˵id', + employee_id bigint(20) NULL DEFAULT NULL COMMENT 'ԱϢid', + employee_name varchar(255) NULL DEFAULT NULL, + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_tax_agent(tax_agent_id) USING BTREE +) ; + + +CREATE TABLE hrsa_tax_agent_emp_change +( + id bigint(20) NOT NULL COMMENT 'ID', + create_time datetime(0) NULL DEFAULT NULL COMMENT 'ʱ', + update_time datetime(0) NULL DEFAULT NULL COMMENT '޸ʱ', + creator bigint(20) NULL DEFAULT NULL COMMENT 'id', + delete_type int(11) NULL DEFAULT 0 COMMENT 'Ƿɾ', + tenant_key varchar(10) NULL DEFAULT NULL COMMENT '⻧KEY', + tax_agent_id bigint(20) NOT NULL COMMENT '˰۽˵id', + employee_id bigint(20) NOT NULL COMMENT 'ԱϢid', + change_type int(11) NOT NULL DEFAULT 0 COMMENT '͡12ɾ', + employee_name varchar(255) NULL DEFAULT NULL, + module_type int(4) NOT NULL DEFAULT 0, + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_tax_agent(tax_agent_id) USING BTREE +) ; + + + +CREATE TABLE hrsa_tax_agent_admin +( + id bigint(20) NOT NULL COMMENT '', + tax_agent_id bigint(20) NOT NULL COMMENT '˰۽˵id', + employee_id bigint(20) NOT NULL COMMENT 'ԱϢid', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP (0) COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP (0) ON UPDATE CURRENT_TIMESTAMP (0) COMMENT 'ʱ', + creator bigint(20) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(11) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_employee_id(employee_id) USING BTREE +) ; + + +CREATE TABLE hrsa_tax_agent_manage_range +( + id bigint(20) NOT NULL COMMENT 'id', + tax_agent_id bigint(20) NOT NULL DEFAULT 0 COMMENT '˰۽˵id', + employee_id bigint(20) NOT NULL DEFAULT 0 COMMENT 'Աid', + tax_agent_sub_admin_id bigint(20) NOT NULL DEFAULT 0 COMMENT '˰۽˵ķֹԱid', + target_type tinyint(4) NOT NULL DEFAULT 1 COMMENT '͡1Ա2š3λ', + target_id bigint(20) NOT NULL DEFAULT 0 COMMENT 'id', + employee_status varchar(100) NOT NULL, + include_type int(4) NOT NULL DEFAULT 1, + creator bigint(20) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP (0) COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP (0) ON UPDATE CURRENT_TIMESTAMP (0) COMMENT 'ʱ', + delete_type int(11) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + range_type int(4) NOT NULL DEFAULT 0, + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant(tenant_key) USING BTREE, + INDEX idx_tax_agent_sub_admin_id(tax_agent_sub_admin_id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) ; + + +CREATE TABLE hrsa_tax_agent_base +( + id bigint(20) NOT NULL COMMENT '', + devolution_status int(11) NOT NULL DEFAULT 0 COMMENT 'Ȩ״̬0ء1', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP (0) COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP (0) ON UPDATE CURRENT_TIMESTAMP (0) COMMENT 'ʱ', + creator bigint(20) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(11) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE +) ; + + +CREATE TABLE hrsa_tax_agent_sub_admin +( + id bigint(20) NOT NULL COMMENT '', + tax_agent_id bigint(20) NOT NULL COMMENT '˰۽˵id', + employee_id bigint(20) NOT NULL COMMENT 'ԱϢid', + description varchar(100) NULL DEFAULT NULL COMMENT '', + create_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + update_time datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP (0) COMMENT 'ʱ', + creator bigint(20) NOT NULL DEFAULT 0 COMMENT '', + delete_type int(11) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + remark text NULL, + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_tax_agent_id(tax_agent_id) USING BTREE, + INDEX idx_employee_id(employee_id) USING BTREE +) ; + + +CREATE TABLE hrsa_tax_agent_sub_admin_emp +( + id bigint(20) NOT NULL COMMENT 'ID', + create_time datetime(0) NULL DEFAULT NULL COMMENT 'ʱ', + update_time datetime(0) NULL DEFAULT NULL COMMENT '޸ʱ', + creator bigint(20) NULL DEFAULT NULL COMMENT 'id', + delete_type int(11) NULL DEFAULT 0 COMMENT 'Ƿɾ', + tenant_key varchar(10) NULL DEFAULT NULL COMMENT '⻧KEY', + tax_agent_id bigint(20) NOT NULL DEFAULT 0 COMMENT '˰۽˵id', + tax_agent_sub_admin_id bigint(20) NOT NULL DEFAULT 0 COMMENT '˰۽˵ķֹԱid', + employee_id bigint(20) NOT NULL DEFAULT 0 COMMENT 'ԱϢid', + employee_name varchar(255) NULL DEFAULT NULL COMMENT 'Ա', + PRIMARY KEY (id) USING BTREE, + INDEX idx_tenant_key(tenant_key) USING BTREE, + INDEX idx_tax_agent(tax_agent_id) USING BTREE +) ; + + + +ALTER TABLE hrsa_tax_agent ADD COLUMN payment_agency varchar(255) NULL COMMENT 'ɻ' ; + + +ALTER TABLE hrsa_salary_sob ADD COLUMN tax_agent_id bigint(0) NULL COMMENT '˰۽˵id' ; + + +INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 1, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams'); + +ALTER TABLE hrsa_bill_detail_temp ADD COLUMN payment_organization bigint(0) NULL COMMENT '˰۽id' ; + +ALTER TABLE hrsa_bill_detail ADD COLUMN payment_organization bigint(0) NULL COMMENT '˰۽id' ; + +ALTER TABLE hrsa_bill_batch ADD COLUMN payment_organization bigint(0) NULL COMMENT '˰۽id' ; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202206090403.sql b/resource/sqlupgrade/Mysql/sql202206090403.sql new file mode 100644 index 000000000..7b187381f --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202206090403.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_tax_declaration ADD COLUMN income_category int(255) NOT NULL COMMENT 'н͡1нá4' ; + +ALTER TABLE hrsa_tax_declaration_detail ADD COLUMN employee_type int(255) NOT NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202206141003.sql b/resource/sqlupgrade/Mysql/sql202206141003.sql new file mode 100644 index 000000000..120b99e0b --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202206141003.sql @@ -0,0 +1,21 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836162, 'ۼӤ׶ջ', 'addUpInfantCare', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655196897860, '', 0, 1, 0, 0, 'all_teams', '2022-05-31 17:36:04', '2022-05-31 17:36:04', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703419929857687552, 'ǰۼ˰', 'addUpTaxFreeIncome', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197296054, '', 0, 1, 0, 0, 'all_teams', '2022-03-11 13:50:17', '2022-03-17 16:13:27', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836161, 'ۼƴҽ', 'addUpIllnessMedical', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197430967, '', 0, 1, 0, 0, 'all_teams', '2022-03-17 13:30:57', '2022-03-18 17:06:46', 'number'); + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655196897860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼӤ׶ջ}', 'addUpDeductions_addUpInfantCare', 92, 0, '2022-06-14 16:54:58', '2022-06-14 16:54:58'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197296054, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ˰}+{ۼ.ۼ˰}', 'salaryItem_taxFreeIncome+addUpSituation_addUpTaxExemptIncome', 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197430967, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƴҽ}', 'addUpDeductions_addUpIllnessMedical', 92, 0, '2022-06-14 17:03:51', '2022-06-14 17:03:51'); + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655196897869, 'ۼӤ׶ջ', 1655196897860, 'addUpDeductions_addUpInfantCare', '{ۼרӿ۳.ۼӤ׶ջ}', 'number', 'addUpDeductions', 0, 92, 0, '2022-06-14 16:54:58', '2022-06-14 16:54:58'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296059, '£Σ˰', 1655197296054, 'salaryItem_taxFreeIncome', '{нĿ.£Σ˰}', 'number', 'salaryItem', 0, 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296063, 'ۼ˰', 1655197296054, 'addUpSituation_addUpTaxExemptIncome', '{ۼ.ۼ˰}', 'number', 'addUpSituation', 1, 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197430986, 'ۼƴҽ', 1655197430967, 'addUpDeductions_addUpIllnessMedical', '{ۼרӿ۳.ۼƴҽ}', 'number', 'addUpDeductions', 0, 92, 0, '2022-06-14 17:03:51', '2022-06-14 17:03:51'); + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (728615865977528321, 1, 705641858303836162, 1, 0, 0, '2022-05-31 17:36:04', '2022-05-31 17:36:04', 0, 'all_teams', 703433961629614103, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845569, 1, 674853617092214787, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 8); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845572, 1, 674853617092214788, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 9); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845578, 1, 674853617092214789, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 10); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845567, 1, 733975748932845568, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 11); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202206160500.sql b/resource/sqlupgrade/Mysql/sql202206160500.sql new file mode 100644 index 000000000..cf0c9b791 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202206160500.sql @@ -0,0 +1,30 @@ +delete from SystemRightDetail where rightid =2693 +; +delete from SystemRightsLanguage where id =2693 +; +delete from SystemRights where id =2693 +; +delete from SystemRightToGroup where rightid =2693 +; +delete from SystemRightType where id =36 +; +delete from SystemRightGroups where id =-22 +; +insert into SystemRights (id,rightdesc,righttype,detachable) values (2693,'нȨ','36',0) +; +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,8,'Salary management authority','Salary management authority') +; +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,9,'н','н') +; +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,7,'нȨ','нȨ') +; + +insert into SystemRightDetail (id,rightdetailname,rightdetail,rightid) values (43969,'нܹԱ','Salary:Chief',2693) +; + +insert into SystemRightToGroup(rightid,groupid) values (2693,-22) +; +insert into SystemRightGroups (id,rightgroupmark, rightgroupname, rightgroupremark) values(-22,'SALARY','нȨ','н') +; +insert into SystemRightType(id,rightTypeName,rightTypeDesc) VALUES (36,'н','н') +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202206230403.sql b/resource/sqlupgrade/Mysql/sql202206230403.sql new file mode 100644 index 000000000..7bc92c9a7 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202206230403.sql @@ -0,0 +1,15 @@ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655976865885, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}+{нĿ.ۼƴҽ}+{нĿ.ۼӤ׶ջ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoanInterest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly+salaryItem_addUpIllnessMedical+salaryItem_addUpInfantCare', 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865909, 'ۼ', 1655976865885, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865913, 'ۼƼ', 1655976865885, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865917, 'ۼס', 1655976865885, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865921, 'ۼסϢ', 1655976865885, 'salaryItem_addUpHousingLoanInterest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865924, 'ۼŮ', 1655976865885, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865929, 'ۼƴҽ', 1655976865885, 'salaryItem_addUpIllnessMedical', '{нĿ.ۼƴҽ}', 'number', 'salaryItem', 5, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865933, 'ۼӤ׶ջ', 1655976865885, 'salaryItem_addUpInfantCare', '{нĿ.ۼӤ׶ջ}', 'number', 'salaryItem', 6, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); + +update hrsa_sys_salary_item set formula_id = 1655976865885 where id = 674853617092214804; + + +update hrsa_salary_item set formula_id = 1655976865885 where sys_salary_item_id = 674853617092214804; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202207110803.sql b/resource/sqlupgrade/Mysql/sql202207110803.sql new file mode 100644 index 000000000..c93e72972 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202207110803.sql @@ -0,0 +1,22 @@ +CREATE TABLE hrsa_salary_acct_result_report +( + id bigint(20) NOT NULL, + salary_sob_id bigint(20) NOT NULL DEFAULT 0 COMMENT 'нid', + salary_acct_emp_id varchar(200) NOT NULL DEFAULT '' COMMENT 'нʺԱid', + salary_acct_record_id bigint(20) NOT NULL DEFAULT 0 COMMENT 'нʺid', + employee_id varchar(200) NULL DEFAULT '' COMMENT 'Աid', + tax_agent_id bigint(20) NOT NULL DEFAULT 0 COMMENT '˰۽id', + salary_item_id bigint(20) NOT NULL DEFAULT 0 COMMENT 'нĿid', + result_value varchar(1000) NOT NULL DEFAULT '' COMMENT 'ֵ', + creator bigint(20) NOT NULL DEFAULT 0 COMMENT '', + create_time datetime(0) NULL DEFAULT NULL COMMENT 'ʱ', + update_time datetime(0) NULL DEFAULT NULL COMMENT 'ʱ', + delete_type int(11) NOT NULL DEFAULT 0 COMMENT 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) NOT NULL DEFAULT '' COMMENT '⻧ID', + department_id bigint(20) NULL DEFAULT NULL COMMENT '', + subcompany_id bigint(20) NULL DEFAULT NULL COMMENT 'ֲ', + costcenter_id bigint(20) NULL DEFAULT NULL COMMENT 'ɱ', + jobtitle_id bigint(20) NULL DEFAULT NULL COMMENT 'λ', + location_id bigint(20) NULL DEFAULT NULL COMMENT 'ص', + PRIMARY KEY (id) USING BTREE +); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202207120303.sql b/resource/sqlupgrade/Mysql/sql202207120303.sql new file mode 100644 index 000000000..8b2ad7ba6 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202207120303.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_sys_conf +( + id bigint(0) NOT NULL, + conf_key varchar(200) NOT NULL COMMENT 'ʶ', + conf_value varchar(500) NOT NULL COMMENT 'ֵ', + title varchar(200) NULL DEFAULT NULL COMMENT '', + module varchar(200) NULL DEFAULT NULL COMMENT 'ģ', + order_weight int(0) NULL DEFAULT NULL COMMENT 'Ȩ', + description varchar(200) NULL DEFAULT NULL COMMENT '', + delete_type int(0) NULL DEFAULT NULL COMMENT 'Ƿɾ01', + create_time datetime(0) NULL DEFAULT NULL COMMENT 'ʱ', + update_time datetime(0) NULL DEFAULT NULL COMMENT '޸ʱ', + PRIMARY KEY (id) USING BTREE +) ; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202207210203.sql b/resource/sqlupgrade/Mysql/sql202207210203.sql new file mode 100644 index 000000000..a2a9a2993 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202207210203.sql @@ -0,0 +1,4 @@ +ALTER TABLE hrsa_salary_archive +ADD COLUMN tax_agent_id bigint(0) NULL COMMENT '˰۽id' , +ADD COLUMN pay_start_date datetime(0) NULL DEFAULT NULL COMMENT 'ʼн' , +ADD COLUMN pay_end_date datetime(0) NULL DEFAULT NULL COMMENT 'н' ; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202208051103.sql b/resource/sqlupgrade/Mysql/sql202208051103.sql new file mode 100644 index 000000000..844d109e7 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202208051103.sql @@ -0,0 +1,97 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599184238075904, '籣˺ϼ', 'socialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339100298, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 17:01:24', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599446244319233, '˺ϼ', 'accumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339063868, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 17:01:26', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458434280095745, '', 'laborIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 16:55:45', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458558739300353, '˰', 'laborTaxFreeIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-08-01 16:55:54', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459151591383041, 'ע', 'description', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-06-17 09:01:57', 'string') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459464954929153, 'Ŀ', 'incomeItems', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-06-17 09:01:57', 'string') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704467747234045953, '˰', 'laborSubtraction', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340673739, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-08-01 17:03:47', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468391612751873, '˰Ӧ˰ö', 'laborTaxableIncome', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340916981, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:51', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468443048992769, '˰˰', 'laborTaxRate', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341397524, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:53', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468490269204481, '˰۳', 'laborQuickDeductionFactor', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341564390, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:54', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468528928063488, '˰Ӧ˰', 'laborTaxPayable', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341811881, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:59', '2022-08-01 17:03:55', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (733975748932845568, '˰', 'taxAdjustment', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:59', '2022-06-17 09:01:59', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629570, 'ҵ', 'commercialHealthInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341909423, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:38', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629571, '˰ϱ', 'taxDeferredEndowmentInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341966905, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:40', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629572, '', 'other4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341993723, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:41', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629573, '£Σ׼۳ľ', 'allowedDonation4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659342041963, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:42', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629574, 'ע', 'description4', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 16:56:25', 'string') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629575, 'ѷнʺϼ', 'issuedTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-08-01 16:59:28', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629576, 'нʺϼ', 'ressueTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-08-01 16:59:40', 'number') +; + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339063868, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}', 'welfare_fundPerSum', 92, 0, '2022-08-01 15:31:04', '2022-08-01 15:31:04') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339100298, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}', 'welfare_socialPerSum', 92, 0, '2022-08-01 15:31:40', '2022-08-01 15:31:40') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340673739, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.}-{нĿ.˰}<=4000){800;}else{0.2*({нĿ.}-{нĿ.˰})}', 'if(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome<=4000){800;}else{0.2*(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome)}', 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340916981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}-{нĿ.˰}-{нĿ.˰}', 'salaryItem_laborIncome-salaryItem_laborTaxFreeIncome-salaryItem_laborSubtraction', 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341397524, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0.2;}else if({нĿ.˰Ӧ˰ö}<=50000){0.3;}else{0.4;}', 'if(salaryItem_laborTaxableIncome<=20000){0.2;}else if(salaryItem_laborTaxableIncome<=50000){0.3;}else{0.4;}', 92, 0, '2022-08-01 16:09:57', '2022-08-01 16:09:57') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341564390, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0;}else if({нĿ.˰Ӧ˰ö}<=50000){2000;}else{7000;}', 'if(salaryItem_laborTaxableIncome<=20000){0;}else if(salaryItem_laborTaxableIncome<=50000){2000;}else{7000;}', 92, 0, '2022-08-01 16:12:44', '2022-08-01 16:12:44') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341811881, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=0){0;}else{{нĿ.˰Ӧ˰ö}*{нĿ.˰˰}-{нĿ.˰۳}}', 'if(salaryItem_laborTaxableIncome<=0){0;}else{salaryItem_laborTaxableIncome*salaryItem_laborTaxRate-salaryItem_laborQuickDeductionFactor}', 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341909423, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 92, 0, '2022-08-01 16:18:29', '2022-08-01 16:18:29') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341966905, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 92, 0, '2022-08-01 16:19:27', '2022-08-01 16:19:27') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341993723, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 92, 0, '2022-08-01 16:19:54', '2022-08-01 16:19:54') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659342041963, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 92, 0, '2022-08-01 16:20:42', '2022-08-01 16:20:42') +; + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339063886, '˺ϼ', 1659339063868, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 1, 92, 0, '2022-08-01 15:31:04', '2022-08-01 15:31:04') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339100354, '籣˺ϼ', 1659339100298, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 2, 92, 0, '2022-08-01 15:31:40', '2022-08-01 15:31:40') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673751, '', 1659340673739, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673754, '˰', 1659340673739, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917032, '', 1659340916981, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917035, '˰', 1659340916981, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917039, '˰', 1659340916981, 'salaryItem_laborSubtraction', '{нĿ.˰}', 'number', 'salaryItem', 2, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341397539, '˰Ӧ˰ö', 1659341397524, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:09:57', '2022-08-01 16:09:57') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341564447, '˰Ӧ˰ö', 1659341564390, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:12:44', '2022-08-01 16:12:44') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811897, '˰Ӧ˰ö', 1659341811881, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811901, '˰˰', 1659341811881, 'salaryItem_laborTaxRate', '{нĿ.˰˰}', 'number', 'salaryItem', 3, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811904, '˰۳', 1659341811881, 'salaryItem_laborQuickDeductionFactor', '{нĿ.˰۳}', 'number', 'salaryItem', 4, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341909473, 'ҵ', 1659341909423, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:18:29', '2022-08-01 16:18:29') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341966920, '˰ϱ', 1659341966905, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:19:27', '2022-08-01 16:19:27') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341993736, '', 1659341993723, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:19:54', '2022-08-01 16:19:54') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659342041967, '׼۳ľ', 1659342041963, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:20:42', '2022-08-01 16:20:42') +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202208080403.sql b/resource/sqlupgrade/Mysql/sql202208080403.sql new file mode 100644 index 000000000..19b0087e7 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202208080403.sql @@ -0,0 +1,40 @@ +Alter table hrsa_bill_detail MODIFY column social_payment_base_string varchar(1500) +; +Alter table hrsa_bill_detail MODIFY column fund_payment_base_string varchar(1500) +; +Alter table hrsa_bill_detail MODIFY column other_payment_base_string varchar(1500) +; +Alter table hrsa_bill_detail MODIFY column social_per_json varchar(1500) +; +Alter table hrsa_bill_detail MODIFY column fund_per_json varchar(1500) +; +Alter table hrsa_bill_detail MODIFY column other_per_json varchar(1500) +; +Alter table hrsa_bill_detail MODIFY column social_com_json varchar(1500) +; +Alter table hrsa_bill_detail MODIFY column fund_com_json varchar(1500) +; +Alter table hrsa_bill_detail MODIFY column other_com_json varchar(1500) +; + + + + +Alter table hrsa_bill_detail_temp MODIFY column social_payment_base_string varchar(1500) +; +Alter table hrsa_bill_detail_temp MODIFY column fund_payment_base_string varchar(1500) +; +Alter table hrsa_bill_detail_temp MODIFY column other_payment_base_string varchar(1500) +; +Alter table hrsa_bill_detail_temp MODIFY column social_per_json varchar(1500) +; +Alter table hrsa_bill_detail_temp MODIFY column fund_per_json varchar(1500) +; +Alter table hrsa_bill_detail_temp MODIFY column other_per_json varchar(1500) +; +Alter table hrsa_bill_detail_temp MODIFY column social_com_json varchar(1500) +; +Alter table hrsa_bill_detail_temp MODIFY column fund_com_json varchar(1500) +; +Alter table hrsa_bill_detail_temp MODIFY column other_com_json varchar(1500) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202208240403.sql b/resource/sqlupgrade/Mysql/sql202208240403.sql new file mode 100644 index 000000000..513718b84 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202208240403.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_social_security_scheme +ADD COLUMN shared_type varchar(255) NULL , +ADD COLUMN tax_agent_ids varchar(500) NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202208240503.sql b/resource/sqlupgrade/Mysql/sql202208240503.sql new file mode 100644 index 000000000..194d33fc3 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202208240503.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_salary_item_hide ( + id bigint NOT NULL, + salary_sob_id bigint NOT NULL, + salary_item_id bigint NOT NULL, + is_group int NOT NULL, + item_hide bigint NULL DEFAULT 0, + creator bigint NOT NULL DEFAULT 0, + delete_type int NOT NULL DEFAULT 0, + tenant_key varchar(10), + create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + update_time datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (id) USING BTREE +); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202210080203.sql b/resource/sqlupgrade/Mysql/sql202210080203.sql new file mode 100644 index 000000000..fc1d2b8a7 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202210080203.sql @@ -0,0 +1,93 @@ +CREATE TABLE hrsa_excel_bill_detail ( + + id bigint NOT NULL, + + employee_id bigint NOT NULL, + + bill_month varchar(30) NOT NULL, + + bill_status int NOT NULL, + + payment_status int NOT NULL, + + supplementary_month varchar(50) NULL, + + supplementary_projects varchar(50) NULL, + + resource_from int NOT NULL, + + social_pay_org int NULL, + + social_account varchar(50) NULL, + + social_scheme_id bigint NULL, + + social_payment_base_string longtext NULL, + + fund_pay_org int NULL, + + fund_account varchar(50) NULL, + + supplement_fund_account varchar(50) NULL, + + fund_scheme_id int NULL, + + fund_payment_base_string longtext NULL, + + other_pay_org int NULL, + + other_scheme_id bigint NULL, + + other_payment_base_string longtext NULL, + + social_per_json longtext NULL, + + social_per_sum text NULL, + + fund_per_json longtext NULL, + + fund_per_sum text NULL, + + other_per_json longtext NULL, + + other_per_sum text NULL, + + per_sum text NULL, + + social_com_json longtext NULL, + + social_com_sum text NULL, + + fund_com_json longtext NULL, + + fund_com_sum text NULL, + + other_com_json longtext NULL, + + other_com_sum text NULL, + + com_sum text NULL, + + social_sum text NULL, + + fund_sum text NULL, + + other_sum text NULL, + + total text NULL, + + creator bigint NOT NULL DEFAULT 0 , + + create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + + update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + delete_type int NOT NULL DEFAULT 0 , + + tenant_key varchar(10) NOT NULL , + + payment_organization bigint NULL, + +PRIMARY KEY (id) USING BTREE + +); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202210080403.sql b/resource/sqlupgrade/Mysql/sql202210080403.sql new file mode 100644 index 000000000..f6886cb28 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202210080403.sql @@ -0,0 +1,4 @@ +ALTER TABLE hrsa_salary_archive +ADD COLUMN run_status varchar(255) NULL, +ADD COLUMN add_type varchar(255) NULL, +ADD COLUMN stop_type varchar(255) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202210170203.sql b/resource/sqlupgrade/Mysql/sql202210170203.sql new file mode 100644 index 000000000..28f9009e7 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202210170203.sql @@ -0,0 +1,29 @@ +CREATE TABLE hrsa_insurance_base_info ( + + id bigint NOT NULL, + + employee_id bigint NOT NULL COMMENT 'Աid', + + payment_organization int NULL COMMENT '˰۽id', + + social_archives_id bigint NULL COMMENT '籣id', + + fund_archives_id bigint NULL COMMENT '𵵰id', + + other_archives_id bigint NULL COMMENT 'id', + + tenant_key varchar(10) NOT NULL, + + creator int NOT NULL, + + delete_type int NOT NULL, + + create_time datetime NOT NULL, + + update_time datetime NOT NULL, + + run_status varchar(20) NOT NULL COMMENT 'ִ״̬', + +PRIMARY KEY ( id ) + +); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202210170303.sql b/resource/sqlupgrade/Mysql/sql202210170303.sql new file mode 100644 index 000000000..cb217890a --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202210170303.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_salary_sob_range ADD employee_statuses VARCHAR(255); + +ALTER TABLE hrsa_salary_sob_range modify employee_status int NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202211090103.sql b/resource/sqlupgrade/Mysql/sql202211090103.sql new file mode 100644 index 000000000..51eaaa753 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202211090103.sql @@ -0,0 +1,26 @@ +create table hrsa_special_add_deduction +( + id bigint auto_increment + primary key, + employee_id bigint not null comment 'ԱϢid', + tax_agent_id bigint not null comment '˰۽˵id', + children_education varchar(255) default '' null comment 'Ů', + continuing_education varchar(255) default '' null comment '', + housing_loan_interest varchar(255) default '' null comment 'סϢ', + housing_rent varchar(255) default '' null comment 'ס', + supporting_elder varchar(255) default '' null comment '', + serious_illness_treatment varchar(255) default '' null comment 'ҽ', + infant_care varchar(255) default '' null comment 'Ӥ׶ջ', + create_time datetime default CURRENT_TIMESTAMP not null comment 'ʱ', + update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment 'ʱ', + creator bigint default 0 not null comment '', + delete_type int default 0 not null comment 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) default '' not null comment '⻧ID' +) + comment 'ݲɼ-רӿ۳'; + +create index idx_employee_id + on hrsa_special_add_deduction (employee_id); + +create index idx_tenant_key + on hrsa_special_add_deduction (tenant_key); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202211090301.sql b/resource/sqlupgrade/Mysql/sql202211090301.sql new file mode 100644 index 000000000..f61abf167 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202211090301.sql @@ -0,0 +1,86 @@ +delete from HtmlLabelIndex where id = 539971 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 539971,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539971 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'Rule Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'ҎtO' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlModuleLabel where indexId = 539971 and moduleCode = 'HRM' and type = 'label' +; +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539971) +; + + +delete from HtmlLabelIndex where id = 539970 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 539970,'Ӧ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539970 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Ӧ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Apply Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlModuleLabel where indexId = 539970 and moduleCode = 'HRM' and type = 'label' +; +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539970) +; + + +delete from HtmlLabelIndex where id = 539968 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 539968,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539968 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'set up' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlModuleLabel where indexId = 539968 and moduleCode = 'HRM' and type = 'label' +; +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539968) +; + + +delete from HtmlLabelIndex where id = 539967 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 539967,'רӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539967 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'רӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'Special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlModuleLabel where indexId = 539967 and moduleCode = 'HRM' and type = 'label' +; +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539967) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202211090402.sql b/resource/sqlupgrade/Mysql/sql202211090402.sql new file mode 100644 index 000000000..506fed8b5 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202211090402.sql @@ -0,0 +1,43 @@ +Delete from LeftMenuInfo where id=100183 +; +Delete from LeftMenuConfig where infoid=100183 +; +call LMConfig_U_ByInfoInsert (2,100181,0) +; +call LMInfo_Insert (100183,539970,'','',2,100181,0,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/appconfig' where id = 100183 +; + +Delete from LeftMenuInfo where id=100182 +; +Delete from LeftMenuConfig where infoid=100182 +; +call LMConfig_U_ByInfoInsert (2,100181,-1) +; +call LMInfo_Insert (100182,539971,'','',2,100181,-1,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/sysconfig-1' where id = 100182 +; + +Delete from LeftMenuInfo where id=100180 +; +Delete from LeftMenuConfig where infoid=100180 +; +call LMConfig_U_ByInfoInsert (2,100126,0) +; +call LMInfo_Insert (100180,539967,'','',2,100126,0,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/specialAddDeduction' where id = 100180 +; + +Delete from LeftMenuInfo where id=100181 +; +Delete from LeftMenuConfig where infoid=100181 +; +call LMConfig_U_ByInfoInsert (2,100118,9) +; +call LMInfo_Insert (100181,539968,'','',2,100118,9,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100181 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202211170503.sql b/resource/sqlupgrade/Mysql/sql202211170503.sql new file mode 100644 index 000000000..ff25c1df8 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202211170503.sql @@ -0,0 +1,5 @@ +alter table hrsa_salary_item add shared_type int ; + +alter table hrsa_salary_item add tax_agent_ids varchar(1024) null; + +ALTER TABLE hrsa_salary_acct_record ADD COLUMN lock_salary_item_ids varchar(2000); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202212080903.sql b/resource/sqlupgrade/Mysql/sql202212080903.sql new file mode 100644 index 000000000..1b622dad1 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202212080903.sql @@ -0,0 +1,70 @@ +CREATE TABLE hrsa_compensation_log ( + + id bigint NOT NULL, + + payment_agency bigint NULL COMMENT '֯', + + payment_organization bigint NULL COMMENT '˰۽', + + employee_id bigint NULL COMMENT 'Աid', + + welfare_type int NULL COMMENT '', + + category_type varchar(100) NULL COMMENT 'µĸ', + + country_total text NULL COMMENT 'Һ', + + company_total text NULL COMMENT '˾', + + adjustment_total text NULL COMMENT 'Ӧ', + + adjust_to bigint NULL COMMENT '', + + bill_month varchar(30) NULL COMMENT '˵·', + + creator bigint NULL COMMENT 'id', + + delete_type int NULL COMMENT 'Ƿɾ', + + create_time datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + + update_time datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + + tenant_key varchar(10) NULL COMMENT '⻧key', + +PRIMARY KEY ( id ) USING BTREE + +) +COMMENT = '籣̨-ʷ¼'; + + +CREATE TABLE hrsa_compensation_config ( + + id bigint NOT NULL, + + payment_agency bigint NULL COMMENT '֯', + + payment_organization bigint NULL COMMENT '˰۽', + + employee_id bigint NULL COMMENT 'Աid', + + welfare_type int NULL COMMENT '', + + category_type varchar(100) NULL COMMENT 'µĸ', + + adjust_to bigint NULL COMMENT '', + + creator bigint NULL COMMENT 'id', + + delete_type int NULL COMMENT 'Ƿɾ', + + create_time datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ʱ', + + update_time datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'ʱ', + + tenant_key varchar(10) NULL COMMENT '⻧key', + +PRIMARY KEY ( id ) USING BTREE + +) +COMMENT = '籣̨-ñ'; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202212081003.sql b/resource/sqlupgrade/Mysql/sql202212081003.sql new file mode 100644 index 000000000..924dd1079 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202212081003.sql @@ -0,0 +1,28 @@ +create table hrsa_salary_send_range +( + id bigint not null comment 'id' auto_increment primary key, + salary_send_id bigint default 0 not null comment 'id', + grant_type varchar(64) not null comment '=grant;=withdraw', + creator bigint default 0 not null comment '', + create_time datetime default CURRENT_TIMESTAMP not null comment 'ʱ', + update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment 'ʱ', + delete_type int default 0 not null comment 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) default '' not null comment '⻧ID' +) +; + +create table hrsa_salary_send_range_obj +( + id bigint auto_increment comment 'id' primary key, + salary_send_id bigint default 0 not null comment 'id', + salary_send_range_id bigint default 0 not null, + range_type int not null comment 'Χ;=1;ų=2', + target_type int not null comment 'ĿͣԱ=1,=2,ֲ=3,λ=4,˰۽=5,=0', + target_id bigint not null comment 'Ŀid', + creator bigint default 0 not null comment '', + create_time datetime default CURRENT_TIMESTAMP not null comment 'ʱ', + update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment 'ʱ', + delete_type int default 0 not null comment 'Ƿɾ0δɾ1ɾ', + tenant_key varchar(10) default '' not null comment '⻧ID' +) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202212230103.sql b/resource/sqlupgrade/Mysql/sql202212230103.sql new file mode 100644 index 000000000..b3fa2736a --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202212230103.sql @@ -0,0 +1,29 @@ +CREATE TABLE hrsa_salary_sob_back_item( +id bigint NOT NULL COMMENT 'id', +salary_sob_id bigint NULL DEFAULT NULL COMMENT 'нid', +salary_item_id bigint NULL DEFAULT NULL COMMENT 'нĿid', +salary_item_code varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'нĿcode', +data_type varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'ֶ', +rounding_mode int NULL DEFAULT NULL COMMENT 'λ1ԭʼݡ2롢3롢4롢5ֽǡ6ż', +pattern int NULL DEFAULT NULL COMMENT 'Сλ', +value_type int NULL DEFAULT NULL COMMENT 'ȡֵʽ1롢2ʽ3sql', +formula_id bigint NULL DEFAULT NULL COMMENT 'ʽid', +back_calc_type int NULL DEFAULT NULL COMMENT '0:ѷĿ1:нĿ', +tenant_key varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '⻧key', +creator bigint NULL DEFAULT NULL COMMENT 'id', +delete_type int NULL DEFAULT NULL COMMENT 'Ƿɾ', +create_time datetime NULL DEFAULT NULL COMMENT 'ʱ', +update_time datetime NULL DEFAULT NULL COMMENT 'ʱ', +PRIMARY KEY (id) USING BTREE +) COMMENT = 'н׻нĿ'; + +alter table hrsa_salary_acct_record add back_calc_status int null COMMENT 'Ƿǻ 0ǻ㡢1ǻ'; +alter table hrsa_salary_acct_result add origin_result_value VARCHAR(1000) null COMMENT 'ǰֵ'; +alter table hrsa_salary_acct_result_report add origin_result_value VARCHAR(1000) null COMMENT 'ǰֵ'; +alter table hrsa_salary_send add salary_acct_type int null COMMENT '͡01'; +alter table hrsa_salary_send add send_status int null COMMENT '״̬0δᡢ1Ѷ'; +alter table hrsa_salary_send_info add salary_acct_type int null COMMENT '͡01'; +alter table hrsa_salary_template add replenish_name VARCHAR(100) null COMMENT 'ʵģ'; +alter table hrsa_salary_template add replenish_rule VARCHAR(255) null COMMENT 'ʵɹ'; +alter table hrsa_salary_template add replenish_salary_item_setting text null COMMENT 'нĿ'; +alter table hrsa_acct_result_temp add origin_result_value VARCHAR(1000) null COMMENT 'ǰֵ'; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202301310403.sql b/resource/sqlupgrade/Mysql/sql202301310403.sql new file mode 100644 index 000000000..ae7927ed2 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202301310403.sql @@ -0,0 +1,41 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629577, 'ս', 'annualIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629578, 'ս˰', 'annualTaxRate', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1675043440772, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2023-01-30 09:51:43', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629579, 'ս۳', 'annualQuickDeductionFactor', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674894163247, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629580, 'սӦ˰', 'annualTax', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674896933031, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629581, 'Ӧս', 'annualPayable', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674897014605, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629600, 'ս˰', 'annualTaxFreeIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629601, 'ս', 'annualOther', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2023-01-30 15:33:47', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629602, '׼۳ľս', 'annualDonateTax', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629603, '˰ս', 'annualTaxSavings', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629604, 'עս', 'annualRemark', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2023-01-30 15:33:31', 'string'); + + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845590, 2, 746777981115629577, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845591, 2, 746777981115629578, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845592, 2, 746777981115629579, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845593, 2, 746777981115629580, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845595, 2, 746777981115629600, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845596, 2, 746777981115629601, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845597, 2, 746777981115629602, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845598, 2, 746777981115629603, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845599, 2, 746777981115629604, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 8); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845594, 2, 746777981115629581, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 9); + + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674894163247, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=36000){0;}else if({нĿ.ս}<=144000){210;}else if({нĿ.ս}<=300000){1410;}else if({нĿ.ս}<=420000){2660;}else if({нĿ.ս}<=660000){4410;}else if({нĿ.ս}<=960000){7160;}else{15160;}', 'if(salaryItem_annualIncome<=36000){0;}else if(salaryItem_annualIncome<=144000){210;}else if(salaryItem_annualIncome<=300000){1410;}else if(salaryItem_annualIncome<=420000){2660;}else if(salaryItem_annualIncome<=660000){4410;}else if(salaryItem_annualIncome<=960000){7160;}else{15160;}', 92, 0, '2023-01-28 16:22:43', '2023-01-28 16:22:43'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674896933031, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}*{нĿ.ս˰}-{нĿ.ս۳}', 'salaryItem_annualIncome*salaryItem_annualTaxRate-salaryItem_annualQuickDeductionFactor', 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674897014605, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}-{нĿ.սӦ˰}', 'salaryItem_annualIncome-salaryItem_annualTax', 92, 0, '2023-01-28 17:10:15', '2023-01-28 17:10:15'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1675043440772, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=0){0;}else if({нĿ.ս}<=36000){0.03;}else if({нĿ.ս}<=144000){0.1;}else if({нĿ.ս}<=300000){0.2;}else if({нĿ.ս}<=420000){0.25;}else if({нĿ.ս}<=660000){0.3;}else if({нĿ.ս}<=960000){0.35;}else{0.45;}', 'if(salaryItem_annualIncome<=0){0;}else if(salaryItem_annualIncome<=36000){0.03;}else if(salaryItem_annualIncome<=144000){0.1;}else if(salaryItem_annualIncome<=300000){0.2;}else if(salaryItem_annualIncome<=420000){0.25;}else if(salaryItem_annualIncome<=660000){0.3;}else if(salaryItem_annualIncome<=960000){0.35;}else{0.45;}', 92, 0, '2023-01-30 09:50:41', '2023-01-30 09:50:41'); + + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674894163265, 'ս', 1674894163247, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, '2023-01-28 16:22:43', '2023-01-28 16:22:43'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933036, 'ս', 1674896933031, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933041, 'ս˰', 1674896933031, 'salaryItem_annualTaxRate', '{нĿ.ս˰}', 'number', 'salaryItem', 1, 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933045, 'ս۳', 1674896933031, 'salaryItem_annualQuickDeductionFactor', '{нĿ.ս۳}', 'number', 'salaryItem', 2, 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014622, 'ս', 1674897014605, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, '2023-01-28 17:10:15', '2023-01-28 17:10:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014626, 'սӦ˰', 1674897014605, 'salaryItem_annualTax', '{нĿ.սӦ˰}', 'number', 'salaryItem', 1, 92, 0, '2023-01-28 17:10:15', '2023-01-28 17:10:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1675043440796, 'ս', 1675043440772, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 1, 92, 0, '2023-01-30 09:50:41', '2023-01-30 09:50:41'); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202302060801.sql b/resource/sqlupgrade/Mysql/sql202302060801.sql new file mode 100644 index 000000000..8b0e81ed3 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202302060801.sql @@ -0,0 +1,34 @@ +delete from HtmlLabelIndex where id = 540871 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 540871,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540871 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'file management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 540869 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 540869,'ֶι' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540869 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'Field management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202302060902.sql b/resource/sqlupgrade/Mysql/sql202302060902.sql new file mode 100644 index 000000000..dc20d76c1 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202302060902.sql @@ -0,0 +1,34 @@ +Delete from LeftMenuInfo where id=100125 +; +Delete from LeftMenuConfig where infoid=100125 +; +call LMConfig_U_ByInfoInsert (2,100118,2) +; +call LMInfo_Insert (100125,538004,'','',2,100118,2,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100125 +; + + + +Delete from LeftMenuInfo where id=100185 +; +Delete from LeftMenuConfig where infoid=100185 +; +call LMConfig_U_ByInfoInsert (2,100125,0) +; +call LMInfo_Insert (100185,540871,'','',2,100125,0,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100185 +; + +Delete from LeftMenuInfo where id=100184 +; +Delete from LeftMenuConfig where infoid=100184 +; +call LMConfig_U_ByInfoInsert (2,100125,-1) +; +call LMInfo_Insert (100184,540869,'','',2,100125,-1,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/fieldManagement' where id = 100184 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202302090303.sql b/resource/sqlupgrade/Mysql/sql202302090303.sql new file mode 100644 index 000000000..eb3c0c43e --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202302090303.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_scheme_detail ADD COLUMN payment_cycle int(0) NULL; +ALTER TABLE hrsa_scheme_detail ADD COLUMN account_type int(0) NULL; +ALTER TABLE hrsa_scheme_detail ADD COLUMN cycle_setting varchar(255) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202302200403.sql b/resource/sqlupgrade/Mysql/sql202302200403.sql new file mode 100644 index 000000000..3c2453e20 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202302200403.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_item MODIFY COLUMN shared_type int(0) NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202304040503.sql b/resource/sqlupgrade/Mysql/sql202304040503.sql new file mode 100644 index 000000000..168f8e5d6 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202304040503.sql @@ -0,0 +1,33 @@ +ALTER TABLE hrsa_other_deduction ADD COLUMN private_pension varchar(255) NULL; + +ALTER TABLE hrsa_add_up_situation ADD COLUMN add_up_private_pension varchar(255) NULL; + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629605, 'Ͻ', 'privatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1680746056549, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629698, 'ۼƸϽ', 'addUpPrivatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1681201555316, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1680746056549, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{˰۳.Ͻ}', 'otherDeduction_privatePension', 92, 0, '2023-04-06 09:54:16', '2023-04-06 09:54:16'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1680746056577, 'Ͻ', 1680746056549, 'otherDeduction_privatePension', '{˰۳.Ͻ}', 'number', 'otherDeduction', 0, 92, 0, '2023-04-06 09:54:16', '2023-04-06 09:54:16'); + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681201555316, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.Ͻ}+{ۼ.ۼƸϽ}', 'salaryItem_privatePension+addUpSituation_addUpPrivatePension', 92, 0, '2023-04-11 16:25:55', '2023-04-11 16:25:55'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555332, 'Ͻ', 1681201555316, 'salaryItem_privatePension', '{нĿ.Ͻ}', 'number', 'salaryItem', 0, 92, 0, '2023-04-11 16:25:55', '2023-04-11 16:25:55'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555338, 'ۼƸϽ', 1681201555316, 'addUpSituation_addUpPrivatePension', '{ۼ.ۼƸϽ}', 'number', 'addUpSituation', 1, 92, 0, '2023-04-11 16:25:55', '2023-04-11 16:25:55'); + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845610, 1, 746777981115629605, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 10); + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845611, 1, 746777981115629698, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 11); + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681265757380, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}-{нĿ.ۼƸϽ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation-salaryItem_addUpPrivatePension', 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757404, 'ǰۼ׼۳ľ', 1681265757380, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757408, 'ǰۼƼ', 1681265757380, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757413, 'ǰۼ۳ϼ', 1681265757380, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757417, 'ǰۼרӿ۳ϼ', 1681265757380, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757421, 'ǰۼר۳ϼ', 1681265757380, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757424, 'ǰۼӦ˰ϼ', 1681265757380, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757428, 'ۼƸϽ', 1681265757380, 'salaryItem_addUpPrivatePension', '{нĿ.ۼƸϽ}', 'number', 'salaryItem', 6, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); + + +update hrsa_sys_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö' ; +update hrsa_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö'; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202304260103.sql b/resource/sqlupgrade/Mysql/sql202304260103.sql new file mode 100644 index 000000000..e91b90473 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202304260103.sql @@ -0,0 +1 @@ +update hrsa_sys_salary_item set use_in_employee_salary = 1 where code in ('baseSalary','postSalary'); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202304270203.sql b/resource/sqlupgrade/Mysql/sql202304270203.sql new file mode 100644 index 000000000..2aab0b67f --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202304270203.sql @@ -0,0 +1,244 @@ +create table hrsa_sub_table +( + id bigint primary key comment 'ID' , + create_time datetime comment 'ʱ' , + update_time datetime comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + sub_table_name varchar(100) not null comment '' , + dimension varchar(20) not null comment 'ͳά' , + start_month varchar(10) comment 'ʼ' , + end_month varchar(10) comment 'ֹ' , + pay_org_string varchar(500) comment '˰۽˸߼' , + pay_agency_string varchar(500) comment '֯߼' , + sub_company_string varchar(500) comment 'ֲ߼' , + depart_string varchar(500) comment 'Ÿ߼' , + grade_string varchar(500) comment 'ְ߼' , + position_string varchar(500) comment 'λ߼' , + status_string varchar(500) comment 'Ա״̬߼' , + employee_type varchar(500) comment 'Ա͸߼' , + employee_string varchar(500) comment 'Ա߼' , + payment_type_string varchar(100) comment '' +) +; + +create table hrsa_sub_table_item +( + id bigint primary key comment 'ID' , + create_time datetime comment 'ʱ' , + update_time datetime comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + table_id bigint not null comment 'ݱid' , + item_name varchar(50) not null comment 'ͳ' , + item_value varchar(500) not null comment 'ͳ' , + index_value int not null comment '˳' , + total_rule varchar(500) comment 'ϼƹ' , + count_rule varchar(500) comment '' , + unit_type int default 2 comment 'ͳƵλ' +) +; + +alter table hrsa_sub_table add table_type int +; + +alter table hrsa_sub_table modify column table_type int default 0 +; + +create table hrsa_salary_stats_dim +( + id bigint primary key comment 'ID' , + create_time datetime comment 'ʱ' , + update_time datetime comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + dim_name varchar(100) comment 'ͳά' , + dim_type varchar(20) comment 'ͳά' , + remark varchar(500) comment '' , + setting varchar(2000) comment '', + is_default int comment 'ǷĬ' , + dim_code varchar(50) comment 'ͳάȱ' +) +; + +create table hrsa_salary_stats_report +( + id bigint primary key comment 'ID' , + create_time datetime comment 'ʱ' , + update_time datetime comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + report_name varchar(100) comment '' , + dimension varchar(1000) comment 'ͳά(ĻԶŷָ)' , + tax_agent_setting varchar(1000) comment '˰۽' , + income_category_setting varchar(20) comment 'Ŀ' , + sub_company_setting varchar(1000) comment 'ֲ' , + depart_setting varchar(1000) comment '' , + grade_setting varchar(1000) comment 'ְ' , + position_setting varchar(1000) comment 'λ' , + status_setting varchar(1000) comment '״̬' , + employee_setting varchar(1000) comment 'Ա' , + hiredate_setting varchar(1000) comment 'ְ' , + leavedate_setting varchar(1000) comment 'ְ' , + salary_start_month datetime comment 'н·-ʼ' , + salary_end_month datetime comment 'н·-ֹ' +) +; + +create table hrsa_salary_statistics_item +( + id bigint primary key comment 'ID' , + create_time datetime comment 'ʱ' , + update_time datetime comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + item_name varchar(50) comment 'ͳ' , + item_value varchar(1000) comment 'ͳ' , + count_rule varchar(500) comment '' , + sum_rule varchar(500) comment '͹' , + avg_rule varchar(500) comment 'ƽֵ' , + max_rule varchar(500) comment 'ֵ' , + min_rule varchar(500) comment 'Сֵ' , + median_rule varchar(500) comment 'λ' , + index_value int comment '˳' , + unit_type int comment 'ͳƵλ', + stat_report_id bigint comment 'ͳƱid' +) +; + +create table hrsa_charts_setting +( + id bigint primary key comment 'ID' , + create_time datetime comment 'ʱ' , + update_time datetime comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + table_id bigint not null comment 'id' , + charts_type int not null comment '' , + item_values varchar(500) comment 'ͳĿ' , + item_col_value varchar(50) not null comment 'ͳ' , + dimension_range int not null comment 'άͳƷΧ' , + item_sort_value varchar(500) comment 'ͳĿ' , + item_col_sort_value varchar(50) comment '' , + sort_type int comment '' , + sort_num int comment 'ȡֵ' +) +; + +create table hrsa_salary_echarts_setting +( + id bigint primary key comment 'ID' , + create_time datetime comment 'ʱ' , + update_time datetime comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + report_id bigint not null comment 'id' , + charts_type int not null comment '' , + item_values varchar(500) comment 'ͳĿ' , + item_col_value varchar(50) not null comment 'ͳ' , + dimension_range int not null comment 'άͳƷΧ' , + item_sort_value varchar(500) comment 'ͳĿ' , + item_col_sort_value varchar(50) comment '' , + sort_type int comment '' , + sort_num int comment 'ȡֵ' +) +; + +alter table hrsa_salary_stats_dim modify column dim_type varchar(30) +; + +alter table hrsa_salary_stats_report modify column income_category_setting varchar(1000) +; + +create table hrsa_statreportlogs_detail +( + id bigint primary key comment 'ID' , + create_time datetime comment 'ʱ' , + update_time datetime comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + uuid varchar(36) not null comment '־UUID' , + mainid varchar(36) not null comment 'id' , + dataid varchar(50) not null comment 'id' , + belongdataid varchar(50) not null comment 'id' , + tablename varchar(200) not null comment '' , + tablenamelabelid varchar(50) default '-1' not null comment 'labelid' , + tablenamedesc varchar(50) not null comment 'Ӧݿı' , + fieldname varchar(200) not null comment 'ֶ' , + fieldnamelabelid varchar(50) default '-1' not null comment 'ֶlabelid' , + newvalue text not null comment 'ºֵ' , + oldvalue text not null comment 'ǰֵ' , + newrealvalue text not null comment 'ºʾֵ' , + oldrealvalue text not null comment 'ǰʾֵ' , + fielddesc varchar(200) not null comment 'ֶ' , + showorder int(11) not null comment 'ֶ' , + isdetail int(11) default 0 not null comment 'Ƿϸֶ' +) +; + +create table hrsa_statreportlogs +( + id bigint primary key comment 'ID' , + create_time datetime comment 'ʱ' , + update_time datetime comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + uuid varchar(36) not null comment '־UUID' , + log_date datetime not null comment '¼ʱ' , + device varchar(500) not null comment 'նϢ' , + log_operator bigint not null comment '' , + operatorname varchar(100) comment '' , + targetid bigint default '-1' not null comment 'Ŀid' , + targetname text not null comment 'Ŀ' , + modulename varchar(100) not null comment 'ģ' , + functionname varchar(100) not null comment '񣨷' , + interfacename varchar(100) not null comment 'ʽӿ' , + requesturl varchar(200) not null comment 'ȫ·' , + requesturi varchar(200) not null comment 'ַ' , + operatetype varchar(50) not null comment '' , + operatetypename varchar(100) not null comment '' , + operatedesc varchar(3000) not null comment 'ϸ˵' , + params text not null comment '漰ز' , + belongmainid varchar(36) not null comment 'uuid' , + clientip varchar(50) not null comment 'IP' , + groupid varchar(50) not null comment '' , + groupnamelabel varchar(1000) not null comment '' , + redoservice varchar(200) not null comment 'ҵӿ' , + redocontext text not null comment '' , + cancelservice varchar(200) not null comment 'ҵӿ' , + cancelcontext text not null comment '' , + totalruntime bigint default '0' not null comment 'ʱ' , + mainruntime bigint default '0' not null comment 'ʱ' , + log_result varchar(100) not null comment '־' , + fromterminal varchar(100) not null comment 'pc web' , + resultdesc text not null comment 'н' , + old_content varchar(3000) not null comment 'ԭ' , + link_type varchar(20) not null comment '' , + link_id bigint default '0' not null comment 'id' , + old_link_id bigint default '0' not null comment 'ԭid' +) +; + +alter table hrsa_salary_stats_report add remark varchar(100) +; + +alter table hrsa_salary_stats_report add second_dimension varchar(100) +; + +alter table hrsa_salary_stats_report add sort_index varchar(100) +; + +alter table hrsa_salary_stats_report add sort_type varchar(100) +; + +alter table hrsa_salary_stats_dim add label_id int +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202304270303.sql b/resource/sqlupgrade/Mysql/sql202304270303.sql new file mode 100644 index 000000000..714f09c31 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202304270303.sql @@ -0,0 +1,7 @@ +select @current_date:= date_format( now(),'%Y-%m-%d'); +select @current_time:= date_format( now(),'%T'); +INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, 'нĿ', NULL, '', NULL, NULL, NULL, NULL, '', '', @current_date, @current_time, NULL, NULL, '', '', '0',uuid(), '', '', '', '', '1', 0, 1); +select @datashowset_id:= max(id) from datashowset; +INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, @current_date, @current_time, NULL, NULL); +INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (@datashowset_id, '', 'name', '', 1, 1, uuid(), NULL); +INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (@datashowset_id, '', 'name', '2', '', 1, uuid(), ''); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202304270501.sql b/resource/sqlupgrade/Mysql/sql202304270501.sql new file mode 100644 index 000000000..3afcff69c --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202304270501.sql @@ -0,0 +1,16 @@ +delete from HtmlLabelIndex where id = 542781 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 542781,'нͳƱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 542781 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нͳƱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'Salary Statistics Report' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нyӋ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202305050302.sql b/resource/sqlupgrade/Mysql/sql202305050302.sql new file mode 100644 index 000000000..ef6be9cea --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202305050302.sql @@ -0,0 +1,10 @@ +Delete from LeftMenuInfo where id=100187 +; +Delete from LeftMenuConfig where infoid=100187 +; +call LMConfig_U_ByInfoInsert (2,100118,9) +; +call LMInfo_Insert (100187,542781,'','',2,100118,9,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/analysisOfSalaryStatistics' where id = 100187 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202305170903.sql b/resource/sqlupgrade/Mysql/sql202305170903.sql new file mode 100644 index 000000000..e7f57dcc8 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202305170903.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_acct_result_log ( + id bigint NOT NULL, + datasource int NOT NULL, + salary_acct_record_id bigint NOT NULL, + salary_acct_result_id bigint NOT NULL, + salary_acct_emp_id bigint NOT NULL, + salary_item_id bigint NOT NULL, + employee_id bigint NOT NULL, + operator bigint NOT NULL, + operate_time datetime NOT NULL, + delete_type int NOT NULL, + update_time datetime NOT NULL, + PRIMARY KEY (id) USING BTREE +); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202306020403.sql b/resource/sqlupgrade/Mysql/sql202306020403.sql new file mode 100644 index 000000000..43b41bec2 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202306020403.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_item ADD COLUMN sorted_index int NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202306020603.sql b/resource/sqlupgrade/Mysql/sql202306020603.sql new file mode 100644 index 000000000..f8896a6d0 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202306020603.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_salary_template ADD COLUMN sms_status int(0) NULL ; + +UPDATE hrsa_salary_template SET msg_status = 1; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202306080103.sql b/resource/sqlupgrade/Mysql/sql202306080103.sql new file mode 100644 index 000000000..e8b9e356b --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202306080103.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_tax_agent ADD COLUMN sorted_index int NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202306200203.sql b/resource/sqlupgrade/Mysql/sql202306200203.sql new file mode 100644 index 000000000..2eefa273a --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202306200203.sql @@ -0,0 +1,4 @@ +update hrsa_formula set formula = '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}' , formulaRunScript='salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction' where id = 1651740238860 +; +update hrsa_formula_var set delete_type = 1 where id = 1651740241717 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202205100201.sql b/resource/sqlupgrade/Oracle/sql202205100201.sql new file mode 100644 index 000000000..ffa3ba62c --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202205100201.sql @@ -0,0 +1,340 @@ +delete from HtmlLabelIndex where id = 537997 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 537997,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537997 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'Salary management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 537998 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 537998,'ҵнʸ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537998 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнʸ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'My salary and benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 537996 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 537996,'˰۽' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537996 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'˰۽' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Individual income tax withholding agent' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Ux' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 537999 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 537999,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537999 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'Social security benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538000 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538000,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538000 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'Social security welfare scheme' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538001 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538001,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538001 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'Social security benefit file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538002 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538002,'籣̨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538002 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'Social security benefit account' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538003 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538003,'нĿ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538003 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нĿ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'Salary item management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нYĿ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538004 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538004,'нʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538004 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'Salary file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нYn' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538005 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538005,'ݲɼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538005 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'ݲɼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'data acquisition' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538006 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538006,'ۼרӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538006 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'ۼרӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Accumulated special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Ӌ헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538007 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538007,'˰۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538007 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'˰۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'Other tax exempt deductions' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'ⶐ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538008 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538008,'ۼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538008 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'ۼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Cumulative situation in previous periods' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Ӌr' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538009 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538009,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538009 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'Attendance reference' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538010 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538010,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538010 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'Salary a / C set' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'нY~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538011 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538011,'нʺ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538011 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нʺ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'Salary accounting' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538012 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538012,'ʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538012 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'ʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Payroll payment' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Yΰl' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538013 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538013,'˰걨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538013 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'˰걨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'Individual income tax return' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 538014 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 538014,'˰˰ʱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538014 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'˰˰ʱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'Individual income tax rate table' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'ʱ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202205100402.sql b/resource/sqlupgrade/Oracle/sql202205100402.sql new file mode 100644 index 000000000..97ff11dfe --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202205100402.sql @@ -0,0 +1,197 @@ +Delete from LeftMenuInfo where id=100118 +/ +Delete from LeftMenuConfig where infoid=100118 +/ +call LMConfig_U_ByInfoInsert (1,0,-1) +/ +call LMInfo_Insert (100118,537997,NULL,NULL,1,0,-1,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100118 +/ + +Delete from LeftMenuInfo where id=100132 +/ +Delete from LeftMenuConfig where infoid=100132 +/ +call LMConfig_U_ByInfoInsert (2,100118,5) +/ +call LMInfo_Insert (100132,538011,'','',2,100118,5,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/calculate' where id = 100132 +/ + +Delete from LeftMenuInfo where id=100125 +/ +Delete from LeftMenuConfig where infoid=100125 +/ +call LMConfig_U_ByInfoInsert (2,100118,2) +/ +call LMInfo_Insert (100125,538004,'','',2,100118,2,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100125 +/ + +Delete from LeftMenuInfo where id=100130 +/ +Delete from LeftMenuConfig where infoid=100130 +/ +call LMConfig_U_ByInfoInsert (2,100126,0) +/ +call LMInfo_Insert (100130,538009,'','',2,100126,0,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/attendance' where id = 100130 +/ + +Delete from LeftMenuInfo where id=100129 +/ +Delete from LeftMenuConfig where infoid=100129 +/ +call LMConfig_U_ByInfoInsert (2,100126,0) +/ +call LMInfo_Insert (100129,538008,'','',2,100126,0,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumSituation' where id = 100129 +/ + +Delete from LeftMenuInfo where id=100120 +/ +Delete from LeftMenuConfig where infoid=100120 +/ +call LMConfig_U_ByInfoInsert (2,100118,0) +/ +call LMInfo_Insert (100120,537999,'','',2,100118,0,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100120 +/ + +Delete from LeftMenuInfo where id=100123 +/ +Delete from LeftMenuConfig where infoid=100123 +/ +call LMConfig_U_ByInfoInsert (2,100120,1) +/ +call LMInfo_Insert (100123,538002,'','',2,100120,1,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/standingBook' where id = 100123 +/ + +Delete from LeftMenuInfo where id=100122 +/ +Delete from LeftMenuConfig where infoid=100122 +/ +call LMConfig_U_ByInfoInsert (2,100120,0) +/ +call LMInfo_Insert (100122,538001,'','',2,100120,0,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/archives' where id = 100122 +/ + +Delete from LeftMenuInfo where id=100135 +/ +Delete from LeftMenuConfig where infoid=100135 +/ +call LMConfig_U_ByInfoInsert (2,100118,8) +/ +call LMInfo_Insert (100135,537996,'','',2,100118,8,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/taxAgent' where id = 100135 +/ + +Delete from LeftMenuInfo where id=100121 +/ +Delete from LeftMenuConfig where infoid=100121 +/ +call LMConfig_U_ByInfoInsert (2,100120,-1) +/ +call LMInfo_Insert (100121,538000,'','',2,100120,-1,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/programme' where id = 100121 +/ + +Delete from LeftMenuInfo where id=100126 +/ +Delete from LeftMenuConfig where infoid=100126 +/ +call LMConfig_U_ByInfoInsert (2,100118,3) +/ +call LMInfo_Insert (100126,538005,'','',2,100118,3,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100126 +/ + +Delete from LeftMenuInfo where id=100127 +/ +Delete from LeftMenuConfig where infoid=100127 +/ +call LMConfig_U_ByInfoInsert (2,100126,-1) +/ +call LMInfo_Insert (100127,538006,'','',2,100126,-1,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumDeduct' where id = 100127 +/ + +Delete from LeftMenuInfo where id=100133 +/ +Delete from LeftMenuConfig where infoid=100133 +/ +call LMConfig_U_ByInfoInsert (2,100118,6) +/ +call LMInfo_Insert (100133,538012,'','',2,100118,6,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/payroll' where id = 100133 +/ + +Delete from LeftMenuInfo where id=100128 +/ +Delete from LeftMenuConfig where infoid=100128 +/ +call LMConfig_U_ByInfoInsert (2,100126,0) +/ +call LMInfo_Insert (100128,538007,'','',2,100126,0,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/otherDeduct' where id = 100128 +/ + +Delete from LeftMenuInfo where id=100119 +/ +Delete from LeftMenuConfig where infoid=100119 +/ +call LMConfig_U_ByInfoInsert (2,100118,-1) +/ +call LMInfo_Insert (100119,537998,'','',2,100118,-1,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/mySalary' where id = 100119 +/ + +Delete from LeftMenuInfo where id=100131 +/ +Delete from LeftMenuConfig where infoid=100131 +/ +call LMConfig_U_ByInfoInsert (2,100118,4) +/ +call LMInfo_Insert (100131,538010,'','',2,100118,4,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/ledger' where id = 100131 +/ + +Delete from LeftMenuInfo where id=100124 +/ +Delete from LeftMenuConfig where infoid=100124 +/ +call LMConfig_U_ByInfoInsert (2,100118,1) +/ +call LMInfo_Insert (100124,538003,'','',2,100118,1,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryItem' where id = 100124 +/ + +Delete from LeftMenuInfo where id=100134 +/ +Delete from LeftMenuConfig where infoid=100134 +/ +call LMConfig_U_ByInfoInsert (2,100118,7) +/ +call LMInfo_Insert (100134,538013,'','',2,100118,7,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/declare' where id = 100134 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202205130903.sql b/resource/sqlupgrade/Oracle/sql202205130903.sql new file mode 100644 index 000000000..556945284 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202205130903.sql @@ -0,0 +1,2370 @@ +CREATE TABLE hrsa_acct_result_temp( + id NUMBER(38,0) primary key NOT NULL, + calculate_key varchar2(50) DEFAULT '', + salary_sob_id NUMBER(38,0) DEFAULT 0, + salary_acct_emp_id NUMBER(38,0) DEFAULT 0, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_item_id NUMBER(38,0) DEFAULT 0, + result_value varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT '0', + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) +/ +create sequence hrsa_acct_result_temp_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_acct_result_temp_Tri +before insert on hrsa_acct_result_temp +for each row +begin +select hrsa_acct_result_temp_id.nextval into :new.id from dual; +end; +/ + + +CREATE TABLE hrsa_add_up_deduction ( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + declare_month DATE DEFAULT sysdate, + add_up_child_education varchar2(255) DEFAULT '', + add_up_continuing_education varchar2(255) DEFAULT '', + add_up_housing_loan_interest varchar2(255) DEFAULT '', + add_up_housing_rent varchar2(255) DEFAULT '' , + add_up_support_elderly varchar2(255) DEFAULT '' , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0 , + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' + ) + / + create sequence hrsa_add_up_deduction_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_add_up_deduction_Tri +before insert on hrsa_add_up_deduction +for each row +begin +select hrsa_add_up_deduction_id.nextval into :new.id from dual; +end; +/ + + +CREATE TABLE hrsa_add_up_situation( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + tax_year_month date DEFAULT sysdate, + year NUMBER(38,0) DEFAULT 0, + add_up_income varchar2(255) DEFAULT '' , + add_up_subtraction varchar2(255) DEFAULT '' , + add_up_social_security_total varchar2(255) DEFAULT '' , + add_up_accumulation_fund_total varchar2(255) DEFAULT '' , + add_up_child_education varchar2(255) DEFAULT '' , + add_up_continuing_education varchar2(255) DEFAULT '' , + add_up_housing_loan_interest varchar2(255) DEFAULT '' , + add_up_housing_rent varchar2(255) DEFAULT '' , + add_up_support_elderly varchar2(255) DEFAULT '' , + add_up_enterprise_and_other varchar2(255) DEFAULT '', + add_up_other_deduction varchar2(255) DEFAULT '0.00000', + add_up_tax_exempt_income varchar2(255) DEFAULT '' , + add_up_allowed_donation varchar2(255) DEFAULT '' , + add_up_advance_tax varchar2(255) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0 , + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' + ) + + / + create sequence hrsa_add_up_situation_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_add_up_situation_Tri +before insert on hrsa_add_up_situation +for each row +begin +select hrsa_add_up_situation_id.nextval into :new.id from dual; +end; +/ + + + + + + +CREATE TABLE hrsa_attend_quote( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_year_month date NOT NULL, + year number DEFAULT 0, + month number DEFAULT 0, + salary_sob_id NUMBER(38,0) DEFAULT '', + source_type number DEFAULT 0, + salary_accounting_status number DEFAULT 0, + attend_cycle varchar2(100) DEFAULT '' , + salary_cycle varchar2(100) DEFAULT '' , + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ) + +/ +create sequence hrsa_attend_quote_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_attend_quote_Tri +before insert on hrsa_attend_quote +for each row +begin +select hrsa_attend_quote_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_attend_quote_data( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + attend_quote_id NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ + +CREATE TABLE hrsa_attend_quote_data_value( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + attend_quote_id NUMBER(38,0) DEFAULT 0, + attend_quote_data_id NUMBER(38,0) NOT NULL, + attend_quote_field_id NUMBER(38,0) NOT NULL, + data_value varchar2(250) NOT NULL, + create_time date DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ +create sequence hrsa_attend_quote_d_v_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_attend_quote_d_v_Tri +before insert on hrsa_attend_quote_data_value +for each row +begin +select hrsa_attend_quote_d_v_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_attend_quote_field( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + field_name varchar2(100) DEFAULT '' , + source_type number DEFAULT 0, + field_type number DEFAULT 0, + enable_status number DEFAULT 0, + code varchar2(50) DEFAULT '' , + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ +create sequence hrsa_attend_quote_field_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_attend_quote_field_Tri +before insert on hrsa_attend_quote_field +for each row +begin +select hrsa_attend_quote_field_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_attend_quote_sync_set( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + source_type number DEFAULT 0, + current_setting_content varchar2(4000) DEFAULT '', + default_setting_content varchar2(4000) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ +create sequence hrsa_attend_quote_sync_set_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_attend_quote_sync_set_Tri +before insert on hrsa_attend_quote_sync_set +for each row +begin +select hrsa_attend_quote_sync_set_id.nextval into :new.id from dual; +end; +/ + + + + + +CREATE TABLE hrsa_bill_batch( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + bill_month varchar2(30) NOT NULL, + bill_status number NOT NULL, + social_num number DEFAULT 0, + fund_num number DEFAULT 0 , + other_num number DEFAULT 0 , + social_pay varchar2(4000) NULL, + fund_pay varchar2(4000) NULL, + other_pay varchar2(4000) NULL, + accountant varchar2(200) NOT NULL, + remarks varchar2(60) NULL, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ) + +/ +create sequence hrsa_bill_batch_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_bill_batch_Tri +before insert on hrsa_bill_batch +for each row +begin +select hrsa_bill_batch_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_bill_batch_encdata( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + tablename varchar2(50) NOT NULL, + fieldname varchar2(50) NOT NULL, + enc_value varchar2(4000) NOT NULL, + skey varchar2(4000) NOT NULL, + crc varchar2(4000) NULL, + creater NUMBER(38,0) NULL, + created varchar2(50) NULL, + MODIFIER NUMBER(38,0) NULL, + modified varchar2(50) NULL, + tenant_key varchar2(10) NULL + ) + + +/ +CREATE sequence hrsa_bill_batch_encdata_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_bill_batch_encdata_Tri +before insert on hrsa_bill_batch_encdata +for each row +begin +select hrsa_bill_batch_encdata_id.nextval into :new.id from dual; +end; +/ + + + + + + +CREATE TABLE hrsa_bill_detail( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + bill_month varchar2(30) NOT NULL, + bill_status number NOT NULL, + payment_status number NOT NULL, + supplementary_month varchar2(50) NULL, + supplementary_projects varchar2(50) NULL, + resource_from number NOT NULL, + social_pay_org number NULL, + social_account varchar2(50) NULL, + social_scheme_id NUMBER(38,0) NULL, + social_payment_base_string varchar2(512) NULL, + fund_pay_org number NULL, + fund_account varchar2(50) NULL, + supplement_fund_account varchar2(50) NULL, + fund_scheme_id number NULL, + fund_payment_base_string varchar2(512) NULL, + other_pay_org number NULL, + other_scheme_id NUMBER(38,0) NULL, + other_payment_base_string varchar2(512) NULL, + social_per_json varchar2(512) NULL, + social_per_sum varchar2(512) NULL, + fund_per_json varchar2(512) NULL, + fund_per_sum varchar2(512) NULL, + other_per_json varchar2(512) NULL, + other_per_sum varchar2(512) NULL, + per_sum varchar2(512) NULL, + social_com_json varchar2(512) NULL, + social_com_sum varchar2(512) NULL, + fund_com_json varchar2(512) NULL, + fund_com_sum varchar2(512) NULL, + other_com_json varchar2(512) NULL, + other_com_sum varchar2(512) NULL, + com_sum varchar2(512) NULL, + social_sum varchar2(512) NULL, + fund_sum varchar2(512) NULL, + other_sum varchar2(512) NULL, + total varchar2(512) NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ) + + +/ +CREATE sequence hrsa_bill_detail_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_bill_detail_Tri +before insert on hrsa_bill_detail +for each row +begin +select hrsa_bill_detail_id.nextval into :new.id from dual; +end; +/ + + + + + + +CREATE TABLE hrsa_bill_detail_temp( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + bill_month varchar2(30) NOT NULL, + bill_status number NOT NULL, + payment_status number NOT NULL, + supplementary_month varchar2(50) NULL, + supplementary_projects varchar2(50) NULL, + resource_from number NOT NULL, + social_pay_org number NULL, + social_account varchar2(50) NULL, + social_scheme_id NUMBER(38,0) NULL, + social_payment_base_string varchar2(512) NULL, + fund_pay_org number NULL, + fund_account varchar2(50) NULL, + supplement_fund_account varchar2(50) NULL, + fund_scheme_id NUMBER(38,0) NULL, + fund_payment_base_string varchar2(512) NULL, + other_pay_org number NULL, + other_scheme_id number NULL, + other_payment_base_string varchar2(512) NULL, + social_per_json varchar2(512) NULL, + social_per_sum varchar2(512) NULL, + fund_per_json varchar2(512) NULL, + fund_per_sum varchar2(512) NULL, + other_per_json varchar2(512) NULL, + other_per_sum varchar2(512) NULL, + per_sum varchar2(512) NULL, + social_com_json varchar2(512) NULL, + social_com_sum varchar2(512) NULL, + fund_com_json varchar2(512) NULL, + fund_com_sum varchar2(512) NULL, + other_com_json varchar2(512) NULL, + other_com_sum varchar2(512) NULL, + com_sum varchar2(512) NULL, + social_sum varchar2(512) NULL, + fund_sum varchar2(512) NULL, + other_sum varchar2(512) NULL, + total varchar2(512) NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +) + + +/ +CREATE sequence hrsa_bill_detail_temp_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_bill_detail_temp_Tri +before insert on hrsa_bill_detail_temp +for each row +begin +select hrsa_bill_detail_temp_id.nextval into :new.id from dual; +end; +/ + + + + + + +CREATE TABLE hrsa_bill_inspect( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + bill_month varchar2(30) NOT NULL, + payment_status number NOT NULL, + supplementary_month varchar2(50) NULL, + supplementary_projects varchar2(50) NULL, + inspect_status number NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + +) + + +/ +CREATE sequence hrsa_bill_inspect_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_bill_inspect_Tri +before insert on hrsa_bill_inspect +for each row +begin +select hrsa_bill_inspect_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_check_result( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + salary_check_rule_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + ignore_type number NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ) + + + +/ +CREATE sequence hrsa_check_result_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_check_result_Tri +before insert on hrsa_check_result +for each row +begin +select hrsa_check_result_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_check_result_record( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + salary_check_rule_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + check_result_id NUMBER(38,0) NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ) + +/ +CREATE sequence hrsa_check_result_record_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_check_result_record_Tri +before insert on hrsa_check_result_record +for each row +begin +select hrsa_check_result_record_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_ck_result_detail_temp( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + salary_check_rule_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL, + calculate_key varchar2(50) NOT NULL +) + + +/ +CREATE sequence hrsa_ck_result_detail_temp_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_ck_result_detail_temp_Tri +before insert on hrsa_ck_result_detail_temp +for each row +begin +select hrsa_ck_result_detail_temp_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_excel_acct_result( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + result_value varchar2(1000) NOT NULL, + creator NUMBER(38,0) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL + ) + +/ +CREATE sequence hrsa_excel_acct_result_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_excel_acct_result_Tri +before insert on hrsa_excel_acct_result +for each row +begin +select hrsa_excel_acct_result_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_formula( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(255) NOT NULL, + description varchar2(255) NULL , + module varchar2(255) NOT NULL, + use_for varchar2(255) NULL , + reference_type varchar2(255) NULL , + return_type varchar2(255) NOT NULL, + validate_type varchar2(255) NOT NULL, + extend_param varchar2(255) NULL , + formula varchar2(4000) NOT NULL, + formulaRunScript varchar2(4000) NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + create_time date NOT NULL, + update_time date NOT NULL + ) + + +/ + + + +CREATE TABLE hrsa_formula_var( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(255) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + field_id varchar2(255) NOT NULL, + field_name varchar2(500) NOT NULL, + field_type varchar2(255) NOT NULL, + source varchar2(255) NOT NULL, + order_index number NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + create_time date NOT NULL, + update_time date NOT NULL +) + + +/ + + + +CREATE TABLE hrsa_fund_archives( + id number PRIMARY KEY NOT NULL, + employee_id number NOT NULL, + non_payment number NULL, + welfare_type number NOT NULL, + fund_start_time varchar2(20) NULL, + fund_end_time varchar2(20) NULL, + fund_scheme_id number NULL, + fund_account varchar2(50) NULL, + supplement_fund_account varchar2(50) NULL, + payment_organization number NULL, + under_take number NULL, + fund_payment_base_string varchar2(4000) NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ +CREATE sequence hrsa_fund_archives_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_fund_archives_Tri +before insert on hrsa_fund_archives +for each row +begin +select hrsa_fund_archives_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_insurance_category( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + insurance_name varchar2(50) NOT NULL, + welfare_type number NOT NULL, + is_use number DEFAULT 1, + payment_scope varchar2(10) NULL, + data_type number DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ + + + +CREATE TABLE hrsa_other_archives( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + non_payment number NULL, + welfare_type number NOT NULL, + other_start_time varchar2(20) NULL, + other_end_time varchar2(20) NULL, + other_scheme_id NUMBER(38,0) NULL, + payment_organization number NULL, + under_take number NULL, + other_payment_base_string varchar2(4000) NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ) + + +/ +CREATE sequence hrsa_other_archives_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_other_archives_Tri +before insert on hrsa_other_archives +for each row +begin +select hrsa_other_archives_id.nextval into :new.id from dual; +end; +/ + + +CREATE TABLE hrsa_other_deduction( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + declare_month date DEFAULT sysdate, + business_healthy_insurance varchar2(255) DEFAULT '0.00000', + tax_delay_endowment_insurance varchar2(255) DEFAULT '', + other_deduction varchar2(255) DEFAULT '', + deduction_allowed_donation varchar2(255) DEFAULT '', + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ) + + +/ +CREATE sequence hrsa_other_deduction_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_other_deduction_Tri +before insert on hrsa_other_deduction +for each row +begin +select hrsa_other_deduction_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_salary_acct_emp( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + salary_sob_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_month DATE DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ) +/ +CREATE sequence hrsa_salary_acct_emp_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_acct_emp_Tri +before insert on hrsa_salary_acct_emp +for each row +begin +select hrsa_salary_acct_emp_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_salary_acct_record( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_month DATE DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + tax_cycle DATE DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + salary_sob_id NUMBER(38,0) DEFAULT 0, + status number DEFAULT 1, + acct_times number DEFAULT 0, + description varchar2(100) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ +CREATE sequence hrsa_salary_acct_record_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_acct_record_Tri +before insert on hrsa_salary_acct_record +for each row +begin +select hrsa_salary_acct_record_id.nextval into :new.id from dual; +end; +/ + + + + + + +CREATE TABLE hrsa_salary_acct_result( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + salary_acct_emp_id NUMBER(38,0) DEFAULT 0, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_item_id NUMBER(38,0) DEFAULT 0, + result_value varchar2(1000) DEFAULT '' , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ +CREATE sequence hrsa_salary_acct_result_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_acct_result_Tri +before insert on hrsa_salary_acct_result +for each row +begin +select hrsa_salary_acct_result_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_salary_archive( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' + ) + +/ + + + +CREATE TABLE hrsa_salary_archive_dimission( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + dimission_time_interval varchar2(20) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL + ) + +/ +CREATE sequence hrsa_salary_archive_d_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_archive_d_Tri +before insert on hrsa_salary_archive_dimission +for each row +begin +select hrsa_salary_archive_d_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_salary_archive_item( + id NUMBER(38,0) NOT NULL, + salary_archive_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + effective_time DATE DEFAULT sysdate, + adjust_reason varchar2(100) DEFAULT '', + salary_item_id NUMBER(38,0) DEFAULT 0, + item_value varchar2(200) DEFAULT '' , + description varchar2(200) DEFAULT '' , + operator NUMBER(38,0) DEFAULT 0, + operate_time date NULL , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + + / +CREATE sequence hrsa_salary_archive_item_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hhrsa_salary_archive_item_Tri +before insert on hrsa_salary_archive_item +for each row +begin +select hrsa_salary_archive_item_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_salary_archive_tax_agent( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_archive_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + effective_time DATE DEFAULT sysdate, + adjust_reason varchar2(100) DEFAULT '' , + tax_agent_id NUMBER(38,0) DEFAULT 0, + operator NUMBER(38,0) DEFAULT 0, + operate_time date NULL , + description varchar2(200) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ +CREATE sequence hrsa_salary_archive_tax_a_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_archive_tax_a_Tri +before insert on hrsa_salary_archive_tax_agent +for each row +begin +select hrsa_salary_archive_tax_a_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_salary_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '' , + code varchar2(100) DEFAULT '' , + system_type number DEFAULT 0, + sys_salary_item_id NUMBER(38,0) DEFAULT 0, + category number DEFAULT 7 , + item_type number DEFAULT 1 , + use_default number DEFAULT 0, + use_in_employee_salary number DEFAULT 0, + rounding_mode number DEFAULT 1 , + pattern number DEFAULT 5 , + value_type number DEFAULT 1 , + datasource number DEFAULT 0, + formula_id NUMBER(38,0) DEFAULT 0, + description varchar2(1000) DEFAULT '', + can_edit number DEFAULT 1 , + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + data_type varchar2(20) NOT NULL +) + +/ + +CREATE TABLE hrsa_salary_send( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_month date NOT NULL, + salary_accounting_id NUMBER(38,0) DEFAULT 0, + salary_sob_id NUMBER(38,0) NOT NULL, + send_num number DEFAULT 0, + send_total number DEFAULT 0, + last_send_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ +CREATE sequence hrsa_salary_send_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_send_Tri +before insert on hrsa_salary_send +for each row +begin +select hrsa_salary_send_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_salary_send_info( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_send_id NUMBER(38,0) NOT NULL, + salary_month date NOT NULL, + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + tax_agent_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + send_status number DEFAULT 0, + send_time DATE , + salary_template clob NULL, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ + + + +CREATE TABLE hrsa_salary_sob( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '' , + income_category number DEFAULT 1 , + salary_cycle_type number DEFAULT 3 , + salary_cycle_from_day number DEFAULT 1 , + tax_cycle_type number DEFAULT 3 , + attend_cycle_type number DEFAULT 3 , + attend_cycle_from_day number DEFAULT 1 , + social_security_cycle_type number DEFAULT 3 , + disable number DEFAULT 0, + description varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ +CREATE sequence hrsa_salary_sob_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_sob_Tri +before insert on hrsa_salary_sob +for each row +begin +select hrsa_salary_sob_id.nextval into :new.id from dual; +end; +/ + + + + + +CREATE TABLE hrsa_salary_sob_adjust_rule( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + day_of_month number DEFAULT 0, + before_adjustment_type number DEFAULT 1 , + after_adjustment_type number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + + +/ +CREATE sequence hrsa_salary_sob_a_r_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_sob_a_r_Tri +before insert on hrsa_salary_sob_adjust_rule +for each row +begin +select hrsa_salary_sob_a_r_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_salary_sob_check_rule( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + name varchar2(100) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + description varchar2(1000) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +) + + +/ +CREATE sequence hrsa_salary_sob_c_r_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_sob_c_r_Tri +before insert on hrsa_salary_sob_check_rule +for each row +begin +select hrsa_salary_sob_c_r_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_salary_sob_default_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + income_category number DEFAULT 1 , + sys_salary_item_id NUMBER(38,0) DEFAULT 0, + can_edit number DEFAULT 1 , + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '', + sob_default_item_group_id NUMBER(38,0) NOT NULL, + sorted_index number NOT NULL +) + + +/ +CREATE sequence hrsa_salary_sob_d_i_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_sob_d_i_Tri +before insert on hrsa_salary_sob_default_item +for each row +begin +select hrsa_salary_sob_d_i_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_salary_sob_emp_field( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + field_code varchar2(100) DEFAULT '' , + sorted_index number DEFAULT 0, + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ +CREATE sequence hrsa_salary_sob_emp_field_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_sob_emp_field_Tri +before insert on hrsa_salary_sob_emp_field +for each row +begin +select hrsa_salary_sob_emp_field_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_salary_sob_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + salary_sob_item_group_id NUMBER(38,0) NOT NULL, + formula_id NUMBER(38,0) NOT NULL, + sorted_index number NOT NULL, + description varchar2(1000) DEFAULT '' , + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +) + +/ +CREATE sequence hrsa_salary_sob_item_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_sob_item_Tri +before insert on hrsa_salary_sob_item +for each row +begin +select hrsa_salary_sob_item_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_salary_sob_item_group( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) NOT NULL, + name varchar2(100) NOT NULL, + sorted_index number NOT NULL, + description varchar2(1000) DEFAULT '', + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +) + +/ + + + +CREATE TABLE hrsa_salary_sob_range( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + target_type number DEFAULT 1 , + target_id NUMBER(38,0) DEFAULT 0, + employee_status number DEFAULT 0, + include_type number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ +CREATE sequence hrsa_salary_sob_range_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_sob_range_Tri +before insert on hrsa_salary_sob_range +for each row +begin +select hrsa_salary_sob_range_id.nextval into :new.id from dual; +end; +/ +CREATE TABLE hrsa_salary_template +( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '', + salary_sob_id NUMBER(38,0) NOT NULL, + use_type number DEFAULT 0, + description varchar2(100) DEFAULT '', + email_status number DEFAULT 0, + send_email_id NUMBER(38,0) DEFAULT 0, + msg_status number DEFAULT 0, + theme varchar2(100) DEFAULT '', + background varchar2(2000) DEFAULT '', + text_content varchar2(100) DEFAULT '', + text_content_position number DEFAULT 0, + salary_item_null_status number DEFAULT 0, + salary_item_zero_status number DEFAULT 0, + salary_item_setting clob NOT NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) +/ +CREATE sequence hrsa_salary_template_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_salary_template_Tri +before insert on hrsa_salary_template +for each row +begin +select hrsa_salary_template_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_scheme_detail( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + insurance_id NUMBER(38,0) NOT NULL, + primary_id NUMBER(38,0) NOT NULL, + effective_time varchar2(20) NULL, + expiration_time varchar2(20) NULL, + is_payment number DEFAULT 1 , + payment_scope number NOT NULL, + upper_limit varchar2(1024) NULL, + lower_limit varchar2(1024) NULL, + payment_proportion varchar2(1024) NULL, + fixed_cost varchar2(1024) NULL, + valid_num number DEFAULT 2 , + rentention_rule number NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ +CREATE sequence hrsa_scheme_detail_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_scheme_detail_Tri +before insert on hrsa_scheme_detail +for each row +begin +select hrsa_scheme_detail_id.nextval into :new.id from dual; +end; +/ + + +CREATE TABLE hrsa_sob_default_emp_field( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + field_code varchar2(30) DEFAULT '' , + sorted_index number DEFAULT 0, + can_delete number DEFAULT 0, + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ + + +CREATE TABLE hrsa_sob_default_item_group( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + income_category number DEFAULT 1 , + name varchar2(100) DEFAULT '', + sorted_index number DEFAULT 0, + description varchar2(1000) DEFAULT '', + create_time date NOT NULL, + update_time date NOT NULL, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ + +CREATE TABLE hrsa_social_archives( + id number PRIMARY KEY NOT NULL, + employee_id number NOT NULL, + non_payment number NULL, + welfare_type number NOT NULL, + social_start_time varchar2(20) NULL, + social_end_time varchar2(20) NULL, + social_scheme_id number NULL, + social_account varchar2(50) NULL, + payment_organization number NULL, + under_take number NULL, + social_payment_base_string varchar2(4000) NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ +CREATE sequence hrsa_social_archives_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_social_archives_Tri +before insert on hrsa_social_archives +for each row +begin +select hrsa_social_archives_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_social_archives_encdata( + id number PRIMARY KEY NOT NULL, + tablename varchar2(50) NOT NULL, + fieldname varchar2(50) NOT NULL, + enc_value varchar2(4000) NOT NULL, + skey varchar2(4000) NOT NULL, + crc varchar2(4000) NULL, + creater number NULL, + created varchar2(50) NULL, + MODIFIER number NULL, + modified varchar2(50) NULL, + tenant_key varchar2(10) NULL +) + +/ +CREATE sequence hrsa_social_a_e_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_social_a_e_Tri +before insert on hrsa_social_archives_encdata +for each row +begin +select hrsa_social_a_e_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_social_security_scheme( + id number PRIMARY KEY NOT NULL, + payment_area varchar2(100) NOT NULL, + payment_type number DEFAULT 1 , + scheme_name varchar2(100) NOT NULL, + welfare_type number NOT NULL, + is_use number DEFAULT 1 , + remarks varchar2(30) DEFAULT '', + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator number DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ +CREATE sequence hrsa_social_s_s_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_social_s_s_Tri +before insert on hrsa_social_security_scheme +for each row +begin +select hrsa_social_s_s_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_sys_salary_item( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '', + code varchar2(100) DEFAULT '', + system_type number DEFAULT 0, + category number DEFAULT 7 , + item_type number DEFAULT 1 , + use_default number DEFAULT 0, + use_in_employee_salary number DEFAULT 0, + rounding_mode number DEFAULT 1 , + pattern number DEFAULT 5 , + value_type number DEFAULT 1 , + datasource number DEFAULT 0, + formula_id NUMBER(38,0) DEFAULT 0, + description varchar2(1000) DEFAULT '', + can_edit number DEFAULT 1 , + can_delete number DEFAULT 1 , + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '', + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + data_type varchar2(20) NOT NULL +) + + +/ + + +CREATE TABLE hrsa_sys_tax_rate_base( + id number PRIMARY KEY NOT NULL, + name varchar2(100) NOT NULL, + system_type number NOT NULL, + description varchar2(100) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +) + + +/ +CREATE sequence hrsa_sys_tax_rate_base_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_sys_tax_rate_base_Tri +before insert on hrsa_sys_tax_rate_base +for each row +begin +select hrsa_sys_tax_rate_base_id.nextval into :new.id from dual; +end; +/ + + +CREATE TABLE hrsa_sys_tax_rate_detail( + id number PRIMARY KEY NOT NULL, + base_id number NOT NULL, + index_num number NOT NULL, + income_lower_limit number(15, 5) NULL, + income_upper_limit number(15, 5) NULL, + duty_free_value number(15, 5) NULL, + duty_free_rate number(15, 5) NULL, + taxable_income_ll number(15, 5) NULL, + taxable_income_ul number(15, 5) NOT NULL, + tax_rate number(15, 5) NOT NULL, + tax_deduction number(15, 5) NOT NULL, + create_time date NOT NULL, + update_time date NOT NULL, + creator number NOT NULL, + delete_type number DEFAULT 0, + tenant_key varchar2(10) NOT NULL +) + + +/ +CREATE sequence hrsa_sys_tax_rate_detail_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_sys_tax_rate_detail_Tri +before insert on hrsa_sys_tax_rate_detail +for each row +begin +select hrsa_sys_tax_rate_detail_id.nextval into :new.id from dual; +end; +/ + + + +CREATE TABLE hrsa_tax_agent( + id number PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '', + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator number DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + + +/ +CREATE sequence hrsa_tax_agent_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_tax_agent_Tri +before insert on hrsa_tax_agent +for each row +begin +select hrsa_tax_agent_id.nextval into :new.id from dual; +end; +/ + + +CREATE TABLE hrsa_tax_declaration( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_month date DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + tax_cycle date DEFAULT to_date('1900-01-01','YYYY-DD-mm'), + tax_agent_id number DEFAULT 0, + description varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + + +/ +CREATE sequence hrsa_tax_declaration_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_tax_declaration_Tri +before insert on hrsa_tax_declaration +for each row +begin +select hrsa_tax_declaration_id.nextval into :new.id from dual; +end; +/ + + +CREATE TABLE hrsa_tax_declaration_detail( + id NUMBER(38,0) NOT NULL, + tax_declaration_id NUMBER(38,0) DEFAULT 0, + employee_id NUMBER(38,0) DEFAULT 0, + field_code varchar2(100) DEFAULT '' , + field_value varchar2(1000) DEFAULT '' , + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + +/ + +CREATE TABLE hrsa_tax_rate_base( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + name varchar2(100) DEFAULT '' , + system_type number DEFAULT 0, + description varchar2(100) DEFAULT '' , + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + +/ +CREATE sequence hrsa_tax_rate_base_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_tax_rate_base_Tri +before insert on hrsa_tax_rate_base +for each row +begin +select hrsa_tax_rate_base_id.nextval into :new.id from dual; +end; +/ + + + + +CREATE TABLE hrsa_tax_rate_detail( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + base_id NUMBER(38,0) DEFAULT 0, + index_num number DEFAULT 0, + income_upper_limit number(15, 5) DEFAULT 0.00000, + income_lower_limit number(15, 5) DEFAULT 0.00000, + duty_free_value number(15, 5) DEFAULT 0.00000, + duty_free_rate number(15, 5) DEFAULT 0.00000, + taxable_income_ul number(15, 5) DEFAULT 0.00000, + taxable_income_ll number(15, 5) DEFAULT 0.00000, + tax_rate number(15, 5) DEFAULT 0.00000, + tax_deduction number(15, 5) DEFAULT 0.00000, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '' +) + + + + +/ +CREATE sequence hrsa_tax_rate_detail_id +start with 1 +increment by 1 +nomaxvalue +nocycle +/ +create or replace trigger hrsa_tax_rate_detail_Tri +before insert on hrsa_tax_rate_detail +for each row +begin +select hrsa_tax_rate_detail_id.nextval into :new.id from dual; +end; +/ + + + + +ALTER TABLE hrsa_salary_sob_item ADD can_delete number NULL +/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214787, 'нϼ', 'wagesTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651736817711, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214788, 'ȫһԽϼ', 'annualBonusTotal', 1, 5, 22, 0, 0, 2, 2, 2, 1, 1651737358294, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:07','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214789, '˰ǰۿϼ', 'preTaxDeductionsTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651737635353, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:22','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214790, '£ΣӦ˰ϼ', 'income', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651737859216, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:25','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214791, 'ǰۼӦ˰ϼ', 'addUpIncome', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651738034028, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:28','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214792, 'ϸ', 'endowmentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749914746, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214793, 'ҽƸ', 'medicalInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749958879, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214795, 'ʧҵ', 'unemploymentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750005281, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214796, '', 'housingProvidentFund', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750034689, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214797, '£Σר۳ϼ', 'specialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651738826550, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:40','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214798, 'ǰۼר۳ϼ', 'addUpSpecialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651739000845, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214799, 'ۼŮ', 'addUpChildEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739053212, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214800, 'ۼסϢ', 'addUpHousingLoannumbererest', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739100651, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214801, 'ۼס', 'addUpHousingRent', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739151122, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214802, 'ۼƼ', 'addUpContinuingEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739212437, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214803, 'ۼ', 'addUpSupportElderly', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739310959, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214804, 'ǰۼרӿ۳ϼ', 'addUpSpeAddiDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 6, 1651739411365, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214805, '£Σ۳ϼ', 'otherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651739815651, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214806, 'ǰۼ۳ϼ', 'addUpOtherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651740238860, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214807, '£Σ', 'subtraction', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651740311026, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:56:11','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214808, 'ǰۼƼ', 'addUpSubtraction', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651740397225, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214809, '£Σн˰˰', 'taxRate', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742185837, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214810, '£Σн˰۳', 'quickDeductionFactor', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742702735, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214811, 'ǰۼӦ˰ö', 'addUpTaxableIncome', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651745445982, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:12','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214812, 'ǰۼӦ˰', 'addUpTaxPayable', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651748888864, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:14','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214813, 'ǰۼѿ۽˰ϼ', 'addUpAdvanceTax', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651748978482, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:18','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214814, '£ΣӦ˰', 'refundedOrSupplementedTax', 1, 6, 16, 1, 0, 2, 2, 2, 1, 1651749111981,' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214815, '£Σʵнʺϼ', 'netSalaryTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651749240004, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:04:24','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861648655892480, '', 'baseSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:57:46','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861768948531201, 'λ', 'postSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:57:57','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861880508628992, 'ڿۿ', 'attendanceDeduction', 1, 2, 9, 1, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:04','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093121, '˰ϼ', 'afterTaxReimbursementTotal', 1, 5, 22, 0, 0, 3, 2, 1, 1, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:06','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093122, '', 'annuity', 1, 2, 12, 0, 0, 2, 2, 2, 7, 1651749398360, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093123, 'ҵ', 'commercialHealthInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749448800, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093124, '˰ϱ', 'taxDeferredEndowmentInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749487187, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093125, 'Ʋԭֵ', 'originalValueOfProperty', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:29','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093126, '۳˰', 'deductedTax', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:42','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093127, '', 'other', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749540147, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093128, '£Σ', 'fee', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093129, '£Σ˰', 'taxFreeIncome', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:58:54','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093130, '˰', 'lessTaxProportion', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646657, '˰ϼ', 'afterTaxAdjustmentTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:59:09','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646658, 'ǰۼƼ˰ϼ', 'addUpTaxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 5, 0, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646659, '£Σ׼ʿ۳ľ', 'allowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651749595061, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646660, 'ǰۼ׼۳ľ', 'addUpAllowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651749675268, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 15:54:31','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646661, '£Σ˰', 'taxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:25','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646662, '˰ۿϼ', 'afterTaxDeductionsTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:37','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919424520683521, '˰ۿ', 'afterTaxDeductions', 1, 4, 15, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:39','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919682288984064, '˰', 'afterTaxReimbursement', 1, 3, 13, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:40','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919776783499264, '˰', 'afterTaxAdjustment', 1, 3, 14, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:48','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674920588574261248, 'ս', 'annualBonus', 1, 1, 2, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:33:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:00:51','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532371614588928, 'ǰۼ籣˺ϼ', 'addUpSocialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801433504, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-07 10:22:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:44:23','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532667749400576, 'ǰۼƹ˺ϼ', 'addUpAccumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801586972, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-07 10:22:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:40','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT into hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697536344384012289, 'ǰۼҵְҵ˺ϼ', 'addUpEnterpriseAndOther', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801667770, ' ', 0, 1, 0, 0, 'all_teams', to_date('2022-03-07 10:22:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:48:07','yyyy-MM-dd HH24:mi:ss'), 'number') +/ + + + + + +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651736817711, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.λ}', 'salaryItem_baseSalary+salaryItem_postSalary', 1, 0, to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737358294, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ս}', 'salaryItem_annualBonus', 1, 0, to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737635353, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ڿۿ}', 'salaryItem_attendanceDeduction', 1, 0, to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737859216, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.нϼ}+{нĿ.ȫһԽϼ}-{нĿ.˰ǰۿϼ}', 'salaryItem_wagesTotal+salaryItem_annualBonusTotal-salaryItem_preTaxDeductionsTotal', 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738034028, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}+{ۼ.ۼ}', 'salaryItem_income+addUpSituation_addUpIncome', 1, 0, to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749914746, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ϱո}', 'welfare_9001socialPer', 1, 0, to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749958879, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҽƱո}', 'welfare_9002socialPer', 1, 0, to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750005281, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ʧҵո}', 'welfare_9004socialPer', 1, 0, to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750034689, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ס}', 'welfare_9006fundPer', 1, 0, to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738826550, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ϸ}+{нĿ.ҽƸ}+{нĿ.ʧҵ}+{нĿ.}', 'salaryItem_endowmentInsurance+salaryItem_medicalInsurance+salaryItem_unemploymentInsurance+salaryItem_housingProvidentFund', 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739000845, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σר۳ϼ}+{ۼ.ۼ籣˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'salaryItem_specialDeduction+addUpSituation_addUpSocialSecurityTotal+addUpSituation_addUpAccumulationFundTotal', 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739053212, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼŮ}', 'addUpDeductions_addUpChildEducation', 1, 0, to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739100651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼסϢ}', 'addUpSituation_addUpHousingLoannumbererest', 1, 0, to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739151122, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼס}', 'addUpSituation_addUpHousingRent', 1, 0, to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739212437, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼƼ}', 'addUpSituation_addUpContinuingEducation', 1, 0, to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739310959, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼ}', 'addUpSituation_addUpSupportElderly', 1, 0, to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739411365, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoannumbererest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly', 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739815651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.ҵ}+{нĿ.˰ϱ}+{нĿ.Ʋԭֵ}+{нĿ.۳˰}+{нĿ.}', 'salaryItem_annuity+salaryItem_commercialHealthInsurance+salaryItem_taxDeferredEndowmentInsurance+salaryItem_originalValueOfProperty+salaryItem_deductedTax+salaryItem_other', 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740238860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}+{ۼ.ۼҵְҵ}', 'salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction+addUpSituation_addUpEnterpriseAndOther', 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740311026, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '5000', '5000', 1, 0, to_date('2022-05-05 16:45:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:45:11','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740397225, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ}+{ۼ.ۼƼ}', 'salaryItem_subtraction+addUpSituation_addUpSubtraction', 1, 0, to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type,extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742185837, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=0){0;}else if({нĿ.ǰۼӦ˰ö}<=36000){0.03;}else if({нĿ.ǰۼӦ˰ö}<=144000){0.1;}else if({нĿ.ǰۼӦ˰ö}<=300000){0.2;}else if({нĿ.ǰۼӦ˰ö}<=420000){0.25;}else if({нĿ.ǰۼӦ˰ö}<=660000){0.3;}else if({нĿ.ǰۼӦ˰ö}<=960000){0.35;}else{0.45;}', 'if(salaryItem_addUpTaxableIncome<=0){0;}else if(salaryItem_addUpTaxableIncome<=36000){0.03;}else if(salaryItem_addUpTaxableIncome<=144000){0.1;}else if(salaryItem_addUpTaxableIncome<=300000){0.2;}else if(salaryItem_addUpTaxableIncome<=420000){0.25;}else if(salaryItem_addUpTaxableIncome<=660000){0.3;}else if(salaryItem_addUpTaxableIncome<=960000){0.35;}else{0.45;}', 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742702735, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=36000){{нĿ.ǰۼӦ˰ö}<=36000){0;}else if({нĿ.ǰۼӦ˰ö}<=144000){2520;}else if({нĿ.ǰۼӦ˰ö}<=300000){16920;}else if({нĿ.ǰۼӦ˰ö}<=420000){31920;}else if({нĿ.ǰۼӦ˰ö}<=660000){52920;}else if({нĿ.ǰۼӦ˰ö}<=960000){85920;}else{181920;}', 'if(salaryItem_addUpTaxableIncome<=36000){0;}else if(salaryItem_addUpTaxableIncome<=144000){2520;}else if(salaryItem_addUpTaxableIncome<=300000){16920;}else if(salaryItem_addUpTaxableIncome<=420000){31920;}else if(salaryItem_addUpTaxableIncome<=660000){52920;}else if(salaryItem_addUpTaxableIncome<=960000){85920;}else{181920;}', 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651745445982, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation', 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748888864, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ö}*{нĿ.£Σн˰˰}-{нĿ.£Σн˰۳}', 'salaryItem_addUpTaxableIncome*salaryItem_taxRate-salaryItem_quickDeductionFactor', 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748978482, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼԤԤ˰}', 'addUpSituation_addUpAdvanceTax', 1, 0, to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749111981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰}-{нĿ.ǰۼѿ۽˰ϼ}-{нĿ.ǰۼƼ˰ϼ}', 'salaryItem_addUpTaxPayable-salaryItem_addUpAdvanceTax-salaryItem_addUpTaxDeduction', 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749240004, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}-{нĿ.£Σר۳ϼ}-{нĿ.£ΣӦ˰}+{нĿ.˰ϼ}+{нĿ.˰ϼ}-{нĿ.˰ۿϼ}', 'salaryItem_income-salaryItem_specialDeduction-salaryItem_refundedOrSupplementedTax+salaryItem_afterTaxAdjustmentTotal+salaryItem_afterTaxReimbursementTotal-salaryItem_afterTaxDeductionsTotal', 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749398360, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҵ}', 'welfare_9007otherPer', 1, 0, to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749448800, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 1, 0, to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749487187, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 1, 0, to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749540147, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 1, 0, to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749595061, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 1, 0, to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749675268, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ׼ʿ۳ľ}+{ۼ.ۼ׼۳ľ}', 'salaryItem_allowedDonation+addUpSituation_addUpAllowedDonation', 1, 0, to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801433504, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}+{ۼ.ۼ籣˺ϼ}', 'welfare_socialPerSum+addUpSituation_addUpSocialSecurityTotal', 1, 0, to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801586972, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'welfare_fundPerSum+addUpSituation_addUpAccumulationFundTotal', 1, 0, to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801667770, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼҵְҵ}', 'welfare_otherPerSum+addUpSituation_addUpEnterpriseAndOther', 1, 0, to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss')) +/ + + + + + + +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818266, '', 1651736817711, 'salaryItem_baseSalary', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818329, 'λ', 1651736817711, 'salaryItem_postSalary', '{нĿ.λ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:46:58','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737360610, 'ս', 1651737358294, 'salaryItem_annualBonus', '{нĿ.ս}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 15:55:58','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737636061, 'ڿۿ', 1651737635353, 'salaryItem_attendanceDeduction', '{нĿ.ڿۿ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:00:35','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859281, 'нϼ', 1651737859216, 'salaryItem_wagesTotal', '{нĿ.нϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859342, 'ȫһԽϼ', 1651737859216, 'salaryItem_annualBonusTotal', '{нĿ.ȫһԽϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859401, '˰ǰۿϼ', 1651737859216, 'salaryItem_preTaxDeductionsTotal', '{нĿ.˰ǰۿϼ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:04:19','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035450, '£ΣӦ˰ϼ', 1651738034028, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035488, 'ۼ', 1651738034028, 'addUpSituation_addUpIncome', '{ۼ.ۼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:07:14','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738832854, 'ϸ', 1651738826550, 'salaryItem_endowmentInsurance', '{нĿ.ϸ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837363, 'ҽƸ', 1651738826550, 'salaryItem_medicalInsurance', '{нĿ.ҽƸ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837909, 'ʧҵ', 1651738826550, 'salaryItem_unemploymentInsurance', '{нĿ.ʧҵ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738838429, '', 1651738826550, 'salaryItem_housingProvidentFund', '{нĿ.}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:20:27','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002623, '£Σר۳ϼ', 1651739000845, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002682, 'ۼ籣˺ϼ', 1651739000845, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739003139, 'ۼƹ˺ϼ', 1651739000845, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 2, 1, 0, to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:23:21','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739054270, 'ۼŮ', 1651739053212, 'addUpDeductions_addUpChildEducation', '{ۼרӿ۳.ۼŮ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:24:13','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739101122, 'ۼסϢ', 1651739100651, 'addUpSituation_addUpHousingLoannumbererest', '{ۼ.ۼסϢ}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:01','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739151221, 'ۼס', 1651739151122, 'addUpSituation_addUpHousingRent', '{ۼ.ۼס}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:25:51','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739213082, 'ۼƼ', 1651739212437, 'addUpSituation_addUpContinuingEducation', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:26:52','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739311009, 'ۼ', 1651739310959, 'addUpSituation_addUpSupportElderly', '{ۼ.ۼ}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:28:31','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411502, 'ۼŮ', 1651739411365, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411637, 'ۼסϢ', 1651739411365, 'salaryItem_addUpHousingLoannumbererest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411715, 'ۼס', 1651739411365, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411773, 'ۼƼ', 1651739411365, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739412718, 'ۼ', 1651739411365, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:30:11','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739819892, '', 1651739815651, 'salaryItem_annuity', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739822564, 'ҵ', 1651739815651, 'salaryItem_commercialHealthInsurance', '{нĿ.ҵ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739826637, '˰ϱ', 1651739815651, 'salaryItem_taxDeferredEndowmentInsurance', '{нĿ.˰ϱ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739828954, 'Ʋԭֵ?', 1651739815651, 'salaryItem_originalValueOfProperty', '{нĿ.Ʋԭֵ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739829915, '۳˰', 1651739815651, 'salaryItem_deductedTax', '{нĿ.۳˰}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739830465, '', 1651739815651, 'salaryItem_other', '{нĿ.}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:36:56','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740240713, '£Σ۳ϼ', 1651740238860, 'salaryItem_otherDeduction', '{нĿ.£Σ۳ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241221, 'ۼ˰۳', 1651740238860, 'addUpSituation_addUpOtherDeduction', '{ۼ.ۼ˰۳}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241717, 'ۼҵְҵ', 1651740238860, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 2, 1, 0, to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:43:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397497, '£Σ', 1651740397225, 'salaryItem_subtraction', '{нĿ.£Σ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397989, 'ۼƼ', 1651740397225, 'addUpSituation_addUpSubtraction', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 16:46:37','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185950, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185995, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186035, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186085, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186122, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186155, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186199, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 6, 1, 0, to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:16:26','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742704826, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705308, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705782, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705831, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706306, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706368, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 17:25:03','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745446904, 'ǰۼӦ˰ϼ', 1651745445982, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447442, 'ǰۼר۳ϼ', 1651745445982, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447969, 'ǰۼרӿ۳ϼ', 1651745445982, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745448475, 'ǰۼ۳ϼ', 1651745445982, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745451616, 'ǰۼƼ', 1651745445982, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745452097, 'ǰۼ׼۳ľ', 1651745445982, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 18:10:46','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888918, 'ǰۼӦ˰ö', 1651748888864, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888952, '£Σн˰˰', 1651748888864, 'salaryItem_taxRate', '{нĿ.£Σн˰˰}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888989, '£Σн˰۳', 1651748888864, 'salaryItem_quickDeductionFactor', '{нĿ.£Σн˰۳}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:08:09','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748978520, 'ۼԤԤ˰', 1651748978482, 'addUpSituation_addUpAdvanceTax', '{ۼ.ۼԤԤ˰}', 'number', 'addUpSituation', 0, 1, 0, to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:09:38','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112037, 'ǰۼӦ˰', 1651749111981, 'salaryItem_addUpTaxPayable', '{нĿ.ǰۼӦ˰}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112068, 'ǰۼѿ۽˰ϼ', 1651749111981, 'salaryItem_addUpAdvanceTax', '{нĿ.ǰۼѿ۽˰ϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112116, 'ǰۼƼ˰ϼ', 1651749111981, 'salaryItem_addUpTaxDeduction', '{нĿ.ǰۼƼ˰ϼ}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:11:52','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240040, '£ΣӦ˰ϼ', 1651749240004, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240082, '£Σר۳ϼ', 1651749240004, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240117, '£ΣӦ˰', 1651749240004, 'salaryItem_refundedOrSupplementedTax', '{нĿ.£ΣӦ˰}', 'number', 'salaryItem', 2, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240164, '˰ϼ', 1651749240004, 'salaryItem_afterTaxAdjustmentTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 3, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240199, '˰ϼ', 1651749240004, 'salaryItem_afterTaxReimbursementTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 4, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240245, '˰ۿϼ', 1651749240004, 'salaryItem_afterTaxDeductionsTotal', '{нĿ.˰ۿϼ}', 'number', 'salaryItem', 5, 1, 0, to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:14:00','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749398399, 'ҵ', 1651749398360, 'welfare_9007otherPer', '{籣.ҵ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:16:38','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749448843, 'ҵ', 1651749448800, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:17:29','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749487225, '˰ϱ', 1651749487187, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:18:07','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749540213, '', 1651749540147, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:00','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749596472, '׼۳ľ', 1651749595061, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 1, 0, to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:19:55','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675326, '£Σ׼ʿ۳ľ', 1651749675268, 'salaryItem_allowedDonation', '{нĿ.£Σ׼ʿ۳ľ}', 'number', 'salaryItem', 0, 1, 0, to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675365, 'ۼ׼۳ľ', 1651749675268, 'addUpSituation_addUpAllowedDonation', '{ۼ.ۼ׼۳ľ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:21:15','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749914793, 'ϱո', 1651749914746, 'welfare_9001socialPer', '{籣.ϱո}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:15','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749958917, 'ҽƱո', 1651749958879, 'welfare_9002socialPer', '{籣.ҽƱո}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:25:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750005320, 'ʧҵո', 1651750005281, 'welfare_9004socialPer', '{籣.ʧҵո}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:26:45','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750034727, 'ס', 1651750034689, 'welfare_9006fundPer', '{籣.ס}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-05 19:27:15','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801435862, '籣˺ϼ', 1651801433504, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801436423, 'ۼ籣˺ϼ', 1651801433504, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:43:54','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587331, '˺ϼ', 1651801586972, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587794, 'ۼƹ˺ϼ', 1651801586972, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:46:27','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801669969, '˺ϼ', 1651801667770, 'welfare_otherPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT into hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801670474, 'ۼҵְҵ', 1651801667770, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 1, 1, 0, to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-06 09:47:48','yyyy-MM-dd HH24:mi:ss')) +/ + + + + +INSERT into hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291652, 'taxAgentName', 0, 0, 0, to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams') +/ +INSERT into hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291653, 'username', 1, 0, 0, to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams') +/ +INSERT into hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291654, 'departmentName', 2, 0, 0, to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), to_date('2022-02-23 17:32:08','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams') +/ + + +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368900, 4, 703459464954929153, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368899, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368902, 4, 703458434280095745, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368901, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368903, 4, 703458558739300353, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368901, 1) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368905, 4, 674914626953093123, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368906, 4, 674914626953093124, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 1) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368907, 4, 674914626953093127, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 2) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368908, 4, 674916065864646659, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368904, 3) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368910, 4, 704467747234045953, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368911, 4, 704468391612751873, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 1) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368912, 4, 704468443048992769, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 2) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368913, 4, 704468490269204481, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 3) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368914, 4, 704468528928063488, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 704495325212368909, 4) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368915, 4, 703459151591383041, 1, 0, 0, to_date('2022-03-14 11:32:32','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-17 16:14:11','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312448, 1, 703459151591383041, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312449, 1, 674861648655892480, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312450, 1, 674861768948531201, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 1) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312451, 1, 674861880508628992, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 2) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312452, 1, 674920588574261248, 1, 1, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 3) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312453, 1, 674853617092214790, 1, 0, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 4) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312454, 1, 674853617092214791, 1, 0, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 5) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312455, 1, 674914626953093129, 1, 0, 0, to_date('2022-03-14 11:32:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 6) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312456, 1, 703419929857687552, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 7) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312457, 1, 674853617092214792, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312458, 1, 674853617092214793, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 1) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312459, 1, 674853617092214795, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 2) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312460, 1, 674853617092214796, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 3) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312461, 1, 700599184238075904, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 4) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312462, 1, 700599446244319233, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 5) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312463, 1, 674853617092214797, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 6) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312464, 1, 697532371614588928, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 7) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312465, 1, 697532667749400576, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 8) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312466, 1, 697536344384012289, 1, 0, 0, to_date('2022-03-18 16:24:49','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 9) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312467, 1, 674853617092214798, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614092, 10) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312468, 1, 674853617092214803, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312469, 1, 674853617092214802, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 1) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312470, 1, 674853617092214801, 1, 0, 0, to_date('2022-03-14 11:32:29','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 2) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312471, 1, 674853617092214800, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 3) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312472, 1, 674853617092214799, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 4) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312473, 1, 705641858303836161, 1, 0, 0, to_date('2022-03-17 13:48:51','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 5) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312474, 1, 674853617092214804, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 6) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312475, 1, 674853617092214807, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312476, 1, 674853617092214808, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 1) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312477, 1, 674914626953093122, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 2) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312478, 1, 674914626953093123, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 3) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312479, 1, 674914626953093124, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 4) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312480, 1, 674914626953093127, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 5) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312481, 1, 674853617092214805, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 6) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312482, 1, 674853617092214806, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 7) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312483, 1, 674916065864646659, 1, 0, 0, to_date('2022-03-18 16:30:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 8) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312484, 1, 674916065864646660, 1, 0, 0, to_date('2022-03-18 16:30:21','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 9) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312485, 1, 674853617092214811, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 0) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312486, 1, 674853617092214809, 1, 0, 0, to_date('2022-03-14 11:32:30','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 1) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312487, 1, 674853617092214810, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 2) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312488, 1, 674853617092214812, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 3) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312489, 1, 674853617092214813, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 4) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312490, 1, 674916065864646661, 1, 1, 0, to_date('2022-03-18 16:33:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 5) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312491, 1, 674916065864646658, 1, 1, 0, to_date('2022-03-18 16:33:37','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 6) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312492, 1, 674853617092214814, 1, 0, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614119, 7) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312493, 1, 674853617092214815, 1, 1, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:23','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614126, 6) +/ +INSERT into hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312494, 1, 700769462612156416, 1, 1, 0, to_date('2022-03-14 11:32:31','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-18 16:59:24','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614126, 7) +/ + + + + +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614083, 1, 'Լ˰', 0, ' ', SYSDATE, SYSDATE, 0, 0, 'all_teams') +/ +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614092, 1, 'ר۳', 1, ' ', SYSDATE, SYSDATE, 0, 0, 'all_teams') +/ +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614103, 1, 'ۼרӿ۳', 2, ' ', to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614110, 1, '۳Ϣ', 3, ' ', to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614119, 1, '˰', 4, ' ', to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:27','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614126, 1, 'Ӧʵ', 5, ' ', to_date('2022-03-11 14:49:28','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-11 14:49:28','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368899, 4, 'Ŀ', 0, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368901, 4, '뼰˰', 1, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368904, 4, '۳Ϣ', 2, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368909, 4, '˰', 3, ' ', to_date('2022-03-15 17:52:48','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-15 18:14:53','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ + + +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, 'ϱ', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, 'ҽƱ', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '˱', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, 'ʧҵ', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '', 1, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, 'ס', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, 'ҵ', 3, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ +INSERT into hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, 'ס', 2, 1, '1,2', 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 0, 'all_teams') +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202205200203.sql b/resource/sqlupgrade/Oracle/sql202205200203.sql new file mode 100644 index 000000000..5480d1cde --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202205200203.sql @@ -0,0 +1,11 @@ +ALTER TABLE hrsa_add_up_situation ADD ( + add_up_illness_medical varchar2(255) NULL , + add_up_tax_savings varchar2(255) NULL , + add_up_infant_care varchar2(255) NULL +) +/ +ALTER TABLE hrsa_add_up_deduction add ( + add_up_illness_medical varchar2(255) NULL, + add_up_infant_care varchar2(255) NULL +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202205310203.sql b/resource/sqlupgrade/Oracle/sql202205310203.sql new file mode 100644 index 000000000..bd39af010 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202205310203.sql @@ -0,0 +1,39 @@ +INSERT INTO hrsa_formula (id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1653993466778, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼסϢ}', 'addUpDeductions_addUpHousingLoanInterest', 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) + / +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993466787, 'ۼסϢ', 1653993466778, 'addUpDeductions_addUpHousingLoanInterest', '{ۼרӿ۳.ۼסϢ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) + / +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993837931, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼס}', 'addUpDeductions_addUpHousingRent', 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) + / +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993837947, 'ۼס', 1653993837931, 'addUpDeductions_addUpHousingRent', '{ۼרӿ۳.ۼס}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) + / +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993954233, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƼ}', 'addUpDeductions_addUpContinuingEducation', 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) + / +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993954257, 'ۼƼ', 1653993954233, 'addUpDeductions_addUpContinuingEducation', '{ۼרӿ۳.ۼƼ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) + / +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653994061764, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼ}', 'addUpDeductions_addUpSupportElderly', 1, 0,to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'),to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) + / +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653994061780, 'ۼ', 1653994061764, 'addUpDeductions_addUpSupportElderly', '{ۼרӿ۳.ۼ}', 'number', 'addUpDeductions', 0, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) + / + + + + + +update hrsa_sys_salary_item set formula_id = 1653993466778 where id = 674853617092214800 + / +update hrsa_sys_salary_item set formula_id = 1653993837931 where id = 674853617092214801 + / +update hrsa_sys_salary_item set formula_id = 1653993954233 where id = 674853617092214802 + / +update hrsa_sys_salary_item set formula_id = 1653994061764 where id = 674853617092214803 + / + + +update hrsa_salary_item set formula_id = 1653993466778 where sys_salary_item_id = 674853617092214800 +/ +update hrsa_salary_item set formula_id = 1653993837931 where sys_salary_item_id = 674853617092214801 +/ +update hrsa_salary_item set formula_id = 1653993954233 where sys_salary_item_id = 674853617092214802 +/ +update hrsa_salary_item set formula_id = 1653994061764 where sys_salary_item_id = 674853617092214803 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202206071403.sql b/resource/sqlupgrade/Oracle/sql202206071403.sql new file mode 100644 index 000000000..49f1dd311 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202206071403.sql @@ -0,0 +1,134 @@ +CREATE TABLE hrsa_tax_agent_emp +( + id NUMBER(38,0) primary key NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + employee_name varchar2(255) +) +/ + +CREATE TABLE hrsa_tax_agent_emp_change +( + id NUMBER(38,0) primary key NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + change_type number DEFAULT 0 , + employee_name varchar2(255) DEFAULT NULL, + module_type NUMBER(4,0) DEFAULT 0 +) +/ + +CREATE TABLE hrsa_tax_agent_admin +( + id NUMBER(38,0) primary key NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT 0, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' +) +/ + +CREATE TABLE hrsa_tax_agent_manage_range +( + id NUMBER(38,0) primary key NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) DEFAULT 0, + tax_agent_sub_admin_id NUMBER(38,0) DEFAULT 0, + target_type number DEFAULT 1, + target_id NUMBER(38,0) NOT NULL, + employee_status varchar2(100) NOT NULL, + include_type number DEFAULT 1, + creator NUMBER(38,0) DEFAULT '0', + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + range_type number DEFAULT 0 +) + / + +CREATE TABLE hrsa_tax_agent_base +( + id NUMBER(38,0) primary key NOT NULL, + devolution_status NUMBER(11,0) DEFAULT 0 , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT '0', + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '' +) +/ + +CREATE TABLE hrsa_tax_agent_sub_admin +( + id NUMBER(38,0) primary key NOT NULL, + tax_agent_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + description varchar2(100) , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT '0', + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + remark clob +) + +/ + +CREATE TABLE hrsa_tax_agent_sub_admin_emp +( + id NUMBER(38,0) primary key NOT NULL, + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate, + creator NUMBER(38,0) DEFAULT '0', + delete_type number DEFAULT 0 , + tenant_key varchar2(10) DEFAULT '', + tax_agent_id NUMBER(38,0) NOT NULL, + tax_agent_sub_admin_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + employee_name varchar2(255) +) +/ + +ALTER TABLE hrsa_tax_agent add ( + payment_agency varchar2(255) +) +/ + +ALTER TABLE hrsa_salary_sob add ( + tax_agent_id NUMBER(38,0) +) +/ + + + +INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 1, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 1, 0, 'all_teams') +/ + +ALTER TABLE hrsa_bill_detail_temp add ( + payment_organization NUMBER(38,0) +) +/ + +ALTER TABLE hrsa_bill_detail add ( + payment_organization NUMBER(38,0) +) +/ + +ALTER TABLE hrsa_bill_batch add ( + payment_organization NUMBER(38,0) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202206090403.sql b/resource/sqlupgrade/Oracle/sql202206090403.sql new file mode 100644 index 000000000..2082462ec --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202206090403.sql @@ -0,0 +1,9 @@ +ALTER TABLE hrsa_tax_declaration add ( + income_category number +) +/ + +ALTER TABLE hrsa_tax_declaration_detail add ( + employee_type number +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202206141003.sql b/resource/sqlupgrade/Oracle/sql202206141003.sql new file mode 100644 index 000000000..82ec3a56b --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202206141003.sql @@ -0,0 +1,36 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836162, 'ۼӤ׶ջ', 'addUpInfantCare', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655196897860, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703419929857687552, 'ǰۼ˰', 'addUpTaxFreeIncome', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197296054, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836161, 'ۼƴҽ', 'addUpIllnessMedical', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197430967, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655196897860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼӤ׶ջ}', 'addUpDeductions_addUpInfantCare', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197296054, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ˰}+{ۼ.ۼ˰}', 'salaryItem_taxFreeIncome+addUpSituation_addUpTaxExemptIncome', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197430967, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƴҽ}', 'addUpDeductions_addUpIllnessMedical', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655196897869, 'ۼӤ׶ջ', 1655196897860, 'addUpDeductions_addUpInfantCare', '{ۼרӿ۳.ۼӤ׶ջ}', 'number', 'addUpDeductions', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296059, '£Σ˰', 1655197296054, 'salaryItem_taxFreeIncome', '{нĿ.£Σ˰}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296063, 'ۼ˰', 1655197296054, 'addUpSituation_addUpTaxExemptIncome', '{ۼ.ۼ˰}', 'number', 'addUpSituation', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197430986, 'ۼƴҽ', 1655197430967, 'addUpDeductions_addUpIllnessMedical', '{ۼרӿ۳.ۼƴҽ}', 'number', 'addUpDeductions', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (728615865977528321, 1, 705641858303836162, 1, 0, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614103, 7) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845569, 1, 674853617092214787, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 8) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845572, 1, 674853617092214788, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 9) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845578, 1, 674853617092214789, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 10) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845567, 1, 733975748932845568, 1, 1, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614083, 11) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202206160500.sql b/resource/sqlupgrade/Oracle/sql202206160500.sql new file mode 100644 index 000000000..060aa40e0 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202206160500.sql @@ -0,0 +1,30 @@ +delete from SystemRightDetail where rightid =2693 +/ +delete from SystemRightsLanguage where id =2693 +/ +delete from SystemRights where id =2693 +/ +delete from SystemRightToGroup where rightid =2693 +/ +delete from SystemRightType where id =36 +/ +delete from SystemRightGroups where id =-22 +/ +insert into SystemRights (id,rightdesc,righttype,detachable) values (2693,'нȨ','36',0) +/ +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,8,'Salary management authority','Salary management authority') +/ +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,9,'н','н') +/ +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,7,'нȨ','нȨ') +/ + +insert into SystemRightDetail (id,rightdetailname,rightdetail,rightid) values (43969,'нܹԱ','Salary:Chief',2693) +/ + +insert into SystemRightToGroup(rightid,groupid) values (2693,-22) +/ +insert into SystemRightGroups (id,rightgroupmark, rightgroupname, rightgroupremark) values(-22,'SALARY','нȨ','н') +/ +insert into SystemRightType(id,rightTypeName,rightTypeDesc) VALUES (36,'н','н') +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202206230403.sql b/resource/sqlupgrade/Oracle/sql202206230403.sql new file mode 100644 index 000000000..9b6a816e4 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202206230403.sql @@ -0,0 +1,23 @@ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655976865885, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}+{нĿ.ۼƴҽ}+{нĿ.ۼӤ׶ջ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoanInterest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly+salaryItem_addUpIllnessMedical+salaryItem_addUpInfantCare', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865909, 'ۼ', 1655976865885, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865913, 'ۼƼ', 1655976865885, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865917, 'ۼס', 1655976865885, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865921, 'ۼסϢ', 1655976865885, 'salaryItem_addUpHousingLoanInterest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865924, 'ۼŮ', 1655976865885, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865929, 'ۼƴҽ', 1655976865885, 'salaryItem_addUpIllnessMedical', '{нĿ.ۼƴҽ}', 'number', 'salaryItem', 5, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865933, 'ۼӤ׶ջ', 1655976865885, 'salaryItem_addUpInfantCare', '{нĿ.ۼӤ׶ջ}', 'number', 'salaryItem', 6, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ + +update hrsa_sys_salary_item set formula_id = 1655976865885 where id = 674853617092214804 +/ + +update hrsa_salary_item set formula_id = 1655976865885 where sys_salary_item_id = 674853617092214804 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202207110803.sql b/resource/sqlupgrade/Oracle/sql202207110803.sql new file mode 100644 index 000000000..f60e6aa07 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202207110803.sql @@ -0,0 +1,22 @@ +CREATE TABLE hrsa_salary_acct_result_report +( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_sob_id NUMBER(38,0) DEFAULT 0, + salary_acct_emp_id varchar2(200) DEFAULT '', + salary_acct_record_id NUMBER(38,0) DEFAULT 0, + employee_id varchar2(200) DEFAULT '', + tax_agent_id NUMBER(38,0) DEFAULT 0, + salary_item_id NUMBER(38,0) DEFAULT 0, + result_value varchar2(1000) DEFAULT '', + creator NUMBER(38,0) DEFAULT 0, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + delete_type number DEFAULT 0, + tenant_key varchar2(10) DEFAULT '', + department_id NUMBER(38,0) DEFAULT 0, + subcompany_id NUMBER(38,0) DEFAULT 0, + costcenter_id NUMBER(38,0) DEFAULT 0, + jobtitle_id NUMBER(38,0) DEFAULT 0, + location_id NUMBER(38,0) DEFAULT 0 +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202207120303.sql b/resource/sqlupgrade/Oracle/sql202207120303.sql new file mode 100644 index 000000000..78f646001 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202207120303.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_sys_conf +( + id NUMBER(38,0) primary key NOT NULL, + conf_key varchar2(200) NOT NULL , + conf_value varchar2(500) NOT NULL, + title varchar2(200) , + module varchar2(200) , + order_weight number , + description varchar2(200) , + delete_type number DEFAULT 0 , + create_time date DEFAULT sysdate, + update_time date DEFAULT sysdate +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202207210203.sql b/resource/sqlupgrade/Oracle/sql202207210203.sql new file mode 100644 index 000000000..81c1f650b --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202207210203.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_archive ADD ( + tax_agent_id NUMBER(38,0) NULL , + pay_start_date date NULL , + pay_end_date date NULL +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202208051103.sql b/resource/sqlupgrade/Oracle/sql202208051103.sql new file mode 100644 index 000000000..45c405555 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202208051103.sql @@ -0,0 +1,96 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599184238075904, '籣˺ϼ', 'socialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339100298, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599446244319233, '˺ϼ', 'accumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339063868, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458434280095745, '', 'laborIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458558739300353, '˰', 'laborTaxFreeIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459151591383041, 'ע', 'description', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'string') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459464954929153, 'Ŀ', 'incomeItems', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'string') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704467747234045953, '˰', 'laborSubtraction', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340673739, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468391612751873, '˰Ӧ˰ö', 'laborTaxableIncome', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340916981, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468443048992769, '˰˰', 'laborTaxRate', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341397524, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468490269204481, '˰۳', 'laborQuickDeductionFactor', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341564390, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468528928063488, '˰Ӧ˰', 'laborTaxPayable', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341811881, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (733975748932845568, '˰', 'taxAdjustment', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629570, 'ҵ', 'commercialHealthInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341909423, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629571, '˰ϱ', 'taxDeferredEndowmentInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341966905, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629572, '', 'other4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341993723, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629573, '£Σ׼۳ľ', 'allowedDonation4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659342041963, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629574, 'ע', 'description4', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'string') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629575, 'ѷнʺϼ', 'issuedTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629576, 'нʺϼ', 'ressueTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339063868, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}', 'welfare_fundPerSum', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339100298, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}', 'welfare_socialPerSum', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340673739, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.}-{нĿ.˰}<=4000){800/}else{0.2*({нĿ.}-{нĿ.˰})}', 'if(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome<=4000){800/}else{0.2*(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome)}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340916981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}-{нĿ.˰}-{нĿ.˰}', 'salaryItem_laborIncome-salaryItem_laborTaxFreeIncome-salaryItem_laborSubtraction', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341397524, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0.2/}else if({нĿ.˰Ӧ˰ö}<=50000){0.3/}else{0.4/}', 'if(salaryItem_laborTaxableIncome<=20000){0.2/}else if(salaryItem_laborTaxableIncome<=50000){0.3/}else{0.4/}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341564390, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0/}else if({нĿ.˰Ӧ˰ö}<=50000){2000/}else{7000/}', 'if(salaryItem_laborTaxableIncome<=20000){0/}else if(salaryItem_laborTaxableIncome<=50000){2000/}else{7000/}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341811881, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=0){0/}else{{нĿ.˰Ӧ˰ö}*{нĿ.˰˰}-{нĿ.˰۳}}', 'if(salaryItem_laborTaxableIncome<=0){0/}else{salaryItem_laborTaxableIncome*salaryItem_laborTaxRate-salaryItem_laborQuickDeductionFactor}', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341909423, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341966905, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341993723, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659342041963, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339063886, '˺ϼ', 1659339063868, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339100354, '籣˺ϼ', 1659339100298, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673751, '', 1659340673739, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673754, '˰', 1659340673739, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917032, '', 1659340916981, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917035, '˰', 1659340916981, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917039, '˰', 1659340916981, 'salaryItem_laborSubtraction', '{нĿ.˰}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341397539, '˰Ӧ˰ö', 1659341397524, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341564447, '˰Ӧ˰ö', 1659341564390, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811897, '˰Ӧ˰ö', 1659341811881, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811901, '˰˰', 1659341811881, 'salaryItem_laborTaxRate', '{нĿ.˰˰}', 'number', 'salaryItem', 3, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811904, '˰۳', 1659341811881, 'salaryItem_laborQuickDeductionFactor', '{нĿ.˰۳}', 'number', 'salaryItem', 4, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341909473, 'ҵ', 1659341909423, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341966920, '˰ϱ', 1659341966905, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341993736, '', 1659341993723, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659342041967, '׼۳ľ', 1659342041963, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202208080403.sql b/resource/sqlupgrade/Oracle/sql202208080403.sql new file mode 100644 index 000000000..3bae63347 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202208080403.sql @@ -0,0 +1,41 @@ +Alter table hrsa_bill_detail modify social_payment_base_string varchar2(4000) +/ +Alter table hrsa_bill_detail modify fund_payment_base_string varchar2(4000) +/ +Alter table hrsa_bill_detail modify other_payment_base_string varchar2(4000) +/ +Alter table hrsa_bill_detail modify social_per_json varchar2(4000) +/ +Alter table hrsa_bill_detail modify fund_per_json varchar2(4000) +/ +Alter table hrsa_bill_detail modify other_per_json varchar2(4000) +/ +Alter table hrsa_bill_detail modify social_com_json varchar2(4000) +/ +Alter table hrsa_bill_detail modify fund_com_json varchar2(4000) +/ +Alter table hrsa_bill_detail modify other_com_json varchar2(4000) +/ + + + + + +Alter table hrsa_bill_detail_temp modify social_payment_base_string varchar2(4000) +/ +Alter table hrsa_bill_detail_temp modify fund_payment_base_string varchar2(4000) +/ +Alter table hrsa_bill_detail_temp modify other_payment_base_string varchar2(4000) +/ +Alter table hrsa_bill_detail_temp modify social_per_json varchar2(4000) +/ +Alter table hrsa_bill_detail_temp modify fund_per_json varchar2(4000) +/ +Alter table hrsa_bill_detail_temp modify other_per_json varchar2(4000) +/ +Alter table hrsa_bill_detail_temp modify social_com_json varchar2(4000) +/ +Alter table hrsa_bill_detail_temp modify fund_com_json varchar2(4000) +/ +Alter table hrsa_bill_detail_temp modify other_com_json varchar2(4000) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202208240403.sql b/resource/sqlupgrade/Oracle/sql202208240403.sql new file mode 100644 index 000000000..6ca681ea9 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202208240403.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_social_security_scheme ADD ( + shared_type varchar2(255) NULL , + tax_agent_ids varchar2(500) NULL +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202208240503.sql b/resource/sqlupgrade/Oracle/sql202208240503.sql new file mode 100644 index 000000000..1275c4f89 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202208240503.sql @@ -0,0 +1,15 @@ +CREATE TABLE HRSA_SALARY_ITEM_HIDE ( + ID NUMBER(38,0) NOT NULL, + SALARY_SOB_ID NUMBER(38,0) NOT NULL, + SALARY_ITEM_ID NUMBER(38,0) NOT NULL, + IS_GROUP NUMBER NOT NULL, + ITEM_HIDE NUMBER(38,0) DEFAULT 0, + CREATOR NUMBER(38,0) NOT NULL, + DELETE_TYPE NUMBER DEFAULT 0 NOT NULL, + TENANT_KEY VARCHAR2(255 BYTE) NOT NULL, + CREATE_TIME DATE DEFAULT sysdate NOT NULL, + UPDATE_TIME DATE DEFAULT sysdate +) +/ +ALTER TABLE HRSA_SALARY_ITEM_HIDE ADD CONSTRAINT SYS_C0024450 PRIMARY KEY ("ID") +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202209010603.sql b/resource/sqlupgrade/Oracle/sql202209010603.sql new file mode 100644 index 000000000..f15d1d92c --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202209010603.sql @@ -0,0 +1,5 @@ +drop sequence hrsa_tax_declaration_id +/ + +DROP TRIGGER hrsa_tax_declaration_Tri +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202209050303.sql b/resource/sqlupgrade/Oracle/sql202209050303.sql new file mode 100644 index 000000000..4e74bce28 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202209050303.sql @@ -0,0 +1,5 @@ +drop sequence hrsa_salary_send_id +/ + +drop trigger hrsa_salary_send_Tri +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202210080203.sql b/resource/sqlupgrade/Oracle/sql202210080203.sql new file mode 100644 index 000000000..94ae212f4 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202210080203.sql @@ -0,0 +1,94 @@ +CREATE TABLE hrsa_excel_bill_detail ( + + id NUMBER(20,0) NOT NULL, + + employee_id NUMBER(20,0) NOT NULL, + + bill_month VARCHAR2(30) NOT NULL, + + bill_status NUMBER(11,0) NOT NULL, + + payment_status NUMBER(11,0) NOT NULL, + + supplementary_month VARCHAR2(50) NULL, + + supplementary_projects VARCHAR2(50) NULL, + + resource_from NUMBER(11,0) NOT NULL, + + social_pay_org NUMBER(11,0) NULL, + + social_account VARCHAR2(50) NULL, + + social_scheme_id NUMBER(20,0) NULL, + + social_payment_base_string CLOB NULL, + + fund_pay_org NUMBER(11,0) NULL, + + fund_account VARCHAR2(50) NULL, + + supplement_fund_account VARCHAR2(50) NULL, + + fund_scheme_id NUMBER(11,0) NULL, + + fund_payment_base_string CLOB NULL, + + other_pay_org NUMBER(11,0) NULL, + + other_scheme_id NUMBER(20,0) NULL, + + other_payment_base_string CLOB NULL, + + social_per_json CLOB NULL, + + social_per_sum CLOB NULL, + + fund_per_json CLOB NULL, + + fund_per_sum CLOB NULL, + + other_per_json CLOB NULL, + + other_per_sum CLOB NULL, + + per_sum CLOB NULL, + + social_com_json CLOB NULL, + + social_com_sum CLOB NULL, + + fund_com_json CLOB NULL, + + fund_com_sum CLOB NULL, + + other_com_json CLOB NULL, + + other_com_sum CLOB NULL, + + com_sum CLOB NULL, + + social_sum CLOB NULL, + + fund_sum CLOB NULL, + + other_sum CLOB NULL, + + total CLOB NULL, + + creator NUMBER(20,0) NOT NULL, + + create_time DATE DEFAULT sysdate, + + update_time DATE DEFAULT sysdate, + + delete_type NUMBER(11,0) NOT NULL, + + tenant_key VARCHAR2(255 BYTE), + + payment_organization NUMBER(20,0) NULL, + +PRIMARY KEY ( id ) + +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202210080403.sql b/resource/sqlupgrade/Oracle/sql202210080403.sql new file mode 100644 index 000000000..bb1b950a5 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202210080403.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_archive ADD ( + run_status varchar2(255) NULL , + add_type varchar2(255) NULL , + stop_type varchar2(255) NULL +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202210170203.sql b/resource/sqlupgrade/Oracle/sql202210170203.sql new file mode 100644 index 000000000..16a1a07d3 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202210170203.sql @@ -0,0 +1,30 @@ +CREATE TABLE hrsa_insurance_base_info ( + + id NUMBER(38,0) NOT NULL, + + employee_id NUMBER(38,0) NOT NULL, + + payment_organization NUMBER(11,0) NULL, + + social_archives_id NUMBER(38,0) NULL, + + fund_archives_id NUMBER(38,0) NULL, + + other_archives_id NUMBER(38,0) NULL, + + tenant_key VARCHAR2(255 BYTE) NOT NULL, + + creator NUMBER(11,0) NOT NULL, + + delete_type NUMBER(11,0) NOT NULL, + + create_time DATE NOT NULL, + + update_time DATE NOT NULL, + + run_status VARCHAR2(20 BYTE) NOT NULL, + +PRIMARY KEY ( id ) + +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202210170303.sql b/resource/sqlupgrade/Oracle/sql202210170303.sql new file mode 100644 index 000000000..8bc2bf36f --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202210170303.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_sob_range ADD employee_statuses VARCHAR(255) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202211090103.sql b/resource/sqlupgrade/Oracle/sql202211090103.sql new file mode 100644 index 000000000..3b86d7a47 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202211090103.sql @@ -0,0 +1,38 @@ +create table hrsa_special_add_deduction +( +id NUMBER(38, 0) primary key, +employee_id NUMBER(38, 0) not null, +tax_agent_id NUMBER(38, 0) not null, +children_education varchar2(255) default '' , +continuing_education varchar2(255) default '' , +housing_loan_interest varchar2(255) default '' , +housing_rent varchar2(255) default '', +supporting_elder varchar2(255) default '' , +serious_illness_treatment varchar2(255) default '' , +infant_care varchar2(255) default '', +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +creator NUMBER(38, 0), +delete_type NUMBER(11, 0) default 0 , +tenant_key varchar2(10) default '' +) +/ +create sequence hrsa_special_a_d_id +start with 1 +increment by 1 +nomaxvalue +nocycle +nocache +/ +CREATE TRIGGER hrsa_spec_add_dct_trigger +before INSERT ON hrsa_special_add_deduction FOR each ROW WHEN (new.id IS NULL) +BEGIN +SELECT hrsa_special_a_d_id.nextval into:New.id from dual; +END; +/ +CREATE TRIGGER hrsa_spec_add_dct_time_trigger +before UPDATE ON hrsa_special_add_deduction FOR each ROW WHEN (new.update_time IS NOT NULL) +BEGIN +SELECT sysdate into:new.update_time from dual; +END; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202211090301.sql b/resource/sqlupgrade/Oracle/sql202211090301.sql new file mode 100644 index 000000000..802f8f17f --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202211090301.sql @@ -0,0 +1,86 @@ +delete from HtmlLabelIndex where id = 539971 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 539971,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539971 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'Rule Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'ҎtO' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlModuleLabel where indexId = 539971 and moduleCode = 'HRM' and type = 'label' +/ +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539971) +/ + + +delete from HtmlLabelIndex where id = 539970 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 539970,'Ӧ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539970 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Ӧ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Apply Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlModuleLabel where indexId = 539970 and moduleCode = 'HRM' and type = 'label' +/ +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539970) +/ + + +delete from HtmlLabelIndex where id = 539968 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 539968,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539968 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'set up' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlModuleLabel where indexId = 539968 and moduleCode = 'HRM' and type = 'label' +/ +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539968) +/ + + +delete from HtmlLabelIndex where id = 539967 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 539967,'רӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539967 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'רӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'Special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlModuleLabel where indexId = 539967 and moduleCode = 'HRM' and type = 'label' +/ +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539967) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202211090402.sql b/resource/sqlupgrade/Oracle/sql202211090402.sql new file mode 100644 index 000000000..317575df3 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202211090402.sql @@ -0,0 +1,43 @@ +Delete from LeftMenuInfo where id=100183 +/ +Delete from LeftMenuConfig where infoid=100183 +/ +call LMConfig_U_ByInfoInsert (2,100181,0) +/ +call LMInfo_Insert (100183,539970,'','',2,100181,0,18) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/appconfig' where id = 100183 +/ + +Delete from LeftMenuInfo where id=100182 +/ +Delete from LeftMenuConfig where infoid=100182 +/ +call LMConfig_U_ByInfoInsert (2,100181,-1) +/ +call LMInfo_Insert (100182,539971,'','',2,100181,-1,18) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/sysconfig-1' where id = 100182 +/ + +Delete from LeftMenuInfo where id=100180 +/ +Delete from LeftMenuConfig where infoid=100180 +/ +call LMConfig_U_ByInfoInsert (2,100126,0) +/ +call LMInfo_Insert (100180,539967,'','',2,100126,0,18) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/specialAddDeduction' where id = 100180 +/ + +Delete from LeftMenuInfo where id=100181 +/ +Delete from LeftMenuConfig where infoid=100181 +/ +call LMConfig_U_ByInfoInsert (2,100118,9) +/ +call LMInfo_Insert (100181,539968,'','',2,100118,9,18) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100181 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202211170503.sql b/resource/sqlupgrade/Oracle/sql202211170503.sql new file mode 100644 index 000000000..5101c0794 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202211170503.sql @@ -0,0 +1,8 @@ +alter table HRSA_SALARY_ITEM add SHARED_TYPE number(11) +/ + +alter table HRSA_SALARY_ITEM add TAX_AGENT_IDS varchar2(1024) +/ + +ALTER TABLE HRSA_SALARY_ACCT_RECORD ADD LOCK_SALARY_ITEM_IDS varchar2(2000) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202212080903.sql b/resource/sqlupgrade/Oracle/sql202212080903.sql new file mode 100644 index 000000000..6cdf042b8 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202212080903.sql @@ -0,0 +1,69 @@ +CREATE TABLE hrsa_compensation_log ( + + id NUMBER(20,0) NOT NULL, + + payment_agency NUMBER(20,0) NULL, + + payment_organization NUMBER(20,0) NULL, + + employee_id NUMBER(20,0) NULL, + + welfare_type NUMBER(11,0) NULL, + + category_type VARCHAR2(100) NULL, + + country_total VARCHAR2(512) NULL, + + company_total VARCHAR2(512) NULL, + + adjustment_total VARCHAR2(512) NULL, + + adjust_to NUMBER(20,0) NULL, + + bill_month VARCHAR2(30) NULL, + + creator NUMBER(20,0) NULL, + + delete_type NUMBER(11,0) NULL, + + create_time DATE DEFAULT sysdate, + + update_time DATE DEFAULT sysdate, + + tenant_key VARCHAR2(10) NULL, + +PRIMARY KEY ( id ) + +) +/ + +CREATE TABLE hrsa_compensation_config ( + + id NUMBER(20,0) NOT NULL, + + payment_agency NUMBER(20,0) NULL, + + payment_organization NUMBER(20,0) NULL, + + employee_id NUMBER(20,0) NULL, + + welfare_type NUMBER(11,0) NULL, + + category_type VARCHAR2(100) NULL, + + adjust_to NUMBER(20,0) NULL, + + creator NUMBER(20,0) NULL, + + delete_type NUMBER(11,0) NULL, + + create_time DATE DEFAULT sysdate, + + update_time DATE DEFAULT sysdate, + + tenant_key VARCHAR2(10) NULL, + +PRIMARY KEY ( id ) + +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202212081003.sql b/resource/sqlupgrade/Oracle/sql202212081003.sql new file mode 100644 index 000000000..08a65ac59 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202212081003.sql @@ -0,0 +1,56 @@ +create table HRSA_SALARY_SEND_RANGE +( + ID NUMBER(38) not null + primary key, + SALARY_SEND_ID NUMBER(38), + GRANT_TYPE VARCHAR2(64), + CREATE_TIME TIMESTAMP(6) default sysdate, + CREATOR NUMBER(38), + UPDATE_TIME TIMESTAMP(6) default sysdate, + DELETE_TYPE NUMBER(11) default 0, + TENANT_KEY VARCHAR2(10) +) +/ +create sequence HRSA_S_S_R_ID +start with 1 +increment by 1 +nomaxvalue +nocycle +nocache +/ +CREATE TRIGGER HRSA_S_S_R_TRIGGER +before INSERT ON HRSA_SALARY_SEND_RANGE FOR each ROW WHEN (NEW.ID IS NULL) +BEGIN +SELECT HRSA_S_S_R_ID.nextval into:NEW.ID from dual; +END; +/ + +create table HRSA_SALARY_SEND_RANGE_OBJ +( + ID NUMBER(38) not null + primary key, + SALARY_SEND_ID NUMBER(38) not null, + SALARY_SEND_RANGE_ID NUMBER(38) not null, + RANGE_TYPE NUMBER(11) not null, + TARGET_TYPE NUMBER(11) not null, + TARGET_ID NUMBER(38) not null, + CREATOR NUMBER(38), + CREATE_TIME DATE default sysdate, + UPDATE_TIME DATE default sysdate, + DELETE_TYPE NUMBER(11) default 0, + TENANT_KEY VARCHAR2(10) +) +/ +create sequence HRSA_S_S_R_O_ID +start with 1 +increment by 1 +nomaxvalue +nocycle +nocache +/ +CREATE TRIGGER HRSA_S_S_R_O_TRIGGER +before INSERT ON HRSA_SALARY_SEND_RANGE_OBJ FOR each ROW WHEN (NEW.ID IS NULL) +BEGIN +SELECT HRSA_S_S_R_O_ID.nextval into:NEW.ID from dual; +END; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202212230103.sql b/resource/sqlupgrade/Oracle/sql202212230103.sql new file mode 100644 index 000000000..143d90b65 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202212230103.sql @@ -0,0 +1,44 @@ +CREATE TABLE hrsa_salary_sob_back_item ( +id NUMBER(38,0) primary key NOT NULL, +salary_sob_id NUMBER(38,0) DEFAULT NULL NULL, +salary_item_id NUMBER(38,0) DEFAULT NULL NULL, +salary_item_code VARCHAR2(255) DEFAULT NULL NULL, +data_type VARCHAR2(255) DEFAULT NULL NULL, +rounding_mode NUMBER(38,0) DEFAULT NULL NULL, +pattern NUMBER(38,0) DEFAULT NULL NULL, +value_type NUMBER(38,0) DEFAULT NULL NULL, +formula_id NUMBER(38,0) DEFAULT NULL NULL, +back_calc_type NUMBER(38,0) DEFAULT NULL NULL, +tenant_key VARCHAR2(255) DEFAULT NULL NULL, +creator NUMBER(38,0) DEFAULT NULL NULL, +delete_type NUMBER(38,0) DEFAULT NULL NULL, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate +) +/ + +alter table hrsa_salary_acct_record add back_calc_status NUMBER(38,0) null +/ + +alter table hrsa_salary_acct_result add origin_result_value VARCHAR2(1000) null +/ + +alter table hrsa_salary_acct_result_report add origin_result_value VARCHAR2(1000) null +/ + +alter table hrsa_salary_send add salary_acct_type NUMBER(38,0) null +/ +alter table hrsa_salary_send add send_status NUMBER(38,0) null +/ + +alter table hrsa_salary_send_info add salary_acct_type NUMBER(38,0) null +/ + +alter table hrsa_salary_template add replenish_name VARCHAR2(100) null +/ +alter table hrsa_salary_template add replenish_rule VARCHAR2(255) null +/ +alter table hrsa_salary_template add replenish_salary_item_setting CLOB null +/ +alter table hrsa_acct_result_temp add origin_result_value VARCHAR2(1000) null +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202301310403.sql b/resource/sqlupgrade/Oracle/sql202301310403.sql new file mode 100644 index 000000000..b9c56b1d5 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202301310403.sql @@ -0,0 +1,72 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629577, 'ս', 'annualIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629578, 'ս˰', 'annualTaxRate', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1675043440772, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629579, 'ս۳', 'annualQuickDeductionFactor', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674894163247, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629580, 'սӦ˰', 'annualTax', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674896933031, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629581, 'Ӧս', 'annualPayable', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674897014605, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629600, 'ս˰', 'annualTaxFreeIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629601, 'ս', 'annualOther', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629602, '׼۳ľս', 'annualDonateTax', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629603, '˰ս', 'annualTaxSavings', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'number') +/ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629604, 'עս', 'annualRemark', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 'string') +/ + + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845590, 2, 746777981115629577, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 0) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845591, 2, 746777981115629578, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 1) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845592, 2, 746777981115629579, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 2) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845593, 2, 746777981115629580, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 3) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845595, 2, 746777981115629600, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 4) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845596, 2, 746777981115629601, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 5) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845597, 2, 746777981115629602, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 6) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845598, 2, 746777981115629603, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 7) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845599, 2, 746777981115629604, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 8) +/ +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845594, 2, 746777981115629581, 1, 0, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 0, 9) +/ + + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674894163247, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=36000){0;}else if({нĿ.ս}<=144000){210;}else if({нĿ.ս}<=300000){1410;}else if({нĿ.ս}<=420000){2660;}else if({нĿ.ս}<=660000){4410;}else if({нĿ.ս}<=960000){7160;}else{15160;}', 'if(salaryItem_annualIncome<=36000){0;}else if(salaryItem_annualIncome<=144000){210;}else if(salaryItem_annualIncome<=300000){1410;}else if(salaryItem_annualIncome<=420000){2660;}else if(salaryItem_annualIncome<=660000){4410;}else if(salaryItem_annualIncome<=960000){7160;}else{15160;}', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674896933031, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}*{нĿ.ս˰}-{нĿ.ս۳}', 'salaryItem_annualIncome*salaryItem_annualTaxRate-salaryItem_annualQuickDeductionFactor', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674897014605, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}-{нĿ.սӦ˰}', 'salaryItem_annualIncome-salaryItem_annualTax', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1675043440772, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=0){0;}else if({нĿ.ս}<=36000){0.03;}else if({нĿ.ս}<=144000){0.1;}else if({нĿ.ս}<=300000){0.2;}else if({нĿ.ս}<=420000){0.25;}else if({нĿ.ս}<=660000){0.3;}else if({нĿ.ս}<=960000){0.35;}else{0.45;}', 'if(salaryItem_annualIncome<=0){0;}else if(salaryItem_annualIncome<=36000){0.03;}else if(salaryItem_annualIncome<=144000){0.1;}else if(salaryItem_annualIncome<=300000){0.2;}else if(salaryItem_annualIncome<=420000){0.25;}else if(salaryItem_annualIncome<=660000){0.3;}else if(salaryItem_annualIncome<=960000){0.35;}else{0.45;}', 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ + + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674894163265, 'ս', 1674894163247, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933036, 'ս', 1674896933031, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933041, 'ս˰', 1674896933031, 'salaryItem_annualTaxRate', '{нĿ.ս˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933045, 'ս۳', 1674896933031, 'salaryItem_annualQuickDeductionFactor', '{нĿ.ս۳}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014622, 'ս', 1674897014605, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014626, 'սӦ˰', 1674897014605, 'salaryItem_annualTax', '{нĿ.սӦ˰}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1675043440796, 'ս', 1675043440772, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss'), to_date('2022-03-28 10:32:59','yyyy-MM-dd HH24:mi:ss')) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202302060801.sql b/resource/sqlupgrade/Oracle/sql202302060801.sql new file mode 100644 index 000000000..05574530e --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202302060801.sql @@ -0,0 +1,34 @@ +delete from HtmlLabelIndex where id = 540871 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 540871,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540871 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'file management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ + + +delete from HtmlLabelIndex where id = 540869 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 540869,'ֶι' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540869 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'Field management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202302060902.sql b/resource/sqlupgrade/Oracle/sql202302060902.sql new file mode 100644 index 000000000..46e3591ab --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202302060902.sql @@ -0,0 +1,33 @@ +Delete from LeftMenuInfo where id=100125 +/ +Delete from LeftMenuConfig where infoid=100125 +/ +call LMConfig_U_ByInfoInsert (2,100118,2) +/ +call LMInfo_Insert (100125,538004,'','',2,100118,2,18) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100125 +/ + + +Delete from LeftMenuInfo where id=100185 +/ +Delete from LeftMenuConfig where infoid=100185 +/ +call LMConfig_U_ByInfoInsert (2,100125,0) +/ +call LMInfo_Insert (100185,540871,'','',2,100125,0,18) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100185 +/ + +Delete from LeftMenuInfo where id=100184 +/ +Delete from LeftMenuConfig where infoid=100184 +/ +call LMConfig_U_ByInfoInsert (2,100125,-1) +/ +call LMInfo_Insert (100184,540869,'','',2,100125,-1,18) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/fieldManagement' where id = 100184 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202302090303.sql b/resource/sqlupgrade/Oracle/sql202302090303.sql new file mode 100644 index 000000000..8e244e3cc --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202302090303.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_scheme_detail ADD payment_cycle NUMBER(11,0) NULL +/ + +ALTER TABLE hrsa_scheme_detail ADD account_type NUMBER(11,0) NULL +/ + +ALTER TABLE hrsa_scheme_detail ADD cycle_setting VARCHAR2(255) NULL +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202304040503.sql b/resource/sqlupgrade/Oracle/sql202304040503.sql new file mode 100644 index 000000000..b19c59231 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202304040503.sql @@ -0,0 +1,56 @@ +ALTER TABLE hrsa_other_deduction ADD ( + private_pension varchar2(255) NULL +) +/ + +ALTER TABLE hrsa_add_up_situation ADD ( + add_up_private_pension varchar2(255) NULL +) +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629605, 'Ͻ', 'privatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1680746056549, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629698, 'ۼƸϽ', 'addUpPrivatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1681201555316, '', 0, 1, 0, 0, 'all_teams', to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 'number') +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1680746056549, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{˰۳.Ͻ}', 'otherDeduction_privatePension', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1680746056577, 'Ͻ', 1680746056549, 'otherDeduction_privatePension', '{˰۳.Ͻ}', 'number', 'otherDeduction', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681201555316, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.Ͻ}+{ۼ.ۼƸϽ}', 'salaryItem_privatePension+addUpSituation_addUpPrivatePension', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555332, 'Ͻ', 1681201555316, 'salaryItem_privatePension', '{нĿ.Ͻ}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555338, 'ۼƸϽ', 1681201555316, 'addUpSituation_addUpPrivatePension', '{ۼ.ۼƸϽ}', 'number', 'addUpSituation', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845610, 1, 746777981115629605, 1, 0, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 10) +/ + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845611, 1, 746777981115629698, 1, 0, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), 0, 'all_teams', 703433961629614110, 11) +/ + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681265757380, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}-{нĿ.ۼƸϽ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation-salaryItem_addUpPrivatePension', 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757404, 'ǰۼ׼۳ľ', 1681265757380, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757408, 'ǰۼƼ', 1681265757380, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757413, 'ǰۼ۳ϼ', 1681265757380, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757417, 'ǰۼרӿ۳ϼ', 1681265757380, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757421, 'ǰۼר۳ϼ', 1681265757380, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757424, 'ǰۼӦ˰ϼ', 1681265757380, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757428, 'ۼƸϽ', 1681265757380, 'salaryItem_addUpPrivatePension', '{нĿ.ۼƸϽ}', 'number', 'salaryItem', 6, 92, 0, to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss'), to_date('2022-05-10 16:03:02','yyyy-MM-dd HH24:mi:ss')) +/ + +update hrsa_sys_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö' +/ +update hrsa_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö' +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202304260103.sql b/resource/sqlupgrade/Oracle/sql202304260103.sql new file mode 100644 index 000000000..e3dfbeaf6 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202304260103.sql @@ -0,0 +1,2 @@ +update hrsa_sys_salary_item set use_in_employee_salary = 1 where code in ('baseSalary','postSalary') +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202304270203.sql b/resource/sqlupgrade/Oracle/sql202304270203.sql new file mode 100644 index 000000000..620dd24cb --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202304270203.sql @@ -0,0 +1,244 @@ +create table hrsa_sub_table +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + sub_table_name varchar2(100) not null, + dimension varchar2(20) not null, + start_month varchar2(10), + end_month varchar2(10), + pay_org_string varchar2(500), + pay_agency_string varchar2(500), + sub_company_string varchar2(500), + depart_string varchar2(500), + grade_string varchar2(500), + position_string varchar2(500), + status_string varchar2(500), + employee_type varchar2(500), + employee_string varchar2(500), + payment_type_string varchar2(100) +) +/ + +create table hrsa_sub_table_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + item_name varchar2(50) not null, + item_value varchar2(500) not null, + index_value int not null, + total_rule varchar2(500), + count_rule varchar2(500), + unit_type int default 2 +) +/ + +alter table hrsa_sub_table add table_type int +/ + +alter table hrsa_sub_table modify table_type default 0 +/ + +create table hrsa_salary_stats_dim +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + dim_name varchar2(100), + dim_type varchar2(20), + remark varchar2(500), + setting varchar2(2000), + is_default int, + dim_code varchar2(50) +) +/ + +create table hrsa_salary_stats_report +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_name varchar2(100), + dimension varchar2(1000), + tax_agent_setting varchar2(1000), + income_category_setting varchar2(20), + sub_company_setting varchar2(1000), + depart_setting varchar2(1000), + grade_setting varchar2(1000), + position_setting varchar2(1000), + status_setting varchar2(1000), + employee_setting varchar2(1000), + hiredate_setting varchar2(1000), + leavedate_setting varchar2(1000), + salary_start_month date, + salary_end_month date +) +/ + +create table hrsa_salary_statistics_item +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + item_name varchar2(50), + item_value varchar2(1000), + count_rule varchar2(500), + sum_rule varchar2(500), + avg_rule varchar2(500), + max_rule varchar2(500), + min_rule varchar2(500), + median_rule varchar2(500), + index_value int, + unit_type int, + stat_report_id number +) +/ + +create table hrsa_charts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + table_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +) +/ + +create table hrsa_salary_echarts_setting +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + report_id number not null, + charts_type int not null, + item_values varchar2(500), + item_col_value varchar2(50) not null, + dimension_range int not null, + item_sort_value varchar2(500), + item_col_sort_value varchar2(50), + sort_type int, + sort_num int +) +/ + +alter table hrsa_salary_stats_dim modify dim_type varchar2(30) +/ + +alter table hrsa_salary_stats_report modify income_category_setting varchar2(1000) +/ + +create table hrsa_statreportlogs_detail +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + mainid varchar2(36) not null, + dataid varchar2(50) not null, + belongdataid varchar2(50) not null, + tablename varchar2(200) not null, + tablenamelabelid varchar2(50) default '-1' not null, + tablenamedesc varchar2(50) not null, + fieldname varchar2(200) not null, + fieldnamelabelid varchar2(50) default '-1' not null, + newvalue clob not null, + oldvalue clob not null, + newrealvalue clob not null, + oldrealvalue clob not null, + fielddesc varchar2(200) not null, + showorder int not null, + isdetail int default 0 not null +) +/ + +create table hrsa_statreportlogs +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + uuid varchar2(36) not null, + log_date date not null, + device varchar2(500) not null, + log_operator number not null, + operatorname varchar2(100), + targetid number default '-1' not null, + targetname clob not null, + modulename varchar2(100) not null, + functionname varchar2(100) not null, + interfacename varchar2(100) not null, + requesturl varchar2(200) not null, + requesturi varchar2(200) not null, + operatetype varchar2(50) not null, + operatetypename varchar2(100) not null, + operatedesc varchar2(3000) not null, + params clob not null, + belongmainid varchar2(36) not null, + clientip varchar2(50) not null, + groupid varchar2(50) not null, + groupnamelabel varchar2(1000) not null, + redoservice varchar2(200) not null, + redocontext clob not null, + cancelservice varchar2(200) not null, + cancelcontext clob not null, + totalruntime number default '0' not null, + mainruntime number default '0' not null, + log_result varchar2(100) not null, + fromterminal varchar2(100) not null, + resultdesc clob not null, + old_content varchar2(3000) not null, + link_type varchar2(20) not null, + link_id number default '0' not null, + old_link_id number default '0' not null +) +/ + +alter table hrsa_salary_stats_report add remark varchar2(100) +/ + +alter table hrsa_salary_stats_report add second_dimension varchar2(100) +/ + +alter table hrsa_salary_stats_report add sort_index varchar2(100) +/ + +alter table hrsa_salary_stats_report add sort_type varchar2(100) +/ + +alter table hrsa_salary_stats_dim add label_id int +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202304270303.sql b/resource/sqlupgrade/Oracle/sql202304270303.sql new file mode 100644 index 000000000..a2aec6169 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202304270303.sql @@ -0,0 +1,11 @@ +declare +datashowset_id NUMBER; +hrmjobgroups_id NUMBER; +begin +INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, 'нĿ', NULL, '', NULL, NULL, NULL, NULL, '', '', TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL, '', '', '0',SYS_GUID(), '', '', '', '', '1', 0, 1); +SELECT max(id) INTO datashowset_id FROM DATASHOWSET; +INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, TO_CHAR(SYSDATE,'yyyy-MM-dd'), TO_CHAR(SYSDATE,'HH24:mm:ss'), NULL, NULL); +INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (datashowset_id, '', 'name', '', 1, 1, SYS_GUID(), NULL); +INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (datashowset_id, '', 'name', '2', '', 1, SYS_GUID(), ''); +end; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202304270501.sql b/resource/sqlupgrade/Oracle/sql202304270501.sql new file mode 100644 index 000000000..5e813c92f --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202304270501.sql @@ -0,0 +1,16 @@ +delete from HtmlLabelIndex where id = 542781 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 542781,'нͳƱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 542781 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нͳƱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'Salary Statistics Report' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нyӋ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202305050302.sql b/resource/sqlupgrade/Oracle/sql202305050302.sql new file mode 100644 index 000000000..f6f26cb81 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202305050302.sql @@ -0,0 +1,10 @@ +Delete from LeftMenuInfo where id=100187 +/ +Delete from LeftMenuConfig where infoid=100187 +/ +call LMConfig_U_ByInfoInsert (2,100118,9) +/ +call LMInfo_Insert (100187,542781,'','',2,100118,9,18) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/analysisOfSalaryStatistics' where id = 100187 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202305170903.sql b/resource/sqlupgrade/Oracle/sql202305170903.sql new file mode 100644 index 000000000..cb900db75 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202305170903.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_acct_result_log ( + id NUMBER(38,0) NOT NULL, + datasource NUMBER NOT NULL, + salary_acct_record_id NUMBER(38,0) NOT NULL, + salary_acct_result_id NUMBER(38,0) NOT NULL, + salary_acct_emp_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + operator NUMBER(38,0) NOT NULL, + operate_time DATE NOT NULL, + delete_type NUMBER NOT NULL, + update_time DATE NOT NULL +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202306020403.sql b/resource/sqlupgrade/Oracle/sql202306020403.sql new file mode 100644 index 000000000..8b0142f47 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202306020403.sql @@ -0,0 +1,2 @@ +alter table HRSA_SALARY_ITEM add SORTED_INDEX number(11) null +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202306020603.sql b/resource/sqlupgrade/Oracle/sql202306020603.sql new file mode 100644 index 000000000..c1f89f030 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202306020603.sql @@ -0,0 +1,7 @@ +ALTER TABLE HRSA_SALARY_TEMPLATE ADD ( + SMS_STATUS number(11) NULL +) +/ + +UPDATE HRSA_SALARY_TEMPLATE SET MSG_STATUS = 1 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202306080103.sql b/resource/sqlupgrade/Oracle/sql202306080103.sql new file mode 100644 index 000000000..a558468ef --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202306080103.sql @@ -0,0 +1,2 @@ +alter table HRSA_TAX_AGENT add SORTED_INDEX number(11) null +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202306200203.sql b/resource/sqlupgrade/Oracle/sql202306200203.sql new file mode 100644 index 000000000..c84e3bef0 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202306200203.sql @@ -0,0 +1,4 @@ +update hrsa_formula set formula = '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}' , formulaRunScript='salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction' where id = 1651740238860 +/ +update hrsa_formula_var set delete_type = 1 where id = 1651740241717 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202205100201.sql b/resource/sqlupgrade/SQLServer/sql202205100201.sql new file mode 100644 index 000000000..7e03d8f10 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202205100201.sql @@ -0,0 +1,340 @@ +delete from HtmlLabelIndex where id = 537997 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 537997,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537997 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537997 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537997 as indexid ,'Salary management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537997 as indexid ,'н' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 537998 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 537998,'ҵнʸ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537998 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537998 as indexid ,'ҵнʸ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537998 as indexid ,'My salary and benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537998 as indexid ,'ҵнY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 537996 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 537996,'˰۽' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537996 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537996 as indexid ,'˰۽' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537996 as indexid ,'Individual income tax withholding agent' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537996 as indexid ,'Ux' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 537999 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 537999,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537999 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537999 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537999 as indexid ,'Social security benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 537999 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538000 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538000,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538000 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538000 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538000 as indexid ,'Social security welfare scheme' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538000 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538001 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538001,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538001 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538001 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538001 as indexid ,'Social security benefit file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538001 as indexid ,'籣n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538002 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538002,'籣̨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538002 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538002 as indexid ,'籣̨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538002 as indexid ,'Social security benefit account' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538002 as indexid ,'籣̨~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538003 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538003,'нĿ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538003 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538003 as indexid ,'нĿ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538003 as indexid ,'Salary item management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538003 as indexid ,'нYĿ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538004 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538004,'нʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538004 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538004 as indexid ,'нʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538004 as indexid ,'Salary file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538004 as indexid ,'нYn' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538005 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538005,'ݲɼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538005 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538005 as indexid ,'ݲɼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538005 as indexid ,'data acquisition' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538005 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538006 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538006,'ۼרӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538006 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538006 as indexid ,'ۼרӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538006 as indexid ,'Accumulated special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538006 as indexid ,'Ӌ헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538007 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538007,'˰۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538007 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538007 as indexid ,'˰۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538007 as indexid ,'Other tax exempt deductions' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538007 as indexid ,'ⶐ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538008 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538008,'ۼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538008 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538008 as indexid ,'ۼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538008 as indexid ,'Cumulative situation in previous periods' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538008 as indexid ,'Ӌr' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538009 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538009,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538009 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538009 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538009 as indexid ,'Attendance reference' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538009 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538010 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538010,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538010 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538010 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538010 as indexid ,'Salary a / C set' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538010 as indexid ,'нY~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538011 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538011,'нʺ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538011 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538011 as indexid ,'нʺ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538011 as indexid ,'Salary accounting' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538011 as indexid ,'нY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538012 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538012,'ʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538012 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538012 as indexid ,'ʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538012 as indexid ,'Payroll payment' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538012 as indexid ,'Yΰl' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538013 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538013,'˰걨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538013 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538013 as indexid ,'˰걨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538013 as indexid ,'Individual income tax return' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538013 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 538014 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 538014,'˰˰ʱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538014 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538014 as indexid ,'˰˰ʱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538014 as indexid ,'Individual income tax rate table' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 538014 as indexid ,'ʱ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202205100402.sql b/resource/sqlupgrade/SQLServer/sql202205100402.sql new file mode 100644 index 000000000..c15d0ae76 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202205100402.sql @@ -0,0 +1,197 @@ +Delete from LeftMenuInfo where id=100118 +GO +Delete from LeftMenuConfig where infoid=100118 +GO +EXECUTE LMConfig_U_ByInfoInsert 1,0,-1 +GO +EXECUTE LMInfo_Insert 100118,537997,NULL,NULL,1,0,-1,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100118 +GO + +Delete from LeftMenuInfo where id=100132 +GO +Delete from LeftMenuConfig where infoid=100132 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,5 +GO +EXECUTE LMInfo_Insert 100132,538011,'','',2,100118,5,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/calculate' where id = 100132 +GO + +Delete from LeftMenuInfo where id=100125 +GO +Delete from LeftMenuConfig where infoid=100125 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,2 +GO +EXECUTE LMInfo_Insert 100125,538004,'','',2,100118,2,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100125 +GO + +Delete from LeftMenuInfo where id=100130 +GO +Delete from LeftMenuConfig where infoid=100130 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100126,0 +GO +EXECUTE LMInfo_Insert 100130,538009,'','',2,100126,0,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/attendance' where id = 100130 +GO + +Delete from LeftMenuInfo where id=100129 +GO +Delete from LeftMenuConfig where infoid=100129 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100126,0 +GO +EXECUTE LMInfo_Insert 100129,538008,'','',2,100126,0,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumSituation' where id = 100129 +GO + +Delete from LeftMenuInfo where id=100120 +GO +Delete from LeftMenuConfig where infoid=100120 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,0 +GO +EXECUTE LMInfo_Insert 100120,537999,'','',2,100118,0,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100120 +GO + +Delete from LeftMenuInfo where id=100123 +GO +Delete from LeftMenuConfig where infoid=100123 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100120,1 +GO +EXECUTE LMInfo_Insert 100123,538002,'','',2,100120,1,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/standingBook' where id = 100123 +GO + +Delete from LeftMenuInfo where id=100122 +GO +Delete from LeftMenuConfig where infoid=100122 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100120,0 +GO +EXECUTE LMInfo_Insert 100122,538001,'','',2,100120,0,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/archives' where id = 100122 +GO + +Delete from LeftMenuInfo where id=100135 +GO +Delete from LeftMenuConfig where infoid=100135 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,8 +GO +EXECUTE LMInfo_Insert 100135,537996,'','',2,100118,8,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/taxAgent' where id = 100135 +GO + +Delete from LeftMenuInfo where id=100121 +GO +Delete from LeftMenuConfig where infoid=100121 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100120,-1 +GO +EXECUTE LMInfo_Insert 100121,538000,'','',2,100120,-1,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/programme' where id = 100121 +GO + +Delete from LeftMenuInfo where id=100126 +GO +Delete from LeftMenuConfig where infoid=100126 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,3 +GO +EXECUTE LMInfo_Insert 100126,538005,'','',2,100118,3,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100126 +GO + +Delete from LeftMenuInfo where id=100127 +GO +Delete from LeftMenuConfig where infoid=100127 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100126,-1 +GO +EXECUTE LMInfo_Insert 100127,538006,'','',2,100126,-1,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumDeduct' where id = 100127 +GO + +Delete from LeftMenuInfo where id=100133 +GO +Delete from LeftMenuConfig where infoid=100133 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,6 +GO +EXECUTE LMInfo_Insert 100133,538012,'','',2,100118,6,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/payroll' where id = 100133 +GO + +Delete from LeftMenuInfo where id=100128 +GO +Delete from LeftMenuConfig where infoid=100128 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100126,0 +GO +EXECUTE LMInfo_Insert 100128,538007,'','',2,100126,0,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/otherDeduct' where id = 100128 +GO + +Delete from LeftMenuInfo where id=100119 +GO +Delete from LeftMenuConfig where infoid=100119 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,-1 +GO +EXECUTE LMInfo_Insert 100119,537998,'','',2,100118,-1,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/mySalary' where id = 100119 +GO + +Delete from LeftMenuInfo where id=100131 +GO +Delete from LeftMenuConfig where infoid=100131 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,4 +GO +EXECUTE LMInfo_Insert 100131,538010,'','',2,100118,4,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/ledger' where id = 100131 +GO + +Delete from LeftMenuInfo where id=100124 +GO +Delete from LeftMenuConfig where infoid=100124 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,1 +GO +EXECUTE LMInfo_Insert 100124,538003,'','',2,100118,1,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryItem' where id = 100124 +GO + +Delete from LeftMenuInfo where id=100134 +GO +Delete from LeftMenuConfig where infoid=100134 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,7 +GO +EXECUTE LMInfo_Insert 100134,538013,'','',2,100118,7,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/declare' where id = 100134 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202205130903.sql b/resource/sqlupgrade/SQLServer/sql202205130903.sql new file mode 100644 index 000000000..949f4c129 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202205130903.sql @@ -0,0 +1,2548 @@ +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_acct_result_temp]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [calculate_key] [varchar](50) NOT NULL CONSTRAINT [DF__hrsa_acct__calcu__6A4606AC] DEFAULT (''), + [salary_sob_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_acct__salar__6B3A2AE5] DEFAULT ('0'), + [salary_acct_emp_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_acct__salar__6C2E4F1E] DEFAULT ('0'), + [salary_acct_record_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_acct__salar__6D227357] DEFAULT ('0'), + [employee_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_acct__emplo__6E169790] DEFAULT ('0'), + [tax_agent_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_acct__tax_a__6F0ABBC9] DEFAULT ('0'), + [salary_item_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_acct__salar__6FFEE002] DEFAULT ('0'), + [result_value] [varchar](1000) NOT NULL CONSTRAINT [DF__hrsa_acct__resul__70F3043B] DEFAULT (''), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_acct__creat__71E72874] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_acct__creat__72DB4CAD] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_acct__updat__73CF70E6] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_acct__delet__74C3951F] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_acct__tenan__75B7B958] DEFAULT (''), + CONSTRAINT [PK__hrsa_acc__3213E83F98FE0324] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_add_up_deduction]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [employee_id] [bigint] NOT NULL, + [tax_agent_id] [bigint] NOT NULL, + [declare_month] [datetime] NOT NULL CONSTRAINT [DF__hrsa_add___decla__5F7E5F76] DEFAULT (getdate()), + [add_up_child_education] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__607283AF] DEFAULT (''), + [add_up_continuing_education] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__6166A7E8] DEFAULT (''), + [add_up_housing_loan_interest] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__625ACC21] DEFAULT (''), + [add_up_housing_rent] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__634EF05A] DEFAULT (''), + [add_up_support_elderly] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__64431493] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_add___creat__653738CC] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_add___updat__662B5D05] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_add___creat__671F813E] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_add___delet__6813A577] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_add___tenan__6907C9B0] DEFAULT (''), + CONSTRAINT [PK__hrsa_add__3213E83F754CE0DB] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_add_up_situation]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [employee_id] [bigint] NOT NULL, + [tax_agent_id] [bigint] NOT NULL, + [tax_year_month] [datetime] NOT NULL CONSTRAINT [DF__hrsa_add___tax_y__6BE4365B] DEFAULT (getdate()), + [year] [bigint] NOT NULL CONSTRAINT [DF__hrsa_add_u__year__6CD85A94] DEFAULT ('0'), + [add_up_income] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__6DCC7ECD] DEFAULT (''), + [add_up_subtraction] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__6EC0A306] DEFAULT (''), + [add_up_social_security_total] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__6FB4C73F] DEFAULT (''), + [add_up_accumulation_fund_total] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__70A8EB78] DEFAULT (''), + [add_up_child_education] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__719D0FB1] DEFAULT (''), + [add_up_continuing_education] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__729133EA] DEFAULT (''), + [add_up_housing_loan_interest] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__73855823] DEFAULT (''), + [add_up_housing_rent] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__74797C5C] DEFAULT (''), + [add_up_support_elderly] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__756DA095] DEFAULT (''), + [add_up_enterprise_and_other] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__7661C4CE] DEFAULT (''), + [add_up_other_deduction] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__7755E907] DEFAULT ('0.00000'), + [add_up_tax_exempt_income] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__784A0D40] DEFAULT (''), + [add_up_allowed_donation] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__793E3179] DEFAULT (''), + [add_up_advance_tax] [varchar](255) NULL CONSTRAINT [DF__hrsa_add___add_u__7A3255B2] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_add___creat__7B2679EB] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_add___updat__7C1A9E24] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_add___creat__7D0EC25D] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_add___delet__7E02E696] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_add___tenan__7EF70ACF] DEFAULT (''), + CONSTRAINT [PK__hrsa_add__3213E83FF1708F0E] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_attend_quote]( + [id] [bigint] NOT NULL, + [salary_year_month] [datetime] NOT NULL, + [year] [int] NOT NULL CONSTRAINT [DF__hrsa_atten__year__7F611F23] DEFAULT ('0'), + [month] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__month__0055435C] DEFAULT ('0'), + [salary_sob_id] [bigint] NOT NULL, + [source_type] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__sourc__01496795] DEFAULT ('0'), + [salary_accounting_status] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__salar__023D8BCE] DEFAULT ('0'), + [attend_cycle] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_atte__atten__0331B007] DEFAULT (''), + [salary_cycle] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_atte__salar__0425D440] DEFAULT (''), + [description] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_atte__descr__0519F879] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__060E1CB2] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__updat__070240EB] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__07F66524] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__delet__08EA895D] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_atte__tenan__09DEAD96] DEFAULT (''), + CONSTRAINT [PK__hrsa_att__3213E83FDCC28845] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_attend_quote_data]( + [id] [bigint] NOT NULL, + [employee_id] [bigint] NOT NULL, + [attend_quote_id] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__0CBB1A41] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__updat__0DAF3E7A] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__0EA362B3] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__delet__0F9786EC] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_atte__tenan__108BAB25] DEFAULT (''), + CONSTRAINT [PK__hrsa_att__3213E83F1A2D1D25] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_attend_quote_data_value]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [employee_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_atte__emplo__136817D0] DEFAULT ('0'), + [attend_quote_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_atte__atten__145C3C09] DEFAULT ('0'), + [attend_quote_data_id] [bigint] NOT NULL, + [attend_quote_field_id] [bigint] NOT NULL, + [data_value] [varchar](250) NOT NULL, + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__15506042] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__updat__1644847B] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__1738A8B4] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__delet__182CCCED] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_atte__tenan__1920F126] DEFAULT (''), + CONSTRAINT [PK__hrsa_att__3213E83F6335B55A] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_attend_quote_field]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [field_name] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_atte__field__1BFD5DD1] DEFAULT (''), + [source_type] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__sourc__1CF1820A] DEFAULT ('0'), + [field_type] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__field__1DE5A643] DEFAULT ('0'), + [enable_status] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__enabl__1ED9CA7C] DEFAULT ('0'), + [code] [varchar](50) NOT NULL CONSTRAINT [DF__hrsa_atten__code__1FCDEEB5] DEFAULT (''), + [description] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_atte__descr__20C212EE] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__21B63727] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__updat__22AA5B60] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__239E7F99] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__delet__2492A3D2] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_atte__tenan__2586C80B] DEFAULT (''), + CONSTRAINT [PK__hrsa_att__3213E83FF3039E8C] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_attend_quote_sync_set]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [source_type] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__sourc__286334B6] DEFAULT ('0'), + [current_setting_content] [varchar](4000) NOT NULL CONSTRAINT [DF__hrsa_atte__curre__295758EF] DEFAULT (''), + [default_setting_content] [varchar](4000) NOT NULL CONSTRAINT [DF__hrsa_atte__defau__2A4B7D28] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__2B3FA161] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_atte__updat__2C33C59A] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_atte__creat__2D27E9D3] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_atte__delet__2E1C0E0C] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_atte__tenan__2F103245] DEFAULT (''), + CONSTRAINT [PK__hrsa_att__3213E83F9F9A93E6] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_bill_batch]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [bill_month] [varchar](30) NOT NULL, + [bill_status] [int] NOT NULL, + [social_num] [int] NULL CONSTRAINT [DF__hrsa_bill__socia__0D3A3D2E] DEFAULT ((0)), + [fund_num] [int] NULL CONSTRAINT [DF__hrsa_bill__fund___0E2E6167] DEFAULT ((0)), + [other_num] [int] NULL CONSTRAINT [DF__hrsa_bill__other__0F2285A0] DEFAULT ((0)), + [social_pay] [varchar](4000) NULL, + [fund_pay] [varchar](4000) NULL, + [other_pay] [varchar](4000) NULL, + [accountant] [varchar](200) NOT NULL, + [remarks] [varchar](60) NULL, + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_bill__creat__1016A9D9] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_bill__creat__110ACE12] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_bill__updat__11FEF24B] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_bill__delet__12F31684] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_bill__tenan__13E73ABD] DEFAULT (''), + CONSTRAINT [PK__hrsa_bil__3213E83F11B70E7B] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_bill_batch_encdata]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [tablename] [varchar](50) NOT NULL, + [fieldname] [varchar](50) NOT NULL, + [enc_value] [varchar](4000) NOT NULL, + [skey] [varchar](4000) NOT NULL, + [crc] [varchar](4000) NULL, + [creater] [bigint] NULL, + [created] [varchar](50) NULL, + [MODIFIER] [bigint] NULL, + [modified] [varchar](50) NULL, + [tenant_key] [varchar](10) NULL, + CONSTRAINT [PK__hrsa_bil__3213E83FA94B00E2] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_bill_detail]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [employee_id] [bigint] NOT NULL, + [bill_month] [varchar](30) NOT NULL, + [bill_status] [int] NOT NULL, + [payment_status] [int] NOT NULL, + [supplementary_month] [varchar](50) NULL, + [supplementary_projects] [varchar](50) NULL, + [resource_from] [int] NOT NULL, + [social_pay_org] [int] NULL, + [social_account] [varchar](50) NULL, + [social_scheme_id] [bigint] NULL, + [social_payment_base_string] [varchar](512) NULL, + [fund_pay_org] [int] NULL, + [fund_account] [varchar](50) NULL, + [supplement_fund_account] [varchar](50) NULL, + [fund_scheme_id] [int] NULL, + [fund_payment_base_string] [varchar](512) NULL, + [other_pay_org] [int] NULL, + [other_scheme_id] [bigint] NULL, + [other_payment_base_string] [varchar](512) NULL, + [social_per_json] [varchar](512) NULL, + [social_per_sum] [varchar](512) NULL, + [fund_per_json] [varchar](512) NULL, + [fund_per_sum] [varchar](512) NULL, + [other_per_json] [varchar](512) NULL, + [other_per_sum] [varchar](512) NULL, + [per_sum] [varchar](512) NULL, + [social_com_json] [varchar](512) NULL, + [social_com_sum] [varchar](512) NULL, + [fund_com_json] [varchar](512) NULL, + [fund_com_sum] [varchar](512) NULL, + [other_com_json] [varchar](512) NULL, + [other_com_sum] [varchar](512) NULL, + [com_sum] [varchar](512) NULL, + [social_sum] [varchar](512) NULL, + [fund_sum] [varchar](512) NULL, + [other_sum] [varchar](512) NULL, + [total] [varchar](512) NULL, + [creator] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_bil__3213E83F75293F9D] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_bill_detail_temp]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [employee_id] [bigint] NOT NULL, + [bill_month] [varchar](30) NOT NULL, + [bill_status] [int] NOT NULL, + [payment_status] [int] NOT NULL, + [supplementary_month] [varchar](50) NULL, + [supplementary_projects] [varchar](50) NULL, + [resource_from] [int] NOT NULL, + [social_pay_org] [int] NULL, + [social_account] [varchar](50) NULL, + [social_scheme_id] [bigint] NULL, + [social_payment_base_string] [varchar](512) NULL, + [fund_pay_org] [int] NULL, + [fund_account] [varchar](50) NULL, + [supplement_fund_account] [varchar](50) NULL, + [fund_scheme_id] [bigint] NULL, + [fund_payment_base_string] [varchar](512) NULL, + [other_pay_org] [int] NULL, + [other_scheme_id] [int] NULL, + [other_payment_base_string] [varchar](512) NULL, + [social_per_json] [varchar](512) NULL, + [social_per_sum] [varchar](512) NULL, + [fund_per_json] [varchar](512) NULL, + [fund_per_sum] [varchar](512) NULL, + [other_per_json] [varchar](512) NULL, + [other_per_sum] [varchar](512) NULL, + [per_sum] [varchar](512) NULL, + [social_com_json] [varchar](512) NULL, + [social_com_sum] [varchar](512) NULL, + [fund_com_json] [varchar](512) NULL, + [fund_com_sum] [varchar](512) NULL, + [other_com_json] [varchar](512) NULL, + [other_com_sum] [varchar](512) NULL, + [com_sum] [varchar](512) NULL, + [social_sum] [varchar](512) NULL, + [fund_sum] [varchar](512) NULL, + [other_sum] [varchar](512) NULL, + [total] [varchar](512) NULL, + [creator] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_bil__3213E83F976CD15A] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_bill_inspect]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [employee_id] [bigint] NOT NULL, + [bill_month] [varchar](30) NOT NULL, + [payment_status] [int] NOT NULL, + [supplementary_month] [varchar](50) NULL, + [supplementary_projects] [varchar](50) NULL, + [inspect_status] [int] NOT NULL, + [creator] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_bil__3213E83F4F416886] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_check_result]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_acct_record_id] [bigint] NOT NULL, + [salary_check_rule_id] [bigint] NOT NULL, + [formula_id] [bigint] NOT NULL, + [ignore_type] [int] NOT NULL, + [creator] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_che__3213E83F9C546AE2] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_check_result_record]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_acct_record_id] [bigint] NOT NULL, + [salary_check_rule_id] [bigint] NOT NULL, + [formula_id] [bigint] NOT NULL, + [check_result_id] [bigint] NOT NULL, + [salary_acct_emp_id] [bigint] NOT NULL, + [employee_id] [bigint] NOT NULL, + [creator] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_che__3213E83F8CCEE0D3] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_ck_result_detail_temp]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_acct_emp_id] [bigint] NOT NULL, + [salary_acct_record_id] [bigint] NOT NULL, + [employee_id] [bigint] NOT NULL, + [salary_check_rule_id] [bigint] NOT NULL, + [formula_id] [bigint] NOT NULL, + [creator] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + [calculate_key] [varchar](50) NOT NULL, + CONSTRAINT [PK__hrsa_ck___3213E83F363196B8] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_excel_acct_result]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_sob_id] [bigint] NOT NULL, + [salary_acct_emp_id] [bigint] NOT NULL, + [salary_acct_record_id] [bigint] NOT NULL, + [employee_id] [bigint] NOT NULL, + [salary_item_id] [bigint] NOT NULL, + [result_value] [varchar](1000) NOT NULL, + [creator] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + [tax_agent_id] [bigint] NOT NULL, + CONSTRAINT [PK__hrsa_exc__3213E83FC4CBA4B0] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_formula]( + [id] [bigint] NOT NULL, + [name] [varchar](255) NOT NULL, + [description] [varchar](255) NULL CONSTRAINT [DF__hrsa_form__descr__40C4CE2C] DEFAULT (NULL), + [module] [varchar](255) NOT NULL, + [use_for] [varchar](255) NULL CONSTRAINT [DF__hrsa_form__use_f__41B8F265] DEFAULT (NULL), + [reference_type] [varchar](255) NULL CONSTRAINT [DF__hrsa_form__refer__42AD169E] DEFAULT (NULL), + [return_type] [varchar](255) NOT NULL, + [validate_type] [varchar](255) NOT NULL, + [extend_param] [varchar](255) NULL CONSTRAINT [DF__hrsa_form__exten__43A13AD7] DEFAULT (NULL), + [formula] [varchar](4000) NOT NULL, + [formulaRunScript] [varchar](4000) NOT NULL, + [creator] [bigint] NOT NULL, + [delete_type] [int] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + CONSTRAINT [PK__hrsa_for__3213E83FAFC8E740] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_formula_var]( + [id] [bigint] NOT NULL, + [name] [varchar](255) NOT NULL, + [formula_id] [bigint] NOT NULL, + [field_id] [varchar](255) NOT NULL, + [field_name] [varchar](500) NOT NULL, + [field_type] [varchar](255) NOT NULL, + [source] [varchar](255) NOT NULL, + [order_index] [int] NOT NULL, + [creator] [bigint] NOT NULL, + [delete_type] [int] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + CONSTRAINT [PK__hrsa_for__3213E83FB8D3F2C3] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_fund_archives]( + [id] [int] IDENTITY(1,1) NOT NULL, + [employee_id] [int] NOT NULL, + [non_payment] [int] NULL, + [welfare_type] [int] NOT NULL, + [fund_start_time] [varchar](20) NULL, + [fund_end_time] [varchar](20) NULL, + [fund_scheme_id] [int] NULL, + [fund_account] [varchar](50) NULL, + [supplement_fund_account] [varchar](50) NULL, + [payment_organization] [int] NULL, + [under_take] [int] NULL, + [fund_payment_base_string] [varchar](4000) NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [int] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_fun__3213E83F58E4771D] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_insurance_category]( + [id] [bigint] NOT NULL, + [insurance_name] [varchar](50) NOT NULL, + [welfare_type] [int] NOT NULL, + [is_use] [int] NOT NULL CONSTRAINT [DF__hrsa_insu__is_us__17F7C2C3] DEFAULT ('1'), + [payment_scope] [varchar](10) NULL, + [data_type] [int] NOT NULL CONSTRAINT [DF__hrsa_insu__data___18EBE6FC] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_insu__creat__19E00B35] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_insu__updat__1AD42F6E] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_insu__creat__1BC853A7] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_insu__delet__1CBC77E0] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_insu__tenan__1DB09C19] DEFAULT (''), + CONSTRAINT [PK__hrsa_ins__3213E83FE9A41C6E] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_other_archives]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [employee_id] [bigint] NOT NULL, + [non_payment] [int] NULL, + [welfare_type] [int] NOT NULL, + [other_start_time] [varchar](20) NULL, + [other_end_time] [varchar](20) NULL, + [other_scheme_id] [bigint] NULL, + [payment_organization] [int] NULL, + [under_take] [int] NULL, + [other_payment_base_string] [varchar](4000) NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [bigint] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_oth__3213E83FB9A7B1A7] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_other_deduction]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [employee_id] [bigint] NOT NULL, + [tax_agent_id] [bigint] NOT NULL, + [declare_month] [datetime] NOT NULL CONSTRAINT [DF__hrsa_othe__decla__01D3777A] DEFAULT (getdate()), + [business_healthy_insurance] [varchar](255) NULL CONSTRAINT [DF__hrsa_othe__busin__02C79BB3] DEFAULT ('0.00000'), + [tax_delay_endowment_insurance] [varchar](255) NULL CONSTRAINT [DF__hrsa_othe__tax_d__03BBBFEC] DEFAULT (''), + [other_deduction] [varchar](255) NULL CONSTRAINT [DF__hrsa_othe__other__04AFE425] DEFAULT (''), + [deduction_allowed_donation] [varchar](255) NULL CONSTRAINT [DF__hrsa_othe__deduc__05A4085E] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_othe__creat__06982C97] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_othe__updat__078C50D0] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_othe__creat__08807509] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_othe__delet__09749942] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_othe__tenan__0A68BD7B] DEFAULT (''), + CONSTRAINT [PK__hrsa_oth__3213E83F0A76309A] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_acct_emp]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_acct_record_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__517A58E2] DEFAULT ('0'), + [salary_sob_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__526E7D1B] DEFAULT ('0'), + [employee_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__emplo__5362A154] DEFAULT ('0'), + [tax_agent_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__tax_a__5456C58D] DEFAULT ('0'), + [salary_month] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__554AE9C6] DEFAULT ('0000-01-01'), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__563F0DFF] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__57333238] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__58275671] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__591B7AAA] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__5A0F9EE3] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83F1984A7A3] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_acct_record]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_month] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__451481FD] DEFAULT ('0000-01-01'), + [tax_cycle] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__tax_c__4608A636] DEFAULT ('0000-01-01'), + [salary_sob_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__46FCCA6F] DEFAULT ('0'), + [status] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__statu__47F0EEA8] DEFAULT ('1'), + [acct_times] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__acct___48E512E1] DEFAULT ('0'), + [description] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sala__descr__49D9371A] DEFAULT (''), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__4ACD5B53] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__4BC17F8C] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__4CB5A3C5] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__4DA9C7FE] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__4E9DEC37] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83F0DF292EA] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_acct_result]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_sob_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__5CEC0B8E] DEFAULT ('0'), + [salary_acct_emp_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__5DE02FC7] DEFAULT ('0'), + [salary_acct_record_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__5ED45400] DEFAULT ('0'), + [employee_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__emplo__5FC87839] DEFAULT ('0'), + [tax_agent_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__tax_a__60BC9C72] DEFAULT ('0'), + [salary_item_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__61B0C0AB] DEFAULT ('0'), + [result_value] [varchar](1000) NOT NULL CONSTRAINT [DF__hrsa_sala__resul__62A4E4E4] DEFAULT (''), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__6399091D] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__648D2D56] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__6581518F] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__667575C8] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__67699A01] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83F855BF743] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_archive]( + [id] [bigint] NOT NULL, + [employee_id] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__3D5E519C] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__3E5275D5] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__3F469A0E] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__403ABE47] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__412EE280] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83F7203A9DD] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_archive_dimission]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [dimission_time_interval] [varchar](20) NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [bigint] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_sal__3213E83FE557B23A] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_archive_item]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_archive_id] [bigint] NOT NULL, + [employee_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__emplo__4AB84CBA] DEFAULT ('0'), + [effective_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__effec__4BAC70F3] DEFAULT (getdate()), + [adjust_reason] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sala__adjus__4CA0952C] DEFAULT (''), + [salary_item_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__4D94B965] DEFAULT ('0'), + [item_value] [varchar](200) NOT NULL CONSTRAINT [DF__hrsa_sala__item___4E88DD9E] DEFAULT (''), + [description] [varchar](200) NOT NULL CONSTRAINT [DF__hrsa_sala__descr__4F7D01D7] DEFAULT (''), + [operator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__opera__50712610] DEFAULT ('0'), + [operate_time] [datetime] NULL CONSTRAINT [DF__hrsa_sala__opera__51654A49] DEFAULT (NULL), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__52596E82] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__534D92BB] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__5441B6F4] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__5535DB2D] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__5629FF66] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83F9832BF34] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_archive_tax_agent]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_archive_id] [bigint] NOT NULL, + [employee_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__emplo__59066C11] DEFAULT ('0'), + [effective_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__effec__59FA904A] DEFAULT (getdate()), + [adjust_reason] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sala__adjus__5AEEB483] DEFAULT (''), + [tax_agent_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__tax_a__5BE2D8BC] DEFAULT ('0'), + [operator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__opera__5CD6FCF5] DEFAULT ('0'), + [operate_time] [datetime] NULL CONSTRAINT [DF__hrsa_sala__opera__5DCB212E] DEFAULT (NULL), + [description] [varchar](200) NULL CONSTRAINT [DF__hrsa_sala__descr__5EBF4567] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__5FB369A0] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__60A78DD9] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__619BB212] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__628FD64B] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__6383FA84] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83F055B7B1F] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_item]( + [id] [bigint] NOT NULL, + [name] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_salar__name__4178FB43] DEFAULT (''), + [code] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_salar__code__426D1F7C] DEFAULT (''), + [system_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__syste__436143B5] DEFAULT ('0'), + [sys_salary_item_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__sys_s__445567EE] DEFAULT ('0'), + [category] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__categ__45498C27] DEFAULT ('7'), + [item_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__item___463DB060] DEFAULT ('1'), + [use_default] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__use_d__4731D499] DEFAULT ('0'), + [use_in_employee_salary] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__use_i__4825F8D2] DEFAULT ('0'), + [rounding_mode] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__round__491A1D0B] DEFAULT ('1'), + [pattern] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__patte__4A0E4144] DEFAULT ('5'), + [value_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__value__4B02657D] DEFAULT ('1'), + [datasource] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__datas__4BF689B6] DEFAULT ('0'), + [formula_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__formu__4CEAADEF] DEFAULT ('0'), + [description] [varchar](1000) NOT NULL CONSTRAINT [DF__hrsa_sala__descr__4DDED228] DEFAULT (''), + [can_edit] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__can_e__4ED2F661] DEFAULT ('1'), + [can_delete] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__can_d__4FC71A9A] DEFAULT ('1'), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__50BB3ED3] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__51AF630C] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__52A38745] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__5397AB7E] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__548BCFB7] DEFAULT (getdate()), + [data_type] [varchar](20) NOT NULL, + CONSTRAINT [PK__hrsa_sal__3213E83F0EFFA183] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_send]( + [id] [bigint] NOT NULL, + [salary_month] [datetime] NOT NULL, + [salary_accounting_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__6660672F] DEFAULT ('0'), + [salary_sob_id] [bigint] NOT NULL, + [send_num] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__send___67548B68] DEFAULT ('0'), + [send_total] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__send___6848AFA1] DEFAULT ('0'), + [last_send_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__last___693CD3DA] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__6A30F813] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__6B251C4C] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__6C194085] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__6D0D64BE] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__6E0188F7] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83F5083B115] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_send_info]( + [id] [bigint] NOT NULL, + [salary_send_id] [bigint] NOT NULL, + [salary_month] [datetime] NOT NULL, + [salary_acct_record_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__70DDF5A2] DEFAULT ('0'), + [tax_agent_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__tax_a__71D219DB] DEFAULT ('0'), + [employee_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__emplo__72C63E14] DEFAULT ('0'), + [send_status] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__send___73BA624D] DEFAULT ('0'), + [send_time] [datetime] NULL CONSTRAINT [DF__hrsa_sala__send___74AE8686] DEFAULT (NULL), + [salary_template] [text] NULL, + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__75A2AABF] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__7696CEF8] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__778AF331] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__787F176A] DEFAULT ('0'), + [tenant_key] [varchar](10) NULL CONSTRAINT [DF__hrsa_sala__tenan__79733BA3] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83F9E9C15DE] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_sob]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [name] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_salar__name__6C635948] DEFAULT (''), + [income_category] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__incom__6D577D81] DEFAULT ('1'), + [salary_cycle_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__6E4BA1BA] DEFAULT ('3'), + [salary_cycle_from_day] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__6F3FC5F3] DEFAULT ('1'), + [tax_cycle_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__tax_c__7033EA2C] DEFAULT ('3'), + [attend_cycle_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__atten__71280E65] DEFAULT ('3'), + [attend_cycle_from_day] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__atten__721C329E] DEFAULT ('1'), + [social_security_cycle_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__socia__731056D7] DEFAULT ('3'), + [disable] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__disab__74047B10] DEFAULT ('0'), + [description] [varchar](1000) NOT NULL CONSTRAINT [DF__hrsa_sala__descr__74F89F49] DEFAULT (''), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__75ECC382] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__76E0E7BB] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__77D50BF4] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__78C9302D] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__79BD5466] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83F909B5ECF] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_sob_adjust_rule]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_sob_id] [bigint] NOT NULL, + [salary_item_id] [bigint] NOT NULL, + [day_of_month] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__day_o__310D8950] DEFAULT ('0'), + [before_adjustment_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__befor__3201AD89] DEFAULT ('1'), + [after_adjustment_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__after__32F5D1C2] DEFAULT ('1'), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__33E9F5FB] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__34DE1A34] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__35D23E6D] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__36C662A6] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__37BA86DF] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83FFA5F62D1] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_sob_check_rule]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_sob_id] [bigint] NOT NULL, + [name] [varchar](100) NOT NULL, + [formula_id] [bigint] NOT NULL, + [description] [varchar](1000) NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [bigint] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_sal__3213E83F9D65480A] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_sob_default_item]( + [id] [bigint] NOT NULL, + [income_category] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__incom__1194DDF7] DEFAULT ('1'), + [sys_salary_item_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__sys_s__12890230] DEFAULT ('0'), + [can_edit] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__can_e__137D2669] DEFAULT ('1'), + [can_delete] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__can_d__14714AA2] DEFAULT ('1'), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__15656EDB] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__16599314] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__174DB74D] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__1841DB86] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__1935FFBF] DEFAULT (''), + [sob_default_item_group_id] [bigint] NOT NULL, + [sorted_index] [int] NOT NULL, + CONSTRAINT [PK__hrsa_sal__3213E83F6FE1E230] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_sob_emp_field]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_sob_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__1C126C6A] DEFAULT ('0'), + [field_code] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sala__field__1D0690A3] DEFAULT (''), + [sorted_index] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__sorte__1DFAB4DC] DEFAULT ('0'), + [can_delete] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__can_d__1EEED915] DEFAULT ('1'), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__1FE2FD4E] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__20D72187] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__21CB45C0] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__22BF69F9] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__23B38E32] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83FB29D77D7] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_sob_item]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_sob_id] [bigint] NOT NULL, + [salary_item_id] [bigint] NOT NULL, + [salary_sob_item_group_id] [bigint] NOT NULL, + [formula_id] [bigint] NOT NULL, + [sorted_index] [int] NOT NULL, + [description] [varchar](1000) NOT NULL DEFAULT (''), + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [bigint] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, +PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_sob_item_group]( + [id] [bigint] NOT NULL, + [salary_sob_id] [bigint] NOT NULL, + [name] [varchar](100) NOT NULL, + [sorted_index] [int] NOT NULL, + [description] [varchar](1000) NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [bigint] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_sal__3213E83F839D353B] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_sob_range]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [salary_sob_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__7C99C111] DEFAULT ('0'), + [target_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__targe__7D8DE54A] DEFAULT ('1'), + [target_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__targe__7E820983] DEFAULT ('0'), + [employee_status] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__emplo__7F762DBC] DEFAULT ('0'), + [include_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__inclu__006A51F5] DEFAULT ('1'), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__015E762E] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__02529A67] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__0346BEA0] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__043AE2D9] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__052F0712] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83FBDD1FEE0] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_salary_template]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [name] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_salar__name__7C4FA84E] DEFAULT (''), + [salary_sob_id] [bigint] NOT NULL, + [use_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__use_t__7D43CC87] DEFAULT ('0'), + [description] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sala__descr__7E37F0C0] DEFAULT (''), + [email_status] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__email__7F2C14F9] DEFAULT ('0'), + [send_email_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__send___00203932] DEFAULT ('0'), + [msg_status] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__msg_s__01145D6B] DEFAULT ('0'), + [theme] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sala__theme__020881A4] DEFAULT (''), + [background] [varchar](2000) NOT NULL CONSTRAINT [DF__hrsa_sala__backg__02FCA5DD] DEFAULT (''), + [text_content] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sala__text___03F0CA16] DEFAULT (''), + [text_content_position] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__text___04E4EE4F] DEFAULT ('0'), + [salary_item_null_status] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__05D91288] DEFAULT ('0'), + [salary_item_zero_status] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__salar__06CD36C1] DEFAULT ('0'), + [salary_item_setting] [text] NOT NULL, + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__07C15AFA] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sala__updat__08B57F33] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sala__creat__09A9A36C] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sala__delet__0A9DC7A5] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sala__tenan__0B91EBDE] DEFAULT (''), + CONSTRAINT [PK__hrsa_sal__3213E83FA7A62303] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_scheme_detail]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [insurance_id] [bigint] NOT NULL, + [primary_id] [bigint] NOT NULL, + [effective_time] [varchar](20) NULL, + [expiration_time] [varchar](20) NULL, + [is_payment] [int] NOT NULL CONSTRAINT [DF__hrsa_sche__is_pa__2A1672FE] DEFAULT ('1'), + [payment_scope] [int] NOT NULL, + [upper_limit] [varchar](1024) NULL, + [lower_limit] [varchar](1024) NULL, + [payment_proportion] [varchar](1024) NULL, + [fixed_cost] [varchar](1024) NULL, + [valid_num] [int] NULL CONSTRAINT [DF__hrsa_sche__valid__2B0A9737] DEFAULT ((2)), + [rentention_rule] [int] NULL, + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sche__creat__2BFEBB70] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sche__updat__2CF2DFA9] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sche__creat__2DE703E2] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sche__delet__2EDB281B] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sche__tenan__2FCF4C54] DEFAULT (''), + CONSTRAINT [PK__hrsa_sch__3213E83FC3CBA3DC] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_sob_default_emp_field]( + [id] [bigint] NOT NULL, + [field_code] [varchar](30) NOT NULL CONSTRAINT [DF__hrsa_sob___field__080B73BD] DEFAULT (''), + [sorted_index] [int] NOT NULL CONSTRAINT [DF__hrsa_sob___sorte__08FF97F6] DEFAULT ('0'), + [can_delete] [int] NOT NULL CONSTRAINT [DF__hrsa_sob___can_d__09F3BC2F] DEFAULT ('0'), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sob___creat__0AE7E068] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sob___creat__0BDC04A1] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sob___updat__0CD028DA] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sob___delet__0DC44D13] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sob___tenan__0EB8714C] DEFAULT (''), + CONSTRAINT [PK__hrsa_sob__3213E83F544D67E9] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_sob_default_item_group]( + [id] [bigint] NOT NULL, + [income_category] [tinyint] NOT NULL CONSTRAINT [DF__hrsa_sob___incom__1214CC3B] DEFAULT ('1'), + [name] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sob_d__name__1308F074] DEFAULT (''), + [sorted_index] [int] NOT NULL CONSTRAINT [DF__hrsa_sob___sorte__13FD14AD] DEFAULT ('0'), + [description] [varchar](1000) NOT NULL CONSTRAINT [DF__hrsa_sob___descr__14F138E6] DEFAULT (''), + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sob___creat__15E55D1F] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sob___delet__16D98158] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sob___tenan__17CDA591] DEFAULT (''), + CONSTRAINT [PK__hrsa_sob__3213E83F56BCC134] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_social_archives]( + [id] [int] IDENTITY(1,1) NOT NULL, + [employee_id] [int] NOT NULL, + [non_payment] [int] NULL, + [welfare_type] [int] NOT NULL, + [social_start_time] [varchar](20) NULL, + [social_end_time] [varchar](20) NULL, + [social_scheme_id] [int] NULL, + [social_account] [varchar](50) NULL, + [payment_organization] [int] NULL, + [under_take] [int] NULL, + [social_payment_base_string] [varchar](4000) NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [int] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_soc__3213E83F17F97C9A] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_social_archives_encdata]( + [id] [int] IDENTITY(1,1) NOT NULL, + [tablename] [varchar](50) NOT NULL, + [fieldname] [varchar](50) NOT NULL, + [enc_value] [varchar](4000) NOT NULL, + [skey] [varchar](4000) NOT NULL, + [crc] [varchar](4000) NULL, + [creater] [int] NULL, + [created] [varchar](50) NULL, + [MODIFIER] [int] NULL, + [modified] [varchar](50) NULL, + [tenant_key] [varchar](10) NULL, + CONSTRAINT [PK__hrsa_soc__3213E83F9CDA95A1] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_social_security_scheme]( + [id] [int] IDENTITY(1,1) NOT NULL, + [payment_area] [varchar](100) NOT NULL, + [payment_type] [int] NOT NULL DEFAULT ('1'), + [scheme_name] [varchar](100) NOT NULL, + [welfare_type] [int] NOT NULL, + [is_use] [int] NOT NULL DEFAULT ('1'), + [remarks] [varchar](30) NULL DEFAULT (''), + [create_time] [datetime] NOT NULL DEFAULT (getdate()), + [update_time] [datetime] NOT NULL DEFAULT (getdate()), + [creator] [int] NOT NULL DEFAULT ('0'), + [delete_type] [int] NOT NULL DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL DEFAULT (''), +PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_sys_salary_item]( + [id] [bigint] NOT NULL, + [name] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sys_s__name__57683C62] DEFAULT (''), + [code] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_sys_s__code__585C609B] DEFAULT (''), + [system_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___syste__595084D4] DEFAULT ('0'), + [category] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___categ__5A44A90D] DEFAULT ('7'), + [item_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___item___5B38CD46] DEFAULT ('1'), + [use_default] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___use_d__5C2CF17F] DEFAULT ('0'), + [use_in_employee_salary] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___use_i__5D2115B8] DEFAULT ('0'), + [rounding_mode] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___round__5E1539F1] DEFAULT ('1'), + [pattern] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___patte__5F095E2A] DEFAULT ('5'), + [value_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___value__5FFD8263] DEFAULT ('1'), + [datasource] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___datas__60F1A69C] DEFAULT ('0'), + [formula_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sys___formu__61E5CAD5] DEFAULT ('0'), + [description] [varchar](1000) NOT NULL CONSTRAINT [DF__hrsa_sys___descr__62D9EF0E] DEFAULT (''), + [can_edit] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___can_e__63CE1347] DEFAULT ('1'), + [can_delete] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___can_d__64C23780] DEFAULT ('1'), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_sys___creat__65B65BB9] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_sys___delet__66AA7FF2] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_sys___tenan__679EA42B] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sys___creat__6892C864] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_sys___updat__6986EC9D] DEFAULT (getdate()), + [data_type] [varchar](20) NOT NULL, + CONSTRAINT [PK__hrsa_sys__3213E83F40265439] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_sys_tax_rate_base]( + [id] [int] IDENTITY(1,1) NOT NULL, + [name] [varchar](100) NOT NULL, + [system_type] [int] NOT NULL, + [description] [varchar](100) NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [int] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_sys__3213E83FB932A396] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_sys_tax_rate_detail]( + [id] [int] IDENTITY(1,1) NOT NULL, + [base_id] [int] NOT NULL, + [index_num] [int] NOT NULL, + [income_lower_limit] [decimal](15, 5) NULL, + [income_upper_limit] [decimal](15, 5) NULL, + [duty_free_value] [decimal](15, 5) NULL, + [duty_free_rate] [decimal](15, 5) NULL, + [taxable_income_ll] [decimal](15, 5) NULL, + [taxable_income_ul] [decimal](15, 5) NOT NULL, + [tax_rate] [decimal](15, 5) NOT NULL, + [tax_deduction] [decimal](15, 5) NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [creator] [int] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + CONSTRAINT [PK__hrsa_sys__3213E83F199760C3] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_tax_agent]( + [id] [int] IDENTITY(1,1) NOT NULL, + [name] [varchar](100) NOT NULL DEFAULT (''), + [description] [varchar](100) NOT NULL DEFAULT (''), + [create_time] [datetime] NOT NULL DEFAULT (getdate()), + [update_time] [datetime] NOT NULL DEFAULT (getdate()), + [creator] [int] NOT NULL DEFAULT ('0'), + [delete_type] [int] NOT NULL DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL DEFAULT (''), +PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_tax_declaration]( + [id] [bigint] NOT NULL, + [salary_month] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___salar__274F14EC] DEFAULT ('0000-01-01'), + [tax_cycle] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___tax_c__28433925] DEFAULT ('0000-01-01'), + [tax_agent_id] [int] NOT NULL CONSTRAINT [DF__hrsa_tax___tax_a__29375D5E] DEFAULT ('0'), + [description] [varchar](1000) NOT NULL CONSTRAINT [DF__hrsa_tax___descr__2A2B8197] DEFAULT (''), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_tax___creat__2B1FA5D0] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___creat__2C13CA09] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___updat__2D07EE42] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_tax___delet__2DFC127B] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_tax___tenan__2EF036B4] DEFAULT (''), + CONSTRAINT [PK__hrsa_tax__3213E83FD035FA00] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_tax_declaration_detail]( + [id] [bigint] NOT NULL, + [tax_declaration_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_tax___tax_d__31CCA35F] DEFAULT ('0'), + [employee_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_tax___emplo__32C0C798] DEFAULT ('0'), + [field_code] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_tax___field__33B4EBD1] DEFAULT (''), + [field_value] [varchar](1000) NOT NULL CONSTRAINT [DF__hrsa_tax___field__34A9100A] DEFAULT (''), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_tax___creat__359D3443] DEFAULT ('0'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___creat__3691587C] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___updat__37857CB5] DEFAULT (getdate()), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_tax___delet__3879A0EE] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_tax___tenan__396DC527] DEFAULT (''), + CONSTRAINT [PK__hrsa_tax__3213E83F85996709] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_tax_rate_base]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [name] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_tax_r__name__43D64501] DEFAULT (''), + [system_type] [int] NOT NULL CONSTRAINT [DF__hrsa_tax___syste__44CA693A] DEFAULT ('0'), + [description] [varchar](100) NOT NULL CONSTRAINT [DF__hrsa_tax___descr__45BE8D73] DEFAULT (''), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___creat__46B2B1AC] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___updat__47A6D5E5] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_tax___creat__489AFA1E] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_tax___delet__498F1E57] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_tax___tenan__4A834290] DEFAULT (''), + CONSTRAINT [PK__hrsa_tax__3213E83F362744F7] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [hrsa_tax_rate_detail]( + [id] [bigint] IDENTITY(1,1) NOT NULL, + [base_id] [bigint] NOT NULL CONSTRAINT [DF__hrsa_tax___base___4D5FAF3B] DEFAULT ('0'), + [index_num] [int] NOT NULL CONSTRAINT [DF__hrsa_tax___index__4E53D374] DEFAULT ('0'), + [income_upper_limit] [decimal](15, 5) NULL CONSTRAINT [DF__hrsa_tax___incom__4F47F7AD] DEFAULT ('0.00000'), + [income_lower_limit] [decimal](15, 5) NULL CONSTRAINT [DF__hrsa_tax___incom__503C1BE6] DEFAULT ('0.00000'), + [duty_free_value] [decimal](15, 5) NULL CONSTRAINT [DF__hrsa_tax___duty___5130401F] DEFAULT ('0.00000'), + [duty_free_rate] [decimal](15, 5) NULL CONSTRAINT [DF__hrsa_tax___duty___52246458] DEFAULT ('0.00000'), + [taxable_income_ul] [decimal](15, 5) NULL CONSTRAINT [DF__hrsa_tax___taxab__53188891] DEFAULT ('0.00000'), + [taxable_income_ll] [decimal](15, 5) NOT NULL CONSTRAINT [DF__hrsa_tax___taxab__540CACCA] DEFAULT ('0.00000'), + [tax_rate] [decimal](15, 5) NOT NULL CONSTRAINT [DF__hrsa_tax___tax_r__5500D103] DEFAULT ('0.00000'), + [tax_deduction] [decimal](15, 5) NOT NULL CONSTRAINT [DF__hrsa_tax___tax_d__55F4F53C] DEFAULT ('0.00000'), + [create_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___creat__56E91975] DEFAULT (getdate()), + [update_time] [datetime] NOT NULL CONSTRAINT [DF__hrsa_tax___updat__57DD3DAE] DEFAULT (getdate()), + [creator] [bigint] NOT NULL CONSTRAINT [DF__hrsa_tax___creat__58D161E7] DEFAULT ('0'), + [delete_type] [int] NOT NULL CONSTRAINT [DF__hrsa_tax___delet__59C58620] DEFAULT ('0'), + [tenant_key] [varchar](10) NOT NULL CONSTRAINT [DF__hrsa_tax___tenan__5AB9AA59] DEFAULT (''), + CONSTRAINT [PK__hrsa_tax__3213E83FB7D41B39] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF +GO +ALTER TABLE [hrsa_bill_batch_encdata] ADD CONSTRAINT [DF__hrsa_bill_b__crc__41AE056D] DEFAULT (NULL) FOR [crc] +GO +ALTER TABLE [hrsa_bill_batch_encdata] ADD CONSTRAINT [DF__hrsa_bill__creat__42A229A6] DEFAULT (NULL) FOR [creater] +GO +ALTER TABLE [hrsa_bill_batch_encdata] ADD CONSTRAINT [DF__hrsa_bill__creat__43964DDF] DEFAULT (NULL) FOR [created] +GO +ALTER TABLE [hrsa_bill_batch_encdata] ADD CONSTRAINT [DF__hrsa_bill__MODIF__448A7218] DEFAULT (NULL) FOR [MODIFIER] +GO +ALTER TABLE [hrsa_bill_batch_encdata] ADD CONSTRAINT [DF__hrsa_bill__modif__457E9651] DEFAULT (NULL) FOR [modified] +GO +ALTER TABLE [hrsa_bill_batch_encdata] ADD CONSTRAINT [DF__hrsa_bill__tenan__4672BA8A] DEFAULT (NULL) FOR [tenant_key] +GO +ALTER TABLE [hrsa_bill_detail] ADD CONSTRAINT [DF__hrsa_bill__creat__16C3A768] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_bill_detail] ADD CONSTRAINT [DF__hrsa_bill__creat__17B7CBA1] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_bill_detail] ADD CONSTRAINT [DF__hrsa_bill__updat__18ABEFDA] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_bill_detail] ADD CONSTRAINT [DF__hrsa_bill__delet__19A01413] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_bill_detail] ADD CONSTRAINT [DF__hrsa_bill__tenan__1A94384C] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_bill_detail_temp] ADD CONSTRAINT [DF__hrsa_bill__creat__1D70A4F7] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_bill_detail_temp] ADD CONSTRAINT [DF__hrsa_bill__creat__1E64C930] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_bill_detail_temp] ADD CONSTRAINT [DF__hrsa_bill__updat__1F58ED69] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_bill_detail_temp] ADD CONSTRAINT [DF__hrsa_bill__delet__204D11A2] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_bill_detail_temp] ADD CONSTRAINT [DF__hrsa_bill__tenan__214135DB] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_bill_inspect] ADD CONSTRAINT [DF__hrsa_bill__creat__241DA286] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_bill_inspect] ADD CONSTRAINT [DF__hrsa_bill__creat__2511C6BF] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_bill_inspect] ADD CONSTRAINT [DF__hrsa_bill__updat__2605EAF8] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_bill_inspect] ADD CONSTRAINT [DF__hrsa_bill__delet__26FA0F31] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_bill_inspect] ADD CONSTRAINT [DF__hrsa_bill__tenan__27EE336A] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_check_result] ADD CONSTRAINT [DF__hrsa_chec__salar__78942603] DEFAULT ('0') FOR [salary_acct_record_id] +GO +ALTER TABLE [hrsa_check_result] ADD CONSTRAINT [DF__hrsa_chec__salar__79884A3C] DEFAULT ('0') FOR [salary_check_rule_id] +GO +ALTER TABLE [hrsa_check_result] ADD CONSTRAINT [DF__hrsa_chec__formu__7A7C6E75] DEFAULT ('0') FOR [formula_id] +GO +ALTER TABLE [hrsa_check_result] ADD CONSTRAINT [DF__hrsa_chec__ignor__7B7092AE] DEFAULT ('0') FOR [ignore_type] +GO +ALTER TABLE [hrsa_check_result] ADD CONSTRAINT [DF__hrsa_chec__creat__7C64B6E7] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_check_result] ADD CONSTRAINT [DF__hrsa_chec__creat__7D58DB20] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_check_result] ADD CONSTRAINT [DF__hrsa_chec__updat__7E4CFF59] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_check_result] ADD CONSTRAINT [DF__hrsa_chec__delet__7F412392] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_check_result] ADD CONSTRAINT [DF__hrsa_chec__tenan__003547CB] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__salar__0311B476] DEFAULT ('0') FOR [salary_check_rule_id] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__formu__0405D8AF] DEFAULT ('0') FOR [formula_id] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__check__04F9FCE8] DEFAULT ('0') FOR [check_result_id] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__salar__05EE2121] DEFAULT ('0') FOR [salary_acct_emp_id] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__emplo__06E2455A] DEFAULT ('0') FOR [employee_id] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__creat__07D66993] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__creat__08CA8DCC] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__updat__09BEB205] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__delet__0AB2D63E] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_check_result_record] ADD CONSTRAINT [DF__hrsa_chec__tenan__0BA6FA77] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__salar__0E836722] DEFAULT ('0') FOR [salary_acct_emp_id] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__salar__0F778B5B] DEFAULT ('0') FOR [salary_acct_record_id] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__emplo__106BAF94] DEFAULT ('0') FOR [employee_id] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__salar__115FD3CD] DEFAULT ('0') FOR [salary_check_rule_id] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__formu__1253F806] DEFAULT ('0') FOR [formula_id] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__creat__13481C3F] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__creat__143C4078] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__updat__153064B1] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__delet__162488EA] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_ck_result_detail_temp] ADD CONSTRAINT [DF__hrsa_ck_r__tenan__1718AD23] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__salar__19F519CE] DEFAULT ('0') FOR [salary_sob_id] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__salar__1AE93E07] DEFAULT ('0') FOR [salary_acct_emp_id] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__salar__1BDD6240] DEFAULT ('0') FOR [salary_acct_record_id] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__emplo__1CD18679] DEFAULT ('0') FOR [employee_id] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__salar__1DC5AAB2] DEFAULT ('0') FOR [salary_item_id] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__resul__1EB9CEEB] DEFAULT ('') FOR [result_value] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__creat__1FADF324] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__creat__20A2175D] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__updat__21963B96] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__delet__228A5FCF] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__tenan__237E8408] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_excel_acct_result] ADD CONSTRAINT [DF__hrsa_exce__tax_a__2472A841] DEFAULT ('0') FOR [tax_agent_id] +GO +ALTER TABLE [hrsa_fund_archives] ADD CONSTRAINT [DF__hrsa_fund__non_p__5F936E0F] DEFAULT ((0)) FOR [non_payment] +GO +ALTER TABLE [hrsa_fund_archives] ADD CONSTRAINT [DF__hrsa_fund__under__60879248] DEFAULT ('2') FOR [under_take] +GO +ALTER TABLE [hrsa_fund_archives] ADD CONSTRAINT [DF__hrsa_fund__creat__617BB681] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_fund_archives] ADD CONSTRAINT [DF__hrsa_fund__updat__626FDABA] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_fund_archives] ADD CONSTRAINT [DF__hrsa_fund__creat__6363FEF3] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_fund_archives] ADD CONSTRAINT [DF__hrsa_fund__delet__6458232C] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_fund_archives] ADD CONSTRAINT [DF__hrsa_fund__tenan__654C4765] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_other_archives] ADD CONSTRAINT [DF__hrsa_othe__non_p__6828B410] DEFAULT ('0') FOR [non_payment] +GO +ALTER TABLE [hrsa_other_archives] ADD CONSTRAINT [DF__hrsa_othe__under__691CD849] DEFAULT ('2') FOR [under_take] +GO +ALTER TABLE [hrsa_other_archives] ADD CONSTRAINT [DF__hrsa_othe__creat__6A10FC82] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_other_archives] ADD CONSTRAINT [DF__hrsa_othe__updat__6B0520BB] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_other_archives] ADD CONSTRAINT [DF__hrsa_othe__creat__6BF944F4] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_other_archives] ADD CONSTRAINT [DF__hrsa_othe__delet__6CED692D] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_other_archives] ADD CONSTRAINT [DF__hrsa_othe__tenan__6DE18D66] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_salary_archive_dimission] ADD CONSTRAINT [DF__hrsa_sala__creat__440B4F2B] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_salary_archive_dimission] ADD CONSTRAINT [DF__hrsa_sala__updat__44FF7364] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_salary_archive_dimission] ADD CONSTRAINT [DF__hrsa_sala__creat__45F3979D] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_salary_archive_dimission] ADD CONSTRAINT [DF__hrsa_sala__delet__46E7BBD6] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_salary_archive_dimission] ADD CONSTRAINT [DF__hrsa_sala__tenan__47DBE00F] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_salary_sob_check_rule] ADD CONSTRAINT [DF__hrsa_sala__salar__3A96F38A] DEFAULT ('0') FOR [salary_sob_id] +GO +ALTER TABLE [hrsa_salary_sob_check_rule] ADD CONSTRAINT [DF__hrsa_salar__name__3B8B17C3] DEFAULT ('') FOR [name] +GO +ALTER TABLE [hrsa_salary_sob_check_rule] ADD CONSTRAINT [DF__hrsa_sala__formu__3C7F3BFC] DEFAULT ('0') FOR [formula_id] +GO +ALTER TABLE [hrsa_salary_sob_check_rule] ADD CONSTRAINT [DF__hrsa_sala__descr__3D736035] DEFAULT ('') FOR [description] +GO +ALTER TABLE [hrsa_salary_sob_check_rule] ADD CONSTRAINT [DF__hrsa_sala__creat__3E67846E] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_salary_sob_check_rule] ADD CONSTRAINT [DF__hrsa_sala__updat__3F5BA8A7] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_salary_sob_check_rule] ADD CONSTRAINT [DF__hrsa_sala__creat__404FCCE0] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_salary_sob_check_rule] ADD CONSTRAINT [DF__hrsa_sala__delet__4143F119] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_salary_sob_check_rule] ADD CONSTRAINT [DF__hrsa_sala__tenan__42381552] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_salary_sob_item_group] ADD CONSTRAINT [DF__hrsa_sala__salar__268FFADD] DEFAULT ('0') FOR [salary_sob_id] +GO +ALTER TABLE [hrsa_salary_sob_item_group] ADD CONSTRAINT [DF__hrsa_salar__name__27841F16] DEFAULT ('') FOR [name] +GO +ALTER TABLE [hrsa_salary_sob_item_group] ADD CONSTRAINT [DF__hrsa_sala__sorte__2878434F] DEFAULT ('0') FOR [sorted_index] +GO +ALTER TABLE [hrsa_salary_sob_item_group] ADD CONSTRAINT [DF__hrsa_sala__descr__296C6788] DEFAULT ('') FOR [description] +GO +ALTER TABLE [hrsa_salary_sob_item_group] ADD CONSTRAINT [DF__hrsa_sala__creat__2A608BC1] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_salary_sob_item_group] ADD CONSTRAINT [DF__hrsa_sala__updat__2B54AFFA] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_salary_sob_item_group] ADD CONSTRAINT [DF__hrsa_sala__creat__2C48D433] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_salary_sob_item_group] ADD CONSTRAINT [DF__hrsa_sala__delet__2D3CF86C] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_salary_sob_item_group] ADD CONSTRAINT [DF__hrsa_sala__tenan__2E311CA5] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_social_archives] ADD CONSTRAINT [DF__hrsa_soci__non_p__56FE280E] DEFAULT ((0)) FOR [non_payment] +GO +ALTER TABLE [hrsa_social_archives] ADD CONSTRAINT [DF__hrsa_soci__under__57F24C47] DEFAULT ('2') FOR [under_take] +GO +ALTER TABLE [hrsa_social_archives] ADD CONSTRAINT [DF__hrsa_soci__creat__58E67080] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_social_archives] ADD CONSTRAINT [DF__hrsa_soci__updat__59DA94B9] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_social_archives] ADD CONSTRAINT [DF__hrsa_soci__creat__5ACEB8F2] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_social_archives] ADD CONSTRAINT [DF__hrsa_soci__delet__5BC2DD2B] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_social_archives] ADD CONSTRAINT [DF__hrsa_soci__tenan__5CB70164] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_social_archives_encdata] ADD CONSTRAINT [DF__hrsa_social__crc__7EB713AD] DEFAULT (NULL) FOR [crc] +GO +ALTER TABLE [hrsa_social_archives_encdata] ADD CONSTRAINT [DF__hrsa_soci__creat__7FAB37E6] DEFAULT (NULL) FOR [creater] +GO +ALTER TABLE [hrsa_social_archives_encdata] ADD CONSTRAINT [DF__hrsa_soci__creat__009F5C1F] DEFAULT (NULL) FOR [created] +GO +ALTER TABLE [hrsa_social_archives_encdata] ADD CONSTRAINT [DF__hrsa_soci__MODIF__01938058] DEFAULT (NULL) FOR [MODIFIER] +GO +ALTER TABLE [hrsa_social_archives_encdata] ADD CONSTRAINT [DF__hrsa_soci__modif__0287A491] DEFAULT (NULL) FOR [modified] +GO +ALTER TABLE [hrsa_social_archives_encdata] ADD CONSTRAINT [DF__hrsa_soci__tenan__037BC8CA] DEFAULT (NULL) FOR [tenant_key] +GO +ALTER TABLE [hrsa_sys_tax_rate_base] ADD CONSTRAINT [DF__hrsa_sys_t__name__27B92940] DEFAULT ('') FOR [name] +GO +ALTER TABLE [hrsa_sys_tax_rate_base] ADD CONSTRAINT [DF__hrsa_sys___syste__28AD4D79] DEFAULT ('0') FOR [system_type] +GO +ALTER TABLE [hrsa_sys_tax_rate_base] ADD CONSTRAINT [DF__hrsa_sys___descr__29A171B2] DEFAULT ('') FOR [description] +GO +ALTER TABLE [hrsa_sys_tax_rate_base] ADD CONSTRAINT [DF__hrsa_sys___creat__2A9595EB] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_sys_tax_rate_base] ADD CONSTRAINT [DF__hrsa_sys___updat__2B89BA24] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_sys_tax_rate_base] ADD CONSTRAINT [DF__hrsa_sys___creat__2C7DDE5D] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_sys_tax_rate_base] ADD CONSTRAINT [DF__hrsa_sys___delet__2D720296] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_sys_tax_rate_base] ADD CONSTRAINT [DF__hrsa_sys___tenan__2E6626CF] DEFAULT ('') FOR [tenant_key] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___base___3142937A] DEFAULT ('0') FOR [base_id] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___index__3236B7B3] DEFAULT ('0') FOR [index_num] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___incom__332ADBEC] DEFAULT ('0.00000') FOR [income_lower_limit] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___incom__341F0025] DEFAULT ('0.00000') FOR [income_upper_limit] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___duty___3513245E] DEFAULT ('0.00000') FOR [duty_free_value] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___duty___36074897] DEFAULT ('0.00000') FOR [duty_free_rate] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___taxab__36FB6CD0] DEFAULT ('0.00000') FOR [taxable_income_ll] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___taxab__37EF9109] DEFAULT ('0.00000') FOR [taxable_income_ul] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___tax_r__38E3B542] DEFAULT ('0.00000') FOR [tax_rate] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___tax_d__39D7D97B] DEFAULT ('0.00000') FOR [tax_deduction] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___creat__3ACBFDB4] DEFAULT (getdate()) FOR [create_time] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___updat__3BC021ED] DEFAULT (getdate()) FOR [update_time] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___creat__3CB44626] DEFAULT ('0') FOR [creator] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___delet__3DA86A5F] DEFAULT ('0') FOR [delete_type] +GO +ALTER TABLE [hrsa_sys_tax_rate_detail] ADD CONSTRAINT [DF__hrsa_sys___tenan__3E9C8E98] DEFAULT ('') FOR [tenant_key] +GO + + +ALTER TABLE hrsa_salary_sob_item ADD can_delete int NULL +GO + + + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214787, 'нϼ', 'wagesTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651736817711, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:02', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214788, 'ȫһԽϼ', 'annualBonusTotal', 1, 5, 22, 0, 0, 2, 2, 2, 1, 1651737358294, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:07', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214789, '˰ǰۿϼ', 'preTaxDeductionsTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651737635353, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:22', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214790, '£ΣӦ˰ϼ', 'income', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651737859216, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:25', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214791, 'ǰۼӦ˰ϼ', 'addUpIncome', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651738034028, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:28', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214792, 'ϸ', 'endowmentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749914746, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214793, 'ҽƸ', 'medicalInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749958879, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214795, 'ʧҵ', 'unemploymentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750005281, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214796, '', 'housingProvidentFund', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750034689, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214797, '£Σר۳ϼ', 'specialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651738826550, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 16:03:40', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214798, 'ǰۼר۳ϼ', 'addUpSpecialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651739000845, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214799, 'ۼŮ', 'addUpChildEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739053212, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214800, 'ۼסϢ', 'addUpHousingLoanInterest', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739100651, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214801, 'ۼס', 'addUpHousingRent', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739151122, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214802, 'ۼƼ', 'addUpContinuingEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739212437, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214803, 'ۼ', 'addUpSupportElderly', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739310959, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214804, 'ǰۼרӿ۳ϼ', 'addUpSpeAddiDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 6, 1651739411365, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214805, '£Σ۳ϼ', 'otherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651739815651, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214806, 'ǰۼ۳ϼ', 'addUpOtherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651740238860, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214807, '£Σ', 'subtraction', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651740311026, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:56:11', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214808, 'ǰۼƼ', 'addUpSubtraction', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651740397225, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214809, '£Σн˰˰', 'taxRate', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742185837, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214810, '£Σн˰۳', 'quickDeductionFactor', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742702735, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214811, 'ǰۼӦ˰ö', 'addUpTaxableIncome', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651745445982, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:12', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214812, 'ǰۼӦ˰', 'addUpTaxPayable', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651748888864, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:14', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214813, 'ǰۼѿ۽˰ϼ', 'addUpAdvanceTax', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651748978482, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:18', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214814, '£ΣӦ˰', 'refundedOrSupplementedTax', 1, 6, 16, 1, 0, 2, 2, 2, 1, 1651749111981, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214815, '£Σʵнʺϼ', 'netSalaryTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651749240004, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:24', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861648655892480, '', 'baseSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:57:46', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861768948531201, 'λ', 'postSalary', 1, 1, 1, 1, 1, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:57:57', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861880508628992, 'ڿۿ', 'attendanceDeduction', 1, 2, 9, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:58:04', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093121, '˰ϼ', 'afterTaxReimbursementTotal', 1, 5, 22, 0, 0, 3, 2, 1, 1, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:58:06', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093122, '', 'annuity', 1, 2, 12, 0, 0, 2, 2, 2, 7, 1651749398360, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093123, 'ҵ', 'commercialHealthInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749448800, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093124, '˰ϱ', 'taxDeferredEndowmentInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749487187, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093125, 'Ʋԭֵ', 'originalValueOfProperty', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:58:29', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093126, '۳˰', 'deductedTax', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:58:42', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093127, '', 'other', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749540147, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093128, '£Σ', 'fee', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093129, '£Σ˰', 'taxFreeIncome', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:58:54', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093130, '˰', 'lessTaxProportion', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646657, '˰ϼ', 'afterTaxAdjustmentTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:59:09', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646658, 'ǰۼƼ˰ϼ', 'addUpTaxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 5, 0, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646659, '£Σ׼ʿ۳ľ', 'allowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651749595061, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646660, 'ǰۼ׼۳ľ', 'addUpAllowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651749675268, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646661, '£Σ˰', 'taxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 16:00:25', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646662, '˰ۿϼ', 'afterTaxDeductionsTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:37', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919424520683521, '˰ۿ', 'afterTaxDeductions', 1, 4, 15, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:39', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919682288984064, '˰', 'afterTaxReimbursement', 1, 3, 13, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:40', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919776783499264, '˰', 'afterTaxAdjustment', 1, 3, 14, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:48', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674920588574261248, 'ս', 'annualBonus', 1, 1, 2, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:51', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532371614588928, 'ǰۼ籣˺ϼ', 'addUpSocialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801433504, '', 0, 1, 0, 0, 'all_teams', '2022-03-07 10:22:55', '2022-05-06 09:44:23', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532667749400576, 'ǰۼƹ˺ϼ', 'addUpAccumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801586972, '', 0, 1, 0, 0, 'all_teams', '2022-03-07 10:22:55', '2022-05-06 09:46:40', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697536344384012289, 'ǰۼҵְҵ˺ϼ', 'addUpEnterpriseAndOther', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801667770, '', 0, 1, 0, 0, 'all_teams', '2022-03-07 10:22:56', '2022-05-06 09:48:07', 'number') +GO + + + + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651736817711, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.λ}', 'salaryItem_baseSalary+salaryItem_postSalary', 1, 0, '2022-05-05 15:46:58', '2022-05-05 15:46:58') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737358294, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ս}', 'salaryItem_annualBonus', 1, 0, '2022-05-05 15:55:58', '2022-05-05 15:55:58') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737635353, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ڿۿ}', 'salaryItem_attendanceDeduction', 1, 0, '2022-05-05 16:00:35', '2022-05-05 16:00:35') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737859216, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.нϼ}+{нĿ.ȫһԽϼ}-{нĿ.˰ǰۿϼ}', 'salaryItem_wagesTotal+salaryItem_annualBonusTotal-salaryItem_preTaxDeductionsTotal', 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738034028, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}+{ۼ.ۼ}', 'salaryItem_income+addUpSituation_addUpIncome', 1, 0, '2022-05-05 16:07:14', '2022-05-05 16:07:14') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749914746, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ϱո}', 'welfare_9001socialPer', 1, 0, '2022-05-05 19:25:15', '2022-05-05 19:25:15') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749958879, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҽƱո}', 'welfare_9002socialPer', 1, 0, '2022-05-05 19:25:59', '2022-05-05 19:25:59') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750005281, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ʧҵո}', 'welfare_9004socialPer', 1, 0, '2022-05-05 19:26:45', '2022-05-05 19:26:45') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750034689, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ס}', 'welfare_9006fundPer', 1, 0, '2022-05-05 19:27:15', '2022-05-05 19:27:15') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738826550, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ϸ}+{нĿ.ҽƸ}+{нĿ.ʧҵ}+{нĿ.}', 'salaryItem_endowmentInsurance+salaryItem_medicalInsurance+salaryItem_unemploymentInsurance+salaryItem_housingProvidentFund', 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739000845, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σר۳ϼ}+{ۼ.ۼ籣˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'salaryItem_specialDeduction+addUpSituation_addUpSocialSecurityTotal+addUpSituation_addUpAccumulationFundTotal', 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739053212, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼŮ}', 'addUpDeductions_addUpChildEducation', 1, 0, '2022-05-05 16:24:13', '2022-05-05 16:24:13') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739100651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼסϢ}', 'addUpSituation_addUpHousingLoanInterest', 1, 0, '2022-05-05 16:25:01', '2022-05-05 16:25:01') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739151122, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼס}', 'addUpSituation_addUpHousingRent', 1, 0, '2022-05-05 16:25:51', '2022-05-05 16:25:51') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739212437, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼƼ}', 'addUpSituation_addUpContinuingEducation', 1, 0, '2022-05-05 16:26:52', '2022-05-05 16:26:52') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739310959, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼ}', 'addUpSituation_addUpSupportElderly', 1, 0, '2022-05-05 16:28:31', '2022-05-05 16:28:31') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739411365, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoanInterest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly', 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739815651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.ҵ}+{нĿ.˰ϱ}+{нĿ.Ʋԭֵ}+{нĿ.۳˰}+{нĿ.}', 'salaryItem_annuity+salaryItem_commercialHealthInsurance+salaryItem_taxDeferredEndowmentInsurance+salaryItem_originalValueOfProperty+salaryItem_deductedTax+salaryItem_other', 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740238860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}+{ۼ.ۼҵְҵ}', 'salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction+addUpSituation_addUpEnterpriseAndOther', 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740311026, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '5000', '5000', 1, 0, '2022-05-05 16:45:11', '2022-05-05 16:45:11') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740397225, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ}+{ۼ.ۼƼ}', 'salaryItem_subtraction+addUpSituation_addUpSubtraction', 1, 0, '2022-05-05 16:46:37', '2022-05-05 16:46:37') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type,extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742185837, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=0){0;}else if({нĿ.ǰۼӦ˰ö}<=36000){0.03;}else if({нĿ.ǰۼӦ˰ö}<=144000){0.1;}else if({нĿ.ǰۼӦ˰ö}<=300000){0.2;}else if({нĿ.ǰۼӦ˰ö}<=420000){0.25;}else if({нĿ.ǰۼӦ˰ö}<=660000){0.3;}else if({нĿ.ǰۼӦ˰ö}<=960000){0.35;}else{0.45;}', 'if(salaryItem_addUpTaxableIncome<=0){0;}else if(salaryItem_addUpTaxableIncome<=36000){0.03;}else if(salaryItem_addUpTaxableIncome<=144000){0.1;}else if(salaryItem_addUpTaxableIncome<=300000){0.2;}else if(salaryItem_addUpTaxableIncome<=420000){0.25;}else if(salaryItem_addUpTaxableIncome<=660000){0.3;}else if(salaryItem_addUpTaxableIncome<=960000){0.35;}else{0.45;}', 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742702735, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=36000){{нĿ.ǰۼӦ˰ö}<=36000){0;}else if({нĿ.ǰۼӦ˰ö}<=144000){2520;}else if({нĿ.ǰۼӦ˰ö}<=300000){16920;}else if({нĿ.ǰۼӦ˰ö}<=420000){31920;}else if({нĿ.ǰۼӦ˰ö}<=660000){52920;}else if({нĿ.ǰۼӦ˰ö}<=960000){85920;}else{181920;}', 'if(salaryItem_addUpTaxableIncome<=36000){0;}else if(salaryItem_addUpTaxableIncome<=144000){2520;}else if(salaryItem_addUpTaxableIncome<=300000){16920;}else if(salaryItem_addUpTaxableIncome<=420000){31920;}else if(salaryItem_addUpTaxableIncome<=660000){52920;}else if(salaryItem_addUpTaxableIncome<=960000){85920;}else{181920;}', 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651745445982, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation', 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748888864, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ö}*{нĿ.£Σн˰˰}-{нĿ.£Σн˰۳}', 'salaryItem_addUpTaxableIncome*salaryItem_taxRate-salaryItem_quickDeductionFactor', 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748978482, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼԤԤ˰}', 'addUpSituation_addUpAdvanceTax', 1, 0, '2022-05-05 19:09:38', '2022-05-05 19:09:38') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749111981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰}-{нĿ.ǰۼѿ۽˰ϼ}-{нĿ.ǰۼƼ˰ϼ}', 'salaryItem_addUpTaxPayable-salaryItem_addUpAdvanceTax-salaryItem_addUpTaxDeduction', 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749240004, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}-{нĿ.£Σר۳ϼ}-{нĿ.£ΣӦ˰}+{нĿ.˰ϼ}+{нĿ.˰ϼ}-{нĿ.˰ۿϼ}', 'salaryItem_income-salaryItem_specialDeduction-salaryItem_refundedOrSupplementedTax+salaryItem_afterTaxAdjustmentTotal+salaryItem_afterTaxReimbursementTotal-salaryItem_afterTaxDeductionsTotal', 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749398360, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҵ}', 'welfare_9007otherPer', 1, 0, '2022-05-05 19:16:38', '2022-05-05 19:16:38') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749448800, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 1, 0, '2022-05-05 19:17:29', '2022-05-05 19:17:29') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749487187, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 1, 0, '2022-05-05 19:18:07', '2022-05-05 19:18:07') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749540147, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 1, 0, '2022-05-05 19:19:00', '2022-05-05 19:19:00') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749595061, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 1, 0, '2022-05-05 19:19:55', '2022-05-05 19:19:55') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749675268, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ׼ʿ۳ľ}+{ۼ.ۼ׼۳ľ}', 'salaryItem_allowedDonation+addUpSituation_addUpAllowedDonation', 1, 0, '2022-05-05 19:21:15', '2022-05-05 19:21:15') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801433504, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}+{ۼ.ۼ籣˺ϼ}', 'welfare_socialPerSum+addUpSituation_addUpSocialSecurityTotal', 1, 0, '2022-05-06 09:43:54', '2022-05-06 09:43:54') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801586972, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'welfare_fundPerSum+addUpSituation_addUpAccumulationFundTotal', 1, 0, '2022-05-06 09:46:27', '2022-05-06 09:46:27') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801667770, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼҵְҵ}', 'welfare_otherPerSum+addUpSituation_addUpEnterpriseAndOther', 1, 0, '2022-05-06 09:47:48', '2022-05-06 09:47:48') +GO + + + + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818266, '', 1651736817711, 'salaryItem_baseSalary', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 15:46:58', '2022-05-05 15:46:58') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818329, 'λ', 1651736817711, 'salaryItem_postSalary', '{нĿ.λ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 15:46:58', '2022-05-05 15:46:58') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737360610, 'ս', 1651737358294, 'salaryItem_annualBonus', '{нĿ.ս}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 15:55:58', '2022-05-05 15:55:58') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737636061, 'ڿۿ', 1651737635353, 'salaryItem_attendanceDeduction', '{нĿ.ڿۿ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:00:35', '2022-05-05 16:00:35') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859281, 'нϼ', 1651737859216, 'salaryItem_wagesTotal', '{нĿ.нϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859342, 'ȫһԽϼ', 1651737859216, 'salaryItem_annualBonusTotal', '{нĿ.ȫһԽϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859401, '˰ǰۿϼ', 1651737859216, 'salaryItem_preTaxDeductionsTotal', '{нĿ.˰ǰۿϼ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035450, '£ΣӦ˰ϼ', 1651738034028, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:07:14', '2022-05-05 16:07:14') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035488, 'ۼ', 1651738034028, 'addUpSituation_addUpIncome', '{ۼ.ۼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:07:14', '2022-05-05 16:07:14') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738832854, 'ϸ', 1651738826550, 'salaryItem_endowmentInsurance', '{нĿ.ϸ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837363, 'ҽƸ', 1651738826550, 'salaryItem_medicalInsurance', '{нĿ.ҽƸ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837909, 'ʧҵ', 1651738826550, 'salaryItem_unemploymentInsurance', '{нĿ.ʧҵ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738838429, '', 1651738826550, 'salaryItem_housingProvidentFund', '{нĿ.}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002623, '£Σר۳ϼ', 1651739000845, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002682, 'ۼ籣˺ϼ', 1651739000845, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739003139, 'ۼƹ˺ϼ', 1651739000845, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 2, 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739054270, 'ۼŮ', 1651739053212, 'addUpDeductions_addUpChildEducation', '{ۼרӿ۳.ۼŮ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-05 16:24:13', '2022-05-05 16:24:13') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739101122, 'ۼסϢ', 1651739100651, 'addUpSituation_addUpHousingLoanInterest', '{ۼ.ۼסϢ}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:25:01', '2022-05-05 16:25:01') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739151221, 'ۼס', 1651739151122, 'addUpSituation_addUpHousingRent', '{ۼ.ۼס}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:25:51', '2022-05-05 16:25:51') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739213082, 'ۼƼ', 1651739212437, 'addUpSituation_addUpContinuingEducation', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:26:52', '2022-05-05 16:26:52') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739311009, 'ۼ', 1651739310959, 'addUpSituation_addUpSupportElderly', '{ۼ.ۼ}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:28:31', '2022-05-05 16:28:31') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411502, 'ۼŮ', 1651739411365, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411637, 'ۼסϢ', 1651739411365, 'salaryItem_addUpHousingLoanInterest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411715, 'ۼס', 1651739411365, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411773, 'ۼƼ', 1651739411365, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739412718, 'ۼ', 1651739411365, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739819892, '', 1651739815651, 'salaryItem_annuity', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739822564, 'ҵ', 1651739815651, 'salaryItem_commercialHealthInsurance', '{нĿ.ҵ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739826637, '˰ϱ', 1651739815651, 'salaryItem_taxDeferredEndowmentInsurance', '{нĿ.˰ϱ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739828954, 'Ʋԭֵ', 1651739815651, 'salaryItem_originalValueOfProperty', '{нĿ.Ʋԭֵ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739829915, '۳˰', 1651739815651, 'salaryItem_deductedTax', '{нĿ.۳˰}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739830465, '', 1651739815651, 'salaryItem_other', '{нĿ.}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740240713, '£Σ۳ϼ', 1651740238860, 'salaryItem_otherDeduction', '{нĿ.£Σ۳ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241221, 'ۼ˰۳', 1651740238860, 'addUpSituation_addUpOtherDeduction', '{ۼ.ۼ˰۳}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241717, 'ۼҵְҵ', 1651740238860, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 2, 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397497, '£Σ', 1651740397225, 'salaryItem_subtraction', '{нĿ.£Σ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:46:37', '2022-05-05 16:46:37') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397989, 'ۼƼ', 1651740397225, 'addUpSituation_addUpSubtraction', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:46:37', '2022-05-05 16:46:37') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185950, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185995, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186035, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186085, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186122, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186155, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186199, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 6, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742704826, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705308, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705782, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705831, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706306, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706368, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745446904, 'ǰۼӦ˰ϼ', 1651745445982, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447442, 'ǰۼר۳ϼ', 1651745445982, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447969, 'ǰۼרӿ۳ϼ', 1651745445982, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745448475, 'ǰۼ۳ϼ', 1651745445982, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745451616, 'ǰۼƼ', 1651745445982, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745452097, 'ǰۼ׼۳ľ', 1651745445982, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888918, 'ǰۼӦ˰ö', 1651748888864, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888952, '£Σн˰˰', 1651748888864, 'salaryItem_taxRate', '{нĿ.£Σн˰˰}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888989, '£Σн˰۳', 1651748888864, 'salaryItem_quickDeductionFactor', '{нĿ.£Σн˰۳}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748978520, 'ۼԤԤ˰', 1651748978482, 'addUpSituation_addUpAdvanceTax', '{ۼ.ۼԤԤ˰}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 19:09:38', '2022-05-05 19:09:38') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112037, 'ǰۼӦ˰', 1651749111981, 'salaryItem_addUpTaxPayable', '{нĿ.ǰۼӦ˰}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112068, 'ǰۼѿ۽˰ϼ', 1651749111981, 'salaryItem_addUpAdvanceTax', '{нĿ.ǰۼѿ۽˰ϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112116, 'ǰۼƼ˰ϼ', 1651749111981, 'salaryItem_addUpTaxDeduction', '{нĿ.ǰۼƼ˰ϼ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240040, '£ΣӦ˰ϼ', 1651749240004, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240082, '£Σר۳ϼ', 1651749240004, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240117, '£ΣӦ˰', 1651749240004, 'salaryItem_refundedOrSupplementedTax', '{нĿ.£ΣӦ˰}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240164, '˰ϼ', 1651749240004, 'salaryItem_afterTaxAdjustmentTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240199, '˰ϼ', 1651749240004, 'salaryItem_afterTaxReimbursementTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240245, '˰ۿϼ', 1651749240004, 'salaryItem_afterTaxDeductionsTotal', '{нĿ.˰ۿϼ}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749398399, 'ҵ', 1651749398360, 'welfare_9007otherPer', '{籣.ҵ}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:16:38', '2022-05-05 19:16:38') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749448843, 'ҵ', 1651749448800, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:17:29', '2022-05-05 19:17:29') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749487225, '˰ϱ', 1651749487187, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:18:07', '2022-05-05 19:18:07') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749540213, '', 1651749540147, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:19:00', '2022-05-05 19:19:00') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749596472, '׼۳ľ', 1651749595061, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:19:55', '2022-05-05 19:19:55') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675326, '£Σ׼ʿ۳ľ', 1651749675268, 'salaryItem_allowedDonation', '{нĿ.£Σ׼ʿ۳ľ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:21:15', '2022-05-05 19:21:15') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675365, 'ۼ׼۳ľ', 1651749675268, 'addUpSituation_addUpAllowedDonation', '{ۼ.ۼ׼۳ľ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 19:21:15', '2022-05-05 19:21:15') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749914793, 'ϱո', 1651749914746, 'welfare_9001socialPer', '{籣.ϱո}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:25:15', '2022-05-05 19:25:15') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749958917, 'ҽƱո', 1651749958879, 'welfare_9002socialPer', '{籣.ҽƱո}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:25:59', '2022-05-05 19:25:59') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750005320, 'ʧҵո', 1651750005281, 'welfare_9004socialPer', '{籣.ʧҵո}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:26:45', '2022-05-05 19:26:45') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750034727, 'ס', 1651750034689, 'welfare_9006fundPer', '{籣.ס}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:27:15', '2022-05-05 19:27:15') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801435862, '籣˺ϼ', 1651801433504, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 0, 1, 0, '2022-05-06 09:43:54', '2022-05-06 09:43:54') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801436423, 'ۼ籣˺ϼ', 1651801433504, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-06 09:43:54', '2022-05-06 09:43:54') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587331, '˺ϼ', 1651801586972, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, '2022-05-06 09:46:27', '2022-05-06 09:46:27') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587794, 'ۼƹ˺ϼ', 1651801586972, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-06 09:46:27', '2022-05-06 09:46:27') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801669969, '˺ϼ', 1651801667770, 'welfare_otherPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, '2022-05-06 09:47:48', '2022-05-06 09:47:48') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801670474, 'ۼҵְҵ', 1651801667770, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-06 09:47:48', '2022-05-06 09:47:48') +GO + + + + +INSERT INTO hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291652, 'taxAgentName', 0, 0, 0, '2022-02-23 17:32:08', '2022-02-23 17:32:08', 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291653, 'username', 1, 0, 0, '2022-02-23 17:32:08', '2022-02-23 17:32:08', 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291654, 'departmentName', 2, 0, 0, '2022-02-23 17:32:08', '2022-02-23 17:32:08', 0, 'all_teams') +GO + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368900, 4, 703459464954929153, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368899, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368902, 4, 703458434280095745, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368901, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368903, 4, 703458558739300353, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368901, 1) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368905, 4, 674914626953093123, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368906, 4, 674914626953093124, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 1) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368907, 4, 674914626953093127, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 2) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368908, 4, 674916065864646659, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 3) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368910, 4, 704467747234045953, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368911, 4, 704468391612751873, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 1) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368912, 4, 704468443048992769, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 2) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368913, 4, 704468490269204481, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 3) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368914, 4, 704468528928063488, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 4) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368915, 4, 703459151591383041, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 0, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312448, 1, 703459151591383041, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 0, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312449, 1, 674861648655892480, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312450, 1, 674861768948531201, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 1) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312451, 1, 674861880508628992, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 2) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312452, 1, 674920588574261248, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 3) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312453, 1, 674853617092214790, 1, 0, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 4) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312454, 1, 674853617092214791, 1, 0, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 5) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312455, 1, 674914626953093129, 1, 0, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 6) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312456, 1, 703419929857687552, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 7) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312457, 1, 674853617092214792, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312458, 1, 674853617092214793, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 1) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312459, 1, 674853617092214795, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 2) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312460, 1, 674853617092214796, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 3) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312461, 1, 700599184238075904, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 4) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312462, 1, 700599446244319233, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 5) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312463, 1, 674853617092214797, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 6) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312464, 1, 697532371614588928, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 7) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312465, 1, 697532667749400576, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 8) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312466, 1, 697536344384012289, 1, 0, 0, '2022-03-18 16:24:49', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 9) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312467, 1, 674853617092214798, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 10) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312468, 1, 674853617092214803, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614103, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312469, 1, 674853617092214802, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 1) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312470, 1, 674853617092214801, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 2) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312471, 1, 674853617092214800, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 3) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312472, 1, 674853617092214799, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614103, 4) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312473, 1, 705641858303836161, 1, 0, 0, '2022-03-17 13:48:51', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 5) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312474, 1, 674853617092214804, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614103, 6) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312475, 1, 674853617092214807, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312476, 1, 674853617092214808, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 1) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312477, 1, 674914626953093122, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 2) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312478, 1, 674914626953093123, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 3) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312479, 1, 674914626953093124, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 4) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312480, 1, 674914626953093127, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 5) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312481, 1, 674853617092214805, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 6) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312482, 1, 674853617092214806, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 7) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312483, 1, 674916065864646659, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 8) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312484, 1, 674916065864646660, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 9) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312485, 1, 674853617092214811, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614119, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312486, 1, 674853617092214809, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 1) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312487, 1, 674853617092214810, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 2) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312488, 1, 674853617092214812, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 3) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312489, 1, 674853617092214813, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 4) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312490, 1, 674916065864646661, 1, 1, 0, '2022-03-18 16:33:37', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 5) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312491, 1, 674916065864646658, 1, 1, 0, '2022-03-18 16:33:37', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 6) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312492, 1, 674853617092214814, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614119, 7) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312493, 1, 674853617092214815, 1, 1, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614126, 6) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312494, 1, 700769462612156416, 1, 1, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614126, 7) +GO + + + + +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614083, 1, 'Լ˰', 0, '', '2022-03-11 14:49:01', '2022-03-11 14:49:01', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614092, 1, 'ר۳', 1, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614103, 1, 'ۼרӿ۳', 2, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614110, 1, '۳Ϣ', 3, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614119, 1, '˰', 4, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614126, 1, 'Ӧʵ', 5, '', '2022-03-11 14:49:28', '2022-03-11 14:49:28', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368899, 4, 'Ŀ', 0, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368901, 4, '뼰˰', 1, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368904, 4, '۳Ϣ', 2, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368909, 4, '˰', 3, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams') +GO + + +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, 'ϱ', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, 'ҽƱ', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '˱', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, 'ʧҵ', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, 'ס', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, 'ҵ', 3, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +GO +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, 'ס', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams') +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202205200203.sql b/resource/sqlupgrade/SQLServer/sql202205200203.sql new file mode 100644 index 000000000..6c1b01b6f --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202205200203.sql @@ -0,0 +1,11 @@ +ALTER TABLE hrsa_add_up_situation +ADD add_up_illness_medical varchar(255) NULL , +add_up_tax_savings varchar(255) NULL , +add_up_infant_care varchar(255) NULL +GO + + +ALTER TABLE hrsa_add_up_deduction +ADD add_up_illness_medical varchar(255) NULL, +add_up_infant_care varchar(255) NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202205310203.sql b/resource/sqlupgrade/SQLServer/sql202205310203.sql new file mode 100644 index 000000000..1c054f16b --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202205310203.sql @@ -0,0 +1,37 @@ +INSERT INTO hrsa_formula (id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1653993466778, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼסϢ}', 'addUpDeductions_addUpHousingLoanInterest', 1, 0, '2022-05-31 18:37:47', '2022-05-31 18:37:47') +GO +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993466787, 'ۼסϢ', 1653993466778, 'addUpDeductions_addUpHousingLoanInterest', '{ۼרӿ۳.ۼסϢ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:37:47', '2022-05-31 18:37:47') +GO +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993837931, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼס}', 'addUpDeductions_addUpHousingRent', 1, 0, '2022-05-31 18:43:58', '2022-05-31 18:43:58') +GO +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993837947, 'ۼס', 1653993837931, 'addUpDeductions_addUpHousingRent', '{ۼרӿ۳.ۼס}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:43:58', '2022-05-31 18:43:58') +GO +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993954233, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƼ}', 'addUpDeductions_addUpContinuingEducation', 1, 0, '2022-05-31 18:45:54', '2022-05-31 18:45:54') +GO +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993954257, 'ۼƼ', 1653993954233, 'addUpDeductions_addUpContinuingEducation', '{ۼרӿ۳.ۼƼ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:45:54', '2022-05-31 18:45:54') +GO +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653994061764, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼ}', 'addUpDeductions_addUpSupportElderly', 1, 0, '2022-05-31 18:47:42', '2022-05-31 18:47:42') +GO +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653994061780, 'ۼ', 1653994061764, 'addUpDeductions_addUpSupportElderly', '{ۼרӿ۳.ۼ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:47:42', '2022-05-31 18:47:42') +GO + + + +update hrsa_sys_salary_item set formula_id = 1653993466778 where id = 674853617092214800 +GO +update hrsa_sys_salary_item set formula_id = 1653993837931 where id = 674853617092214801 +GO +update hrsa_sys_salary_item set formula_id = 1653993954233 where id = 674853617092214802 +GO +update hrsa_sys_salary_item set formula_id = 1653994061764 where id = 674853617092214803 +GO + + +update hrsa_salary_item set formula_id = 1653993466778 where sys_salary_item_id = 674853617092214800 +GO +update hrsa_salary_item set formula_id = 1653993837931 where sys_salary_item_id = 674853617092214801 +GO +update hrsa_salary_item set formula_id = 1653993954233 where sys_salary_item_id = 674853617092214802 +GO +update hrsa_salary_item set formula_id = 1653994061764 where sys_salary_item_id = 674853617092214803 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202206071403.sql b/resource/sqlupgrade/SQLServer/sql202206071403.sql new file mode 100644 index 000000000..6f4876c48 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202206071403.sql @@ -0,0 +1,272 @@ +CREATE TABLE [hrsa_tax_agent_emp] ( + [id] bigint NOT NULL, + [create_time] datetime NULL, + [update_time] datetime NULL, + [creator] bigint NULL, + [delete_type] int DEFAULT 0, + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NULL, + [tax_agent_id] bigint NULL, + [employee_id] bigint NULL, + [employee_name] varchar(255) COLLATE Chinese_PRC_CI_AS NULL + ) + GO + +ALTER TABLE [hrsa_tax_agent_emp] SET (LOCK_ESCALATION = TABLE) + GO + +CREATE NONCLUSTERED INDEX [idx_tenant_key] +ON [hrsa_tax_agent_emp] ( + [tenant_key] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_tax_agent] +ON [hrsa_tax_agent_emp] ( + [tax_agent_id] ASC +) +GO +ALTER TABLE [hrsa_tax_agent_emp] ADD CONSTRAINT [PK__hrsa_tax__3213E83F1A221DC1] PRIMARY KEY CLUSTERED ([id]) + WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ON [PRIMARY] + GO + + + + + + +CREATE TABLE [hrsa_tax_agent_base] ( + [id] bigint NOT NULL, + [devolution_status] int DEFAULT 0, + [create_time] datetime DEFAULT getdate(), + [update_time] datetime DEFAULT getdate(), + [creator] bigint DEFAULT 0, + [delete_type] int DEFAULT 0, + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NULL + ) + GO + +ALTER TABLE [hrsa_tax_agent_base] SET (LOCK_ESCALATION = TABLE) + GO + +CREATE NONCLUSTERED INDEX [idx_tenant_key] +ON [hrsa_tax_agent_base] ( + [tenant_key] ASC +) +GO + + +ALTER TABLE [hrsa_tax_agent_base] ADD CONSTRAINT [PK__hrsa_tax__3213E83FE121B302] PRIMARY KEY CLUSTERED ([id]) + WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ON [PRIMARY] + GO + + + + + +CREATE TABLE [hrsa_tax_agent_manage_range] ( + [id] bigint NOT NULL, + [tax_agent_id] bigint DEFAULT 0, + [employee_id] bigint DEFAULT 0, + [tax_agent_sub_admin_id] bigint DEFAULT 0, + [target_type] tinyint DEFAULT 1, + [target_id] bigint DEFAULT 0, + [employee_status] varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + [include_type] int DEFAULT 1, + [creator] bigint DEFAULT 0, + [create_time] datetime DEFAULT getdate(), + [update_time] datetime DEFAULT getdate(), + [delete_type] int DEFAULT 0, + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NULL, + [range_type] int DEFAULT 0 + ) + GO + +ALTER TABLE [hrsa_tax_agent_manage_range] SET (LOCK_ESCALATION = TABLE) + GO + +CREATE NONCLUSTERED INDEX [idx_tax_agent_sub_admin_id] +ON [hrsa_tax_agent_manage_range] ( + [tax_agent_sub_admin_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_tenant_key] +ON [hrsa_tax_agent_manage_range] ( + [tenant_key] ASC +) +GO + +ALTER TABLE [hrsa_tax_agent_manage_range] ADD CONSTRAINT [PK__hrsa_tax__3213E83F877A395F] PRIMARY KEY CLUSTERED ([id]) + WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ON [PRIMARY] + GO + + + +CREATE TABLE [hrsa_tax_agent_emp_change] ( + [id] bigint NOT NULL, + [create_time] datetime NULL, + [update_time] datetime NULL, + [creator] bigint NULL, + [delete_type] int DEFAULT 0, + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NULL, + [tax_agent_id] bigint NULL, + [employee_id] bigint NULL, + [change_type] int DEFAULT 0, + [employee_name] varchar(255) COLLATE Chinese_PRC_CI_AS NULL, + [module_type] int DEFAULT 0 + ) + GO + +ALTER TABLE [hrsa_tax_agent_emp_change] SET (LOCK_ESCALATION = TABLE) + GO + + +CREATE NONCLUSTERED INDEX [idx_tenant_key] +ON [hrsa_tax_agent_emp_change] ( + [tenant_key] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_tax_agent] +ON [hrsa_tax_agent_emp_change] ( + [tax_agent_id] ASC +) +GO + +ALTER TABLE [hrsa_tax_agent_emp_change] ADD CONSTRAINT [PK__hrsa_tax__3213E83F2DC37AA6] PRIMARY KEY CLUSTERED ([id]) + WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ON [PRIMARY] + GO + + + +CREATE TABLE [hrsa_tax_agent_sub_admin_emp] ( + [id] bigint NOT NULL, + [create_time] datetime NULL, + [update_time] datetime NULL, + [creator] bigint NULL, + [delete_type] int DEFAULT 0, + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NULL, + [tax_agent_id] bigint DEFAULT 0, + [tax_agent_sub_admin_id] bigint DEFAULT 0, + [employee_id] bigint DEFAULT 0, + [employee_name] varchar(255) COLLATE Chinese_PRC_CI_AS NULL + ) + GO + +ALTER TABLE [hrsa_tax_agent_sub_admin_emp] SET (LOCK_ESCALATION = TABLE) + GO + + +CREATE NONCLUSTERED INDEX [idx_tenant_key] +ON [hrsa_tax_agent_sub_admin_emp] ( + [tenant_key] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_tax_agent] +ON [hrsa_tax_agent_sub_admin_emp] ( + [tax_agent_id] ASC +) +GO + +ALTER TABLE [hrsa_tax_agent_sub_admin_emp] ADD CONSTRAINT [PK__hrsa_tax__3213E83F2F2EE404] PRIMARY KEY CLUSTERED ([id]) + WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ON [PRIMARY] + GO + + + +CREATE TABLE [hrsa_tax_agent_sub_admin] ( + [id] bigint NOT NULL, + [tax_agent_id] bigint NULL, + [employee_id] bigint NULL, + [description] varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + [create_time] datetime NULL, + [update_time] datetime NULL, + [creator] bigint NULL, + [delete_type] int NULL, + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NULL, + [remark] text COLLATE Chinese_PRC_CI_AS NULL + ) + GO + +ALTER TABLE [hrsa_tax_agent_sub_admin] SET (LOCK_ESCALATION = TABLE) + GO + + +CREATE NONCLUSTERED INDEX [idx_tenant_key] +ON [hrsa_tax_agent_sub_admin] ( + [tenant_key] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_tax_agent_id] +ON [hrsa_tax_agent_sub_admin] ( + [tax_agent_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_employee_id] +ON [hrsa_tax_agent_sub_admin] ( + [employee_id] ASC +) +GO + +ALTER TABLE [hrsa_tax_agent_sub_admin] ADD CONSTRAINT [PK__hrsa_tax__3213E83F26DE578A] PRIMARY KEY CLUSTERED ([id]) + WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ON [PRIMARY] + GO + + + + +CREATE TABLE [hrsa_tax_agent_admin] ( + [id] bigint NOT NULL, + [tax_agent_id] bigint NULL, + [employee_id] bigint NULL, + [create_time] datetime DEFAULT getdate(), + [update_time] datetime DEFAULT getdate(), + [creator] bigint DEFAULT 0, + [delete_type] int DEFAULT 0, + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NULL + ) + GO + +ALTER TABLE [hrsa_tax_agent_admin] SET (LOCK_ESCALATION = TABLE) + GO + +CREATE NONCLUSTERED INDEX [idx_tenant_key] +ON [hrsa_tax_agent_admin] ( + [tenant_key] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_employee_id] +ON [hrsa_tax_agent_admin] ( + [employee_id] ASC +) +GO + +ALTER TABLE [hrsa_tax_agent_admin] ADD CONSTRAINT [PK__hrsa_tax__3213E83F01D6FDC9] PRIMARY KEY CLUSTERED ([id]) + WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ON [PRIMARY] + GO + +ALTER TABLE hrsa_tax_agent ADD payment_agency varchar(255) NULL +GO + +ALTER TABLE hrsa_salary_sob ADD tax_agent_id bigint NULL +GO + +INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams'); +GO +ALTER TABLE hrsa_bill_detail_temp ADD payment_organization bigint NULL +GO +ALTER TABLE hrsa_bill_detail ADD payment_organization bigint NULL +GO +ALTER TABLE hrsa_bill_batch ADD payment_organization bigint NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202206090403.sql b/resource/sqlupgrade/SQLServer/sql202206090403.sql new file mode 100644 index 000000000..56e48a41d --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202206090403.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_tax_declaration ADD income_category int NULL +GO + +ALTER TABLE hrsa_tax_declaration_detail ADD employee_type int NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202206141003.sql b/resource/sqlupgrade/SQLServer/sql202206141003.sql new file mode 100644 index 000000000..c03f45097 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202206141003.sql @@ -0,0 +1,36 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836162, 'ۼӤ׶ջ', 'addUpInfantCare', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655196897860, '', 0, 1, 0, 0, 'all_teams', '2022-05-31 17:36:04', '2022-05-31 17:36:04', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703419929857687552, 'ǰۼ˰', 'addUpTaxFreeIncome', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197296054, '', 0, 1, 0, 0, 'all_teams', '2022-03-11 13:50:17', '2022-03-17 16:13:27', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836161, 'ۼƴҽ', 'addUpIllnessMedical', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197430967, '', 0, 1, 0, 0, 'all_teams', '2022-03-17 13:30:57', '2022-03-18 17:06:46', 'number') +GO + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655196897860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼӤ׶ջ}', 'addUpDeductions_addUpInfantCare', 92, 0, '2022-06-14 16:54:58', '2022-06-14 16:54:58') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197296054, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ˰}+{ۼ.ۼ˰}', 'salaryItem_taxFreeIncome+addUpSituation_addUpTaxExemptIncome', 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197430967, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƴҽ}', 'addUpDeductions_addUpIllnessMedical', 92, 0, '2022-06-14 17:03:51', '2022-06-14 17:03:51') +GO + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655196897869, 'ۼӤ׶ջ', 1655196897860, 'addUpDeductions_addUpInfantCare', '{ۼרӿ۳.ۼӤ׶ջ}', 'number', 'addUpDeductions', 0, 92, 0, '2022-06-14 16:54:58', '2022-06-14 16:54:58') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296059, '£Σ˰', 1655197296054, 'salaryItem_taxFreeIncome', '{нĿ.£Σ˰}', 'number', 'salaryItem', 0, 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296063, 'ۼ˰', 1655197296054, 'addUpSituation_addUpTaxExemptIncome', '{ۼ.ۼ˰}', 'number', 'addUpSituation', 1, 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197430986, 'ۼƴҽ', 1655197430967, 'addUpDeductions_addUpIllnessMedical', '{ۼרӿ۳.ۼƴҽ}', 'number', 'addUpDeductions', 0, 92, 0, '2022-06-14 17:03:51', '2022-06-14 17:03:51') +GO + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (728615865977528321, 1, 705641858303836162, 1, 0, 0, '2022-05-31 17:36:04', '2022-05-31 17:36:04', 0, 'all_teams', 703433961629614103, 7) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845569, 1, 674853617092214787, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 8) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845572, 1, 674853617092214788, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 9) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845578, 1, 674853617092214789, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 10) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845567, 1, 733975748932845568, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 11) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202206160500.sql b/resource/sqlupgrade/SQLServer/sql202206160500.sql new file mode 100644 index 000000000..7d59627be --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202206160500.sql @@ -0,0 +1,30 @@ +delete from SystemRightDetail where rightid =2693 +GO +delete from SystemRightsLanguage where id =2693 +GO +delete from SystemRights where id =2693 +GO +delete from SystemRightToGroup where rightid =2693 +GO +delete from SystemRightType where id =36 +GO +delete from SystemRightGroups where id =-22 +GO +insert into SystemRights (id,rightdesc,righttype,detachable) values (2693,'нȨ','36',0) +GO +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,8,'Salary management authority','Salary management authority') +GO +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,9,'н','н') +GO +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,7,'нȨ','нȨ') +GO + +insert into SystemRightDetail (id,rightdetailname,rightdetail,rightid) values (43969,'нܹԱ','Salary:Chief',2693) +GO + +insert into SystemRightToGroup(rightid,groupid) values (2693,-22) +GO +insert into SystemRightGroups (id,rightgroupmark, rightgroupname, rightgroupremark) values(-22,'SALARY','нȨ','н') +GO +insert into SystemRightType(id,rightTypeName,rightTypeDesc) VALUES (36,'н','н') +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202206230403.sql b/resource/sqlupgrade/SQLServer/sql202206230403.sql new file mode 100644 index 000000000..44499b56e --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202206230403.sql @@ -0,0 +1,23 @@ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655976865885, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}+{нĿ.ۼƴҽ}+{нĿ.ۼӤ׶ջ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoanInterest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly+salaryItem_addUpIllnessMedical+salaryItem_addUpInfantCare', 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26') +GO + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865909, 'ۼ', 1655976865885, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865913, 'ۼƼ', 1655976865885, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865917, 'ۼס', 1655976865885, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865921, 'ۼסϢ', 1655976865885, 'salaryItem_addUpHousingLoanInterest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865924, 'ۼŮ', 1655976865885, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865929, 'ۼƴҽ', 1655976865885, 'salaryItem_addUpIllnessMedical', '{нĿ.ۼƴҽ}', 'number', 'salaryItem', 5, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865933, 'ۼӤ׶ջ', 1655976865885, 'salaryItem_addUpInfantCare', '{нĿ.ۼӤ׶ջ}', 'number', 'salaryItem', 6, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26') +GO + +update hrsa_sys_salary_item set formula_id = 1655976865885 where id = 674853617092214804 +GO + +update hrsa_salary_item set formula_id = 1655976865885 where sys_salary_item_id = 674853617092214804 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202207110803.sql b/resource/sqlupgrade/SQLServer/sql202207110803.sql new file mode 100644 index 000000000..05882ed2b --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202207110803.sql @@ -0,0 +1,59 @@ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +SET ANSI_PADDING ON +GO + +CREATE TABLE [hrsa_salary_acct_result_report]( + [id] [bigint] NOT NULL, + [salary_sob_id] [bigint] NOT NULL, + [salary_acct_emp_id] [varchar](200) NULL, + [salary_acct_record_id] [bigint] NOT NULL, + [employee_id] [varchar](200) NULL, + [tax_agent_id] [bigint] NOT NULL, + [salary_item_id] [bigint] NOT NULL, + [result_value] [varchar](1000) NOT NULL, + [creator] [bigint] NOT NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](10) NOT NULL, + [department_id] [bigint] NULL, + [subcompany_id] [bigint] NULL, + [costcenter_id] [bigint] NULL, + [jobtitle_id] [bigint] NULL, + [location_id] [bigint] NULL, + CONSTRAINT [PK_hrsa_salary_acct_result_report] PRIMARY KEY CLUSTERED +( +[id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] + + GO + + SET ANSI_PADDING OFF + GO + +ALTER TABLE [hrsa_salary_acct_result_report] ADD CONSTRAINT [DF_hrsa_salary_acct_result_report_salary_acct_emp_id] DEFAULT ((0)) FOR [salary_acct_emp_id] + GO + +ALTER TABLE [hrsa_salary_acct_result_report] ADD CONSTRAINT [DF_hrsa_salary_acct_result_report_employee_id] DEFAULT ((0)) FOR [employee_id] + GO + +ALTER TABLE [hrsa_salary_acct_result_report] ADD CONSTRAINT [DF__hrsa_sala__resul__2DAA0852] DEFAULT ('') FOR [result_value] + GO + +ALTER TABLE [hrsa_salary_acct_result_report] ADD CONSTRAINT [DF__hrsa_sala__creat__2E9E2C8B] DEFAULT (getdate()) FOR [create_time] + GO + +ALTER TABLE [hrsa_salary_acct_result_report] ADD CONSTRAINT [DF__hrsa_sala__updat__2F9250C4] DEFAULT (getdate()) FOR [update_time] + GO + +ALTER TABLE [hrsa_salary_acct_result_report] ADD CONSTRAINT [DF__hrsa_sala__delet__308674FD] DEFAULT ('0') FOR [delete_type] + GO + +ALTER TABLE [hrsa_salary_acct_result_report] ADD CONSTRAINT [DF__hrsa_sala__tenan__317A9936] DEFAULT ('') FOR [tenant_key] + GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202207120303.sql b/resource/sqlupgrade/SQLServer/sql202207120303.sql new file mode 100644 index 000000000..e36edf5fe --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202207120303.sql @@ -0,0 +1,30 @@ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +SET ANSI_PADDING ON +GO + +CREATE TABLE [hrsa_salary_sys_conf]( + [id] [bigint] NOT NULL, + [conf_key] [varchar](200) NOT NULL, + [conf_value] [varchar](500) NOT NULL, + [title] [varchar](200) NULL, + [module] [varchar](200) NULL, + [order_weight] [int] NULL, + [description] [varchar](200) NULL, + [delete_type] [int] NULL, + [create_time] [datetime] NULL, + [update_time] [datetime] NULL, + CONSTRAINT [PK_hrsa_salary_sys_conf] PRIMARY KEY CLUSTERED +( +[id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] + + GO + + SET ANSI_PADDING OFF + GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202207210203.sql b/resource/sqlupgrade/SQLServer/sql202207210203.sql new file mode 100644 index 000000000..0d90f4a7b --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202207210203.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_archive +ADD tax_agent_id bigint NULL , +pay_start_date datetime NULL , +pay_end_date datetime NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202208051103.sql b/resource/sqlupgrade/SQLServer/sql202208051103.sql new file mode 100644 index 000000000..0f12ec83b --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202208051103.sql @@ -0,0 +1,96 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599184238075904, '籣˺ϼ', 'socialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339100298, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 17:01:24', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599446244319233, '˺ϼ', 'accumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339063868, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 17:01:26', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458434280095745, '', 'laborIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 16:55:45', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458558739300353, '˰', 'laborTaxFreeIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-08-01 16:55:54', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459151591383041, 'ע', 'description', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-06-17 09:01:57', 'string') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459464954929153, 'Ŀ', 'incomeItems', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-06-17 09:01:57', 'string') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704467747234045953, '˰', 'laborSubtraction', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340673739, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-08-01 17:03:47', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468391612751873, '˰Ӧ˰ö', 'laborTaxableIncome', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340916981, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:51', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468443048992769, '˰˰', 'laborTaxRate', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341397524, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:53', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468490269204481, '˰۳', 'laborQuickDeductionFactor', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341564390, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:54', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468528928063488, '˰Ӧ˰', 'laborTaxPayable', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341811881, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:59', '2022-08-01 17:03:55', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (733975748932845568, '˰', 'taxAdjustment', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:59', '2022-06-17 09:01:59', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629570, 'ҵ[]', 'commercialHealthInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341909423, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:38', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629571, '˰ϱ[]', 'taxDeferredEndowmentInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341966905, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:40', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629572, '[]', 'other4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341993723, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:41', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629573, '£Σ׼۳ľ[]', 'allowedDonation4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659342041963, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:42', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629574, 'ע[]', 'description4', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 16:56:25', 'string') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629575, 'ѷнʺϼ', 'issuedTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-08-01 16:59:28', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629576, 'нʺϼ', 'ressueTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-08-01 16:59:40', 'number') +GO + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339063868, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}', 'welfare_fundPerSum', 92, 0, '2022-08-01 15:31:04', '2022-08-01 15:31:04') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339100298, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}', 'welfare_socialPerSum', 92, 0, '2022-08-01 15:31:40', '2022-08-01 15:31:40') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340673739, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.}-{нĿ.˰}<=4000){800;}else{0.2*({нĿ.}-{нĿ.˰})}', 'if(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome<=4000){800;}else{0.2*(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome)}', 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340916981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}-{нĿ.˰}-{нĿ.˰}', 'salaryItem_laborIncome-salaryItem_laborTaxFreeIncome-salaryItem_laborSubtraction', 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341397524, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0.2;}else if({нĿ.˰Ӧ˰ö}<=50000){0.3;}else{0.4;}', 'if(salaryItem_laborTaxableIncome<=20000){0.2;}else if(salaryItem_laborTaxableIncome<=50000){0.3;}else{0.4;}', 92, 0, '2022-08-01 16:09:57', '2022-08-01 16:09:57') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341564390, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0;}else if({нĿ.˰Ӧ˰ö}<=50000){2000;}else{7000;}', 'if(salaryItem_laborTaxableIncome<=20000){0;}else if(salaryItem_laborTaxableIncome<=50000){2000;}else{7000;}', 92, 0, '2022-08-01 16:12:44', '2022-08-01 16:12:44') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341811881, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=0){0;}else{{нĿ.˰Ӧ˰ö}*{нĿ.˰˰}-{нĿ.˰۳}}', 'if(salaryItem_laborTaxableIncome<=0){0;}else{salaryItem_laborTaxableIncome*salaryItem_laborTaxRate-salaryItem_laborQuickDeductionFactor}', 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341909423, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 92, 0, '2022-08-01 16:18:29', '2022-08-01 16:18:29') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341966905, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 92, 0, '2022-08-01 16:19:27', '2022-08-01 16:19:27') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341993723, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 92, 0, '2022-08-01 16:19:54', '2022-08-01 16:19:54') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659342041963, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 92, 0, '2022-08-01 16:20:42', '2022-08-01 16:20:42') +GO + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339063886, '˺ϼ', 1659339063868, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 1, 92, 0, '2022-08-01 15:31:04', '2022-08-01 15:31:04') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339100354, '籣˺ϼ', 1659339100298, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 2, 92, 0, '2022-08-01 15:31:40', '2022-08-01 15:31:40') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673751, '', 1659340673739, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673754, '˰', 1659340673739, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917032, '', 1659340916981, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917035, '˰', 1659340916981, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917039, '˰', 1659340916981, 'salaryItem_laborSubtraction', '{нĿ.˰}', 'number', 'salaryItem', 2, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341397539, '˰Ӧ˰ö', 1659341397524, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:09:57', '2022-08-01 16:09:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341564447, '˰Ӧ˰ö', 1659341564390, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:12:44', '2022-08-01 16:12:44') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811897, '˰Ӧ˰ö', 1659341811881, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811901, '˰˰', 1659341811881, 'salaryItem_laborTaxRate', '{нĿ.˰˰}', 'number', 'salaryItem', 3, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811904, '˰۳', 1659341811881, 'salaryItem_laborQuickDeductionFactor', '{нĿ.˰۳}', 'number', 'salaryItem', 4, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341909473, 'ҵ', 1659341909423, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:18:29', '2022-08-01 16:18:29') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341966920, '˰ϱ', 1659341966905, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:19:27', '2022-08-01 16:19:27') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341993736, '', 1659341993723, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:19:54', '2022-08-01 16:19:54') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659342041967, '׼۳ľ', 1659342041963, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:20:42', '2022-08-01 16:20:42') +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202208080403.sql b/resource/sqlupgrade/SQLServer/sql202208080403.sql new file mode 100644 index 000000000..bbfc8ded7 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202208080403.sql @@ -0,0 +1,40 @@ +Alter table hrsa_bill_detail Alter column social_payment_base_string varchar(max) +GO +Alter table hrsa_bill_detail Alter column fund_payment_base_string varchar(max) +GO +Alter table hrsa_bill_detail Alter column other_payment_base_string varchar(max) +GO +Alter table hrsa_bill_detail Alter column social_per_json varchar(max) +GO +Alter table hrsa_bill_detail Alter column fund_per_json varchar(max) +GO +Alter table hrsa_bill_detail Alter column other_per_json varchar(max) +GO +Alter table hrsa_bill_detail Alter column social_com_json varchar(max) +GO +Alter table hrsa_bill_detail Alter column fund_com_json varchar(max) +GO +Alter table hrsa_bill_detail Alter column other_com_json varchar(max) +GO + + + + +Alter table hrsa_bill_detail_temp Alter column social_payment_base_string varchar(max) +GO +Alter table hrsa_bill_detail_temp Alter column fund_payment_base_string varchar(max) +GO +Alter table hrsa_bill_detail_temp Alter column other_payment_base_string varchar(max) +GO +Alter table hrsa_bill_detail_temp Alter column social_per_json varchar(max) +GO +Alter table hrsa_bill_detail_temp Alter column fund_per_json varchar(max) +GO +Alter table hrsa_bill_detail_temp Alter column other_per_json varchar(max) +GO +Alter table hrsa_bill_detail_temp Alter column social_com_json varchar(max) +GO +Alter table hrsa_bill_detail_temp Alter column fund_com_json varchar(max) +GO +Alter table hrsa_bill_detail_temp Alter column other_com_json varchar(max) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202208240403.sql b/resource/sqlupgrade/SQLServer/sql202208240403.sql new file mode 100644 index 000000000..606dc20e2 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202208240403.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_social_security_scheme ADD shared_type varchar(255) NULL +GO + +ALTER TABLE hrsa_social_security_scheme ADD tax_agent_ids varchar(500) NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202208240503.sql b/resource/sqlupgrade/SQLServer/sql202208240503.sql new file mode 100644 index 000000000..d84790507 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202208240503.sql @@ -0,0 +1,36 @@ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +SET ANSI_PADDING ON +GO + +CREATE TABLE[hrsa_salary_item_hide]( + [id] [bigint] NOT NULL, + [salary_sob_id] [bigint] NOT NULL, + [salary_item_id] [bigint] NOT NULL, + [is_group] [int] NOT NULL, + [item_hide] [bigint] NULL, + [creator] [bigint] NOT NULL, + [delete_type] [int] NOT NULL, + [tenant_key] [varchar](200) NULL, + [create_time] [datetime] NOT NULL, + [update_time] [datetime] NULL, + CONSTRAINT [PK_hrsa_salary_item_hide] PRIMARY KEY CLUSTERED +( + [id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO + +SET ANSI_PADDING OFF +GO + +ALTER TABLE [dbo].[hrsa_salary_item_hide] ADD CONSTRAINT [DF_hrsa_salary_item_hide_create_time] DEFAULT (getdate()) FOR [create_time] +GO + +ALTER TABLE [dbo].[hrsa_salary_item_hide] ADD CONSTRAINT [DF_hrsa_salary_item_hide_update_time] DEFAULT (getdate()) FOR [update_time] +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202210080203.sql b/resource/sqlupgrade/SQLServer/sql202210080203.sql new file mode 100644 index 000000000..65528cc6b --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202210080203.sql @@ -0,0 +1,55 @@ +CREATE TABLE [hrsa_excel_bill_detail] ( + [id] bigint NOT NULL, + [employee_id] bigint NOT NULL, + [bill_month] varchar(30) COLLATE Chinese_PRC_CI_AS NOT NULL, + [bill_status] int NOT NULL, + [payment_status] int NOT NULL, + [supplementary_month] varchar(50) COLLATE Chinese_PRC_CI_AS NULL, + [supplementary_projects] varchar(50) COLLATE Chinese_PRC_CI_AS NULL, + [resource_from] int NOT NULL, + [social_pay_org] int NULL, + [social_account] varchar(50) COLLATE Chinese_PRC_CI_AS NULL, + [social_scheme_id] bigint NULL, + [social_payment_base_string] varchar(max) COLLATE Chinese_PRC_CI_AS NULL, + [fund_pay_org] int NULL, + [fund_account] varchar(50) COLLATE Chinese_PRC_CI_AS NULL, + [supplement_fund_account] varchar(50) COLLATE Chinese_PRC_CI_AS NULL, + [fund_scheme_id] int NULL, + [fund_payment_base_string] varchar(max) COLLATE Chinese_PRC_CI_AS NULL, + [other_pay_org] int NULL, + [other_scheme_id] bigint NULL, + [other_payment_base_string] varchar(max) COLLATE Chinese_PRC_CI_AS NULL, + [social_per_json] varchar(max) COLLATE Chinese_PRC_CI_AS NULL, + [social_per_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [fund_per_json] varchar(max) COLLATE Chinese_PRC_CI_AS NULL, + [fund_per_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [other_per_json] varchar(max) COLLATE Chinese_PRC_CI_AS NULL, + [other_per_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [per_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [social_com_json] varchar(max) COLLATE Chinese_PRC_CI_AS NULL, + [social_com_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [fund_com_json] varchar(max) COLLATE Chinese_PRC_CI_AS NULL, + [fund_com_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [other_com_json] varchar(max) COLLATE Chinese_PRC_CI_AS NULL, + [other_com_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [com_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [social_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [fund_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [other_sum] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [total] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + [creator] bigint DEFAULT ('0') NOT NULL, + [create_time] datetime DEFAULT (getdate()) NOT NULL, + [update_time] datetime DEFAULT (getdate()) NOT NULL, + [delete_type] int DEFAULT ('0') NOT NULL, + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS DEFAULT '' NOT NULL, + [payment_organization] bigint NULL, + CONSTRAINT [PK__hrsa_bil__3213E83F75293F9D_copy1] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +) +ON [PRIMARY] +TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [hrsa_excel_bill_detail] SET (LOCK_ESCALATION = TABLE) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202210080403.sql b/resource/sqlupgrade/SQLServer/sql202210080403.sql new file mode 100644 index 000000000..500c742b6 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202210080403.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_archive +ADD run_status varchar(255) NULL , +add_type varchar(255) NULL , +stop_type varchar(255) NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202210170203.sql b/resource/sqlupgrade/SQLServer/sql202210170203.sql new file mode 100644 index 000000000..c804143be --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202210170203.sql @@ -0,0 +1,31 @@ +CREATE TABLE [hrsa_insurance_base_info] ( + +[id] bigint NOT NULL, + +[employee_id] bigint NOT NULL, + +[payment_organization] int NULL, + +[social_archives_id] bigint NULL, + +[fund_archives_id] bigint NULL, + +[other_archives_id] bigint NULL, + +[tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NOT NULL, + +[creator] int NOT NULL, + +[delete_type] int NOT NULL, + +[create_time] datetime NOT NULL, + +[update_time] datetime NOT NULL, + +[run_status] varchar(20) COLLATE Chinese_PRC_CI_AS NOT NULL, + +PRIMARY KEY ([id]) + +) + +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202210170303.sql b/resource/sqlupgrade/SQLServer/sql202210170303.sql new file mode 100644 index 000000000..84886f704 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202210170303.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_sob_range alter column employee_status int NULL +GO + +ALTER TABLE hrsa_salary_sob_range ADD employee_statuses VARCHAR(255) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202211090103.sql b/resource/sqlupgrade/SQLServer/sql202211090103.sql new file mode 100644 index 000000000..00c17a09c --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202211090103.sql @@ -0,0 +1,20 @@ +create table [hrsa_special_add_deduction] +( + [id] bigint identity + primary key, + [employee_id] bigint not null, + [tax_agent_id] bigint not null, + [children_education] varchar(255) default '', + [continuing_education] varchar(255) default '', + [housing_loan_interest] varchar(255) default '', + [housing_rent] varchar(255) default '', + [supporting_elder] varchar(255) default '', + [serious_illness_treatment] varchar(255) default '', + [infant_care] varchar(255) default '', + [create_time] datetime default GETDATE() not null, + [update_time] datetime default GETDATE() not null, + [creator] bigint, + [delete_type] int default 0 not null, + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NOT NULL, +) +go \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202211090301.sql b/resource/sqlupgrade/SQLServer/sql202211090301.sql new file mode 100644 index 000000000..8502f3a61 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202211090301.sql @@ -0,0 +1,86 @@ +delete from HtmlLabelIndex where id = 539971 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 539971,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539971 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539971 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539971 as indexid ,'Rule Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539971 as indexid ,'ҎtO' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlModuleLabel where indexId = 539971 and moduleCode = 'HRM' and type = 'label' +GO +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539971) +GO + + +delete from HtmlLabelIndex where id = 539970 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 539970,'Ӧ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539970 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539970 as indexid ,'Ӧ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539970 as indexid ,'Apply Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539970 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlModuleLabel where indexId = 539970 and moduleCode = 'HRM' and type = 'label' +GO +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539970) +GO + + +delete from HtmlLabelIndex where id = 539968 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 539968,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539968 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539968 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539968 as indexid ,'set up' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539968 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlModuleLabel where indexId = 539968 and moduleCode = 'HRM' and type = 'label' +GO +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539968) +GO + + +delete from HtmlLabelIndex where id = 539967 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 539967,'רӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539967 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539967 as indexid ,'רӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539967 as indexid ,'Special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 539967 as indexid ,'헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlModuleLabel where indexId = 539967 and moduleCode = 'HRM' and type = 'label' +GO +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539967) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202211090402.sql b/resource/sqlupgrade/SQLServer/sql202211090402.sql new file mode 100644 index 000000000..1eb40f2cd --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202211090402.sql @@ -0,0 +1,43 @@ +Delete from LeftMenuInfo where id=100183 +GO +Delete from LeftMenuConfig where infoid=100183 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100181,0 +GO +EXECUTE LMInfo_Insert 100183,539970,'','',2,100181,0,18 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/appconfig' where id = 100183 +GO + +Delete from LeftMenuInfo where id=100182 +GO +Delete from LeftMenuConfig where infoid=100182 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100181,-1 +GO +EXECUTE LMInfo_Insert 100182,539971,'','',2,100181,-1,18 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/sysconfig-1' where id = 100182 +GO + +Delete from LeftMenuInfo where id=100180 +GO +Delete from LeftMenuConfig where infoid=100180 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100126,0 +GO +EXECUTE LMInfo_Insert 100180,539967,'','',2,100126,0,18 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/specialAddDeduction' where id = 100180 +GO + +Delete from LeftMenuInfo where id=100181 +GO +Delete from LeftMenuConfig where infoid=100181 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,9 +GO +EXECUTE LMInfo_Insert 100181,539968,'','',2,100118,9,18 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100181 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202211170503.sql b/resource/sqlupgrade/SQLServer/sql202211170503.sql new file mode 100644 index 000000000..04f57dc5a --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202211170503.sql @@ -0,0 +1,8 @@ +alter table hrsa_salary_item add shared_type int +go + +alter table hrsa_salary_item add tax_agent_ids varchar(1024) +go + +ALTER TABLE hrsa_salary_acct_record ADD lock_salary_item_ids varchar(2000) +go \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202212080903.sql b/resource/sqlupgrade/SQLServer/sql202212080903.sql new file mode 100644 index 000000000..47e3e3abc --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202212080903.sql @@ -0,0 +1,71 @@ +CREATE TABLE [hrsa_compensation_log] ( + + [id] bigint NOT NULL, + + [payment_agency] bigint NULL, + + [payment_organization] bigint NULL, + + [employee_id] bigint NULL, + + [welfare_type] int NULL, + + [category_type] varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + + [country_total] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + + [company_total] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + + [adjustment_total] varchar(512) COLLATE Chinese_PRC_CI_AS NULL, + + [adjust_to] bigint NULL, + + [bill_month] varchar(30) COLLATE Chinese_PRC_CI_AS NULL, + + [creator] bigint NULL, + + [delete_type] int NULL, + + [create_time] datetime NULL, + + [update_time] datetime NULL, + + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NULL, + + PRIMARY KEY ([id]) + + ) + +GO + +CREATE TABLE [hrsa_compensation_config] ( + + [id] bigint NOT NULL, + + [payment_agency] bigint NULL, + + [payment_organization] bigint NULL, + + [employee_id] bigint NULL, + + [welfare_type] int NULL, + + [category_type] varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + + [adjust_to] bigint NULL, + + [creator] bigint NULL, + + [delete_type] int NULL, + + [create_time] datetime NULL, + + [update_time] datetime NULL, + + [tenant_key] varchar(10) COLLATE Chinese_PRC_CI_AS NULL, + + PRIMARY KEY ([id]) + + ) + +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202212081003.sql b/resource/sqlupgrade/SQLServer/sql202212081003.sql new file mode 100644 index 000000000..d62f849bd --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202212081003.sql @@ -0,0 +1,30 @@ +create table hrsa_salary_send_range +( + id bigint identity + primary key, + salary_send_id bigint not null, + grant_type varchar(64) not null, + creator bigint default 0, + create_time datetime default GETDATE(), + update_time datetime default GETDATE(), + delete_type int default 0, + tenant_key varchar(10) default '' +) +go + +create table hrsa_salary_send_range_obj +( + id bigint identity + primary key, + salary_send_id bigint not null, + salary_send_range_id bigint not null, + range_type int not null, + target_type int not null, + target_id bigint, + creator bigint default 0, + create_time datetime default GETDATE(), + update_time datetime default GETDATE(), + delete_type int default 0, + tenant_key varchar(10) default '' +) +go \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202212230103.sql b/resource/sqlupgrade/SQLServer/sql202212230103.sql new file mode 100644 index 000000000..19ccd6086 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202212230103.sql @@ -0,0 +1,49 @@ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +SET ANSI_PADDING ON +GO + +CREATE TABLE hrsa_salary_sob_back_item ( +id bigint NOT NULL, +salary_sob_id bigint NULL DEFAULT NULL , +salary_item_id bigint NULL DEFAULT NULL, +salary_item_code varchar(255) NULL DEFAULT NULL , +data_type varchar(255) NULL DEFAULT NULL , +rounding_mode int NULL DEFAULT NULL , +pattern int NULL DEFAULT NULL , +value_type int NULL DEFAULT NULL , +formula_id bigint NULL DEFAULT NULL , +back_calc_type int NULL DEFAULT NULL , +tenant_key varchar(255) NULL DEFAULT NULL , +creator bigint NULL DEFAULT NULL, +delete_type int NULL DEFAULT NULL , +create_time datetime NULL DEFAULT NULL , +update_time datetime NULL DEFAULT NULL , +PRIMARY KEY (id) +) +GO + +alter table hrsa_salary_acct_record add back_calc_status int null +go +alter table hrsa_salary_acct_result add origin_result_value VARCHAR(1000) null +go +alter table hrsa_salary_acct_result_report add origin_result_value VARCHAR(1000) null +go +alter table hrsa_salary_send add salary_acct_type int null +go +alter table hrsa_salary_send add send_status int null +go +alter table hrsa_salary_send_info add salary_acct_type int null +go +alter table hrsa_salary_template add replenish_name VARCHAR(100) null +go +alter table hrsa_salary_template add replenish_rule VARCHAR(255) null +go +alter table hrsa_salary_template add replenish_salary_item_setting text null +go +alter table hrsa_acct_result_temp add origin_result_value VARCHAR(1000) null +go \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202301310403.sql b/resource/sqlupgrade/SQLServer/sql202301310403.sql new file mode 100644 index 000000000..cc722f064 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202301310403.sql @@ -0,0 +1,72 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629577, 'ս', 'annualIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629578, 'ս˰', 'annualTaxRate', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1675043440772, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2023-01-30 09:51:43', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629579, 'ս۳', 'annualQuickDeductionFactor', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674894163247, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629580, 'սӦ˰', 'annualTax', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674896933031, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629581, 'Ӧս', 'annualPayable', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674897014605, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629600, 'ս˰', 'annualTaxFreeIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629601, 'ս', 'annualOther', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2023-01-30 15:33:47', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629602, '׼۳ľս', 'annualDonateTax', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629603, '˰ս', 'annualTaxSavings', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number') +GO +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629604, 'עս', 'annualRemark', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2023-01-30 15:33:31', 'string') +GO + + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845590, 2, 746777981115629577, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 0) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845591, 2, 746777981115629578, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 1) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845592, 2, 746777981115629579, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 2) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845593, 2, 746777981115629580, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 3) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845595, 2, 746777981115629600, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 4) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845596, 2, 746777981115629601, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 5) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845597, 2, 746777981115629602, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 6) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845598, 2, 746777981115629603, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 7) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845599, 2, 746777981115629604, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 8) +GO +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845594, 2, 746777981115629581, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 9) +GO + + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674894163247, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=36000){0;}else if({нĿ.ս}<=144000){210;}else if({нĿ.ս}<=300000){1410;}else if({нĿ.ս}<=420000){2660;}else if({нĿ.ս}<=660000){4410;}else if({нĿ.ս}<=960000){7160;}else{15160;}', 'if(salaryItem_annualIncome<=36000){0;}else if(salaryItem_annualIncome<=144000){210;}else if(salaryItem_annualIncome<=300000){1410;}else if(salaryItem_annualIncome<=420000){2660;}else if(salaryItem_annualIncome<=660000){4410;}else if(salaryItem_annualIncome<=960000){7160;}else{15160;}', 92, 0, '2023-01-28 16:22:43', '2023-01-28 16:22:43') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674896933031, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}*{нĿ.ս˰}-{нĿ.ս۳}', 'salaryItem_annualIncome*salaryItem_annualTaxRate-salaryItem_annualQuickDeductionFactor', 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674897014605, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}-{нĿ.սӦ˰}', 'salaryItem_annualIncome-salaryItem_annualTax', 92, 0, '2023-01-28 17:10:15', '2023-01-28 17:10:15') +GO +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1675043440772, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=0){0;}else if({нĿ.ս}<=36000){0.03;}else if({нĿ.ս}<=144000){0.1;}else if({нĿ.ս}<=300000){0.2;}else if({нĿ.ս}<=420000){0.25;}else if({нĿ.ս}<=660000){0.3;}else if({нĿ.ս}<=960000){0.35;}else{0.45;}', 'if(salaryItem_annualIncome<=0){0;}else if(salaryItem_annualIncome<=36000){0.03;}else if(salaryItem_annualIncome<=144000){0.1;}else if(salaryItem_annualIncome<=300000){0.2;}else if(salaryItem_annualIncome<=420000){0.25;}else if(salaryItem_annualIncome<=660000){0.3;}else if(salaryItem_annualIncome<=960000){0.35;}else{0.45;}', 92, 0, '2023-01-30 09:50:41', '2023-01-30 09:50:41') +GO + + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674894163265, 'ս', 1674894163247, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, '2023-01-28 16:22:43', '2023-01-28 16:22:43') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933036, 'ս', 1674896933031, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933041, 'ս˰', 1674896933031, 'salaryItem_annualTaxRate', '{нĿ.ս˰}', 'number', 'salaryItem', 1, 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933045, 'ս۳', 1674896933031, 'salaryItem_annualQuickDeductionFactor', '{нĿ.ս۳}', 'number', 'salaryItem', 2, 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014622, 'ս', 1674897014605, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, '2023-01-28 17:10:15', '2023-01-28 17:10:15') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014626, 'սӦ˰', 1674897014605, 'salaryItem_annualTax', '{нĿ.սӦ˰}', 'number', 'salaryItem', 1, 92, 0, '2023-01-28 17:10:15', '2023-01-28 17:10:15') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1675043440796, 'ս', 1675043440772, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 1, 92, 0, '2023-01-30 09:50:41', '2023-01-30 09:50:41') +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202302060801.sql b/resource/sqlupgrade/SQLServer/sql202302060801.sql new file mode 100644 index 000000000..54491dbf9 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202302060801.sql @@ -0,0 +1,34 @@ +delete from HtmlLabelIndex where id = 540871 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 540871,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540871 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 540871 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 540871 as indexid ,'file management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 540871 as indexid ,'n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO + + +delete from HtmlLabelIndex where id = 540869 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 540869,'ֶι' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540869 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 540869 as indexid ,'ֶι' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 540869 as indexid ,'Field management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 540869 as indexid ,'ֶι' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202302060902.sql b/resource/sqlupgrade/SQLServer/sql202302060902.sql new file mode 100644 index 000000000..80768a972 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202302060902.sql @@ -0,0 +1,34 @@ +Delete from LeftMenuInfo where id=100125 +GO +Delete from LeftMenuConfig where infoid=100125 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,2 +GO +EXECUTE LMInfo_Insert 100125,538004,'','',2,100118,2,18 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100125 +GO + + + +Delete from LeftMenuInfo where id=100185 +GO +Delete from LeftMenuConfig where infoid=100185 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100125,0 +GO +EXECUTE LMInfo_Insert 100185,540871,'','',2,100125,0,18 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100185 +GO + +Delete from LeftMenuInfo where id=100184 +GO +Delete from LeftMenuConfig where infoid=100184 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100125,-1 +GO +EXECUTE LMInfo_Insert 100184,540869,'','',2,100125,-1,18 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/fieldManagement' where id = 100184 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202302090303.sql b/resource/sqlupgrade/SQLServer/sql202302090303.sql new file mode 100644 index 000000000..0d9d72d37 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202302090303.sql @@ -0,0 +1,9 @@ +ALTER TABLE hrsa_scheme_detail ADD [payment_cycle] int NULL +GO + +ALTER TABLE hrsa_scheme_detail ADD [account_type] int NULL +GO + +ALTER TABLE hrsa_scheme_detail ADD [cycle_setting] varchar(255) NULL + +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202302200403.sql b/resource/sqlupgrade/SQLServer/sql202302200403.sql new file mode 100644 index 000000000..3b8ccb99d --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202302200403.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_item ALTER COLUMN [shared_type] int NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202304040503.sql b/resource/sqlupgrade/SQLServer/sql202304040503.sql new file mode 100644 index 000000000..717757a23 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202304040503.sql @@ -0,0 +1,52 @@ +ALTER TABLE hrsa_other_deduction ADD [private_pension] varchar(255) NULL +GO + +ALTER TABLE hrsa_add_up_situation ADD [add_up_private_pension] varchar(255) NULL +GO + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629605, 'Ͻ', 'privatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1680746056549, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number') +GO + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629698, 'ۼƸϽ', 'addUpPrivatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1681201555316, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number') +GO + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1680746056549, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{˰۳.Ͻ}', 'otherDeduction_privatePension', 92, 0, '2023-04-06 09:54:16', '2023-04-06 09:54:16') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1680746056577, 'Ͻ', 1680746056549, 'otherDeduction_privatePension', '{˰۳.Ͻ}', 'number', 'otherDeduction', 0, 92, 0, '2023-04-06 09:54:16', '2023-04-06 09:54:16') +GO + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681201555316, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.Ͻ}+{ۼ.ۼƸϽ}', 'salaryItem_privatePension+addUpSituation_addUpPrivatePension', 92, 0, '2023-04-11 16:25:55', '2023-04-11 16:25:55') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555332, 'Ͻ', 1681201555316, 'salaryItem_privatePension', '{нĿ.Ͻ}', 'number', 'salaryItem', 0, 92, 0, '2023-04-11 16:25:55', '2023-04-11 16:25:55') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555338, 'ۼƸϽ', 1681201555316, 'addUpSituation_addUpPrivatePension', '{ۼ.ۼƸϽ}', 'number', 'addUpSituation', 1, 92, 0, '2023-04-11 16:25:55', '2023-04-11 16:25:55') +GO + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845610, 1, 746777981115629605, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 10) +GO + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845611, 1, 746777981115629698, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 11) +GO + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681265757380, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}-{нĿ.ۼƸϽ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation-salaryItem_addUpPrivatePension', 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57') +GO + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757404, 'ǰۼ׼۳ľ', 1681265757380, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757408, 'ǰۼƼ', 1681265757380, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757413, 'ǰۼ۳ϼ', 1681265757380, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757417, 'ǰۼרӿ۳ϼ', 1681265757380, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757421, 'ǰۼר۳ϼ', 1681265757380, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757424, 'ǰۼӦ˰ϼ', 1681265757380, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57') +GO +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757428, 'ۼƸϽ', 1681265757380, 'salaryItem_addUpPrivatePension', '{нĿ.ۼƸϽ}', 'number', 'salaryItem', 6, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57') +GO + +update hrsa_sys_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö' +GO +update hrsa_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö' +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202304260103.sql b/resource/sqlupgrade/SQLServer/sql202304260103.sql new file mode 100644 index 000000000..68b44e10b --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202304260103.sql @@ -0,0 +1,2 @@ +update hrsa_sys_salary_item set use_in_employee_salary = 1 where code in ('baseSalary','postSalary') +go \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202304270203.sql b/resource/sqlupgrade/SQLServer/sql202304270203.sql new file mode 100644 index 000000000..953eadd43 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202304270203.sql @@ -0,0 +1,244 @@ +create table hrsa_sub_table +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + sub_table_name nvarchar(100) not null, + dimension nvarchar(20) not null, + start_month nvarchar(10), + end_month nvarchar(10), + pay_org_string nvarchar(500), + pay_agency_string nvarchar(500), + sub_company_string nvarchar(500), + depart_string nvarchar(500), + grade_string nvarchar(500), + position_string nvarchar(500), + status_string nvarchar(500), + employee_type nvarchar(500), + employee_string nvarchar(500), + payment_type_string nvarchar(100) +) +GO + +create table hrsa_sub_table_item +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + table_id bigint not null, + item_name nvarchar(50) not null, + item_value nvarchar(500) not null, + index_value int not null, + total_rule nvarchar(500), + count_rule nvarchar(500), + unit_type int default 2 +) +GO + +alter table hrsa_sub_table add table_type int +GO + +alter table hrsa_sub_table add constraint df_table_type_7b1e7561 default 0 for table_type +GO + +create table hrsa_salary_stats_dim +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + dim_name nvarchar(100), + dim_type nvarchar(20), + remark nvarchar(500), + setting nvarchar(2000), + is_default int, + dim_code nvarchar(50) +) +GO + +create table hrsa_salary_stats_report +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + report_name nvarchar(100), + dimension nvarchar(1000), + tax_agent_setting nvarchar(1000), + income_category_setting nvarchar(20), + sub_company_setting nvarchar(1000), + depart_setting nvarchar(1000), + grade_setting nvarchar(1000), + position_setting nvarchar(1000), + status_setting nvarchar(1000), + employee_setting nvarchar(1000), + hiredate_setting varchar(1000), + leavedate_setting varchar(1000), + salary_start_month datetime, + salary_end_month datetime +) +GO + +create table hrsa_salary_statistics_item +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + item_name nvarchar(50), + item_value nvarchar(1000), + count_rule nvarchar(500), + sum_rule nvarchar(500), + avg_rule nvarchar(500), + max_rule nvarchar(500), + min_rule nvarchar(500), + median_rule nvarchar(500), + index_value int, + unit_type int, + stat_report_id bigint +) +GO + +create table hrsa_charts_setting +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + table_id bigint not null, + charts_type int not null, + item_values nvarchar(500), + item_col_value nvarchar(50) not null, + dimension_range int not null, + item_sort_value nvarchar(500), + item_col_sort_value nvarchar(50), + sort_type int, + sort_num int +) +GO + +create table hrsa_salary_echarts_setting +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + report_id bigint not null, + charts_type int not null, + item_values nvarchar(500), + item_col_value nvarchar(50) not null, + dimension_range int not null, + item_sort_value nvarchar(500), + item_col_sort_value nvarchar(50), + sort_type int, + sort_num int +) +GO + +alter table hrsa_salary_stats_dim alter column dim_type nvarchar(30) +GO + +alter table hrsa_salary_stats_report alter column income_category_setting nvarchar(1000) +GO + +create table hrsa_statreportlogs_detail +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + uuid nvarchar(36) not null, + mainid nvarchar(36) not null, + dataid nvarchar(50) not null, + belongdataid nvarchar(50) not null, + tablename nvarchar(200) not null, + tablenamelabelid nvarchar(50) default '-1' not null, + tablenamedesc nvarchar(50) not null, + fieldname nvarchar(200) not null, + fieldnamelabelid nvarchar(50) default '-1' not null, + newvalue nvarchar(max) not null, + oldvalue nvarchar(max) not null, + newrealvalue nvarchar(max) not null, + oldrealvalue nvarchar(max) not null, + fielddesc nvarchar(200) not null, + showorder int not null, + isdetail int default 0 not null +) +GO + +create table hrsa_statreportlogs +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + uuid nvarchar(36) not null, + log_date datetime not null, + device nvarchar(500) not null, + log_operator bigint not null, + operatorname nvarchar(100), + targetid bigint default '-1' not null, + targetname nvarchar(max) not null, + modulename nvarchar(100) not null, + functionname nvarchar(100) not null, + interfacename nvarchar(100) not null, + requesturl nvarchar(200) not null, + requesturi nvarchar(200) not null, + operatetype nvarchar(50) not null, + operatetypename nvarchar(100) not null, + operatedesc nvarchar(3000) not null, + params nvarchar(max) not null, + belongmainid nvarchar(36) not null, + clientip nvarchar(50) not null, + groupid nvarchar(50) not null, + groupnamelabel nvarchar(1000) not null, + redoservice nvarchar(200) not null, + redocontext nvarchar(max) not null, + cancelservice nvarchar(200) not null, + cancelcontext nvarchar(max) not null, + totalruntime bigint default '0' not null, + mainruntime bigint default '0' not null, + log_result nvarchar(100) not null, + fromterminal nvarchar(100) not null, + resultdesc nvarchar(max) not null, + old_content nvarchar(3000) not null, + link_type nvarchar(20) not null, + link_id bigint default '0' not null, + old_link_id bigint default '0' not null +) +GO + +alter table hrsa_salary_stats_report add remark nvarchar(100) +GO + +alter table hrsa_salary_stats_report add second_dimension nvarchar(100) +GO + +alter table hrsa_salary_stats_report add sort_index nvarchar(100) +GO + +alter table hrsa_salary_stats_report add sort_type nvarchar(100) +GO + +alter table hrsa_salary_stats_dim add label_id int +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202304270303.sql b/resource/sqlupgrade/SQLServer/sql202304270303.sql new file mode 100644 index 000000000..031647ef2 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202304270303.sql @@ -0,0 +1,13 @@ +declare @datashowset_id int +declare @current_date varchar(100) +declare @current_time varchar(100) + +set @current_date = (select CONVERT(varchar(100), GETDATE(), 23)) +set @current_time = (select CONVERT(varchar(100), GETDATE(), 24)) + +INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, 'нĿ', NULL, '', NULL, NULL, NULL, NULL, '', '', @current_date, @current_time, NULL, NULL, '', '', '0',newid(), '', '', '', '', '1', 0, 1) +set @datashowset_id = (select max(id) from datashowset) +INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, @current_date, @current_time, NULL, NULL) +INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES (@datashowset_id, '', 'name', '', 1, 1, newid(), NULL) +INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES (@datashowset_id, '', 'name', '2', '', 1, newid(), '') +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202304270501.sql b/resource/sqlupgrade/SQLServer/sql202304270501.sql new file mode 100644 index 000000000..b24a750aa --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202304270501.sql @@ -0,0 +1,16 @@ +delete from HtmlLabelIndex where id = 542781 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 542781,'нͳƱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 542781 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 542781 as indexid ,'нͳƱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 542781 as indexid ,'Salary Statistics Report' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 542781 as indexid ,'нyӋ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202305050302.sql b/resource/sqlupgrade/SQLServer/sql202305050302.sql new file mode 100644 index 000000000..bc416b421 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202305050302.sql @@ -0,0 +1,10 @@ +Delete from LeftMenuInfo where id=100187 +GO +Delete from LeftMenuConfig where infoid=100187 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100118,9 +GO +EXECUTE LMInfo_Insert 100187,542781,'','',2,100118,9,18 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/analysisOfSalaryStatistics' where id = 100187 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202305170903.sql b/resource/sqlupgrade/SQLServer/sql202305170903.sql new file mode 100644 index 000000000..192b58d22 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202305170903.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_acct_result_log ( + id bigint primary key, + datasource int NOT NULL, + salary_acct_record_id bigint NOT NULL, + salary_acct_result_id bigint NOT NULL, + salary_acct_emp_id bigint NOT NULL, + salary_item_id bigint NOT NULL, + employee_id bigint NOT NULL, + operator bigint NOT NULL, + operate_time datetime NOT NULL, + delete_type int NOT NULL, + update_time datetime NOT NULL +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202306020403.sql b/resource/sqlupgrade/SQLServer/sql202306020403.sql new file mode 100644 index 000000000..1fac9dc64 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202306020403.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_item add sorted_index int null +go \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202306020603.sql b/resource/sqlupgrade/SQLServer/sql202306020603.sql new file mode 100644 index 000000000..9d795bd22 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202306020603.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_template ADD sms_status int NULL +GO + +UPDATE hrsa_salary_template SET msg_status = 1 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202306080103.sql b/resource/sqlupgrade/SQLServer/sql202306080103.sql new file mode 100644 index 000000000..effdb19f4 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202306080103.sql @@ -0,0 +1,2 @@ +alter table hrsa_tax_agent add sorted_index int null +go \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202306200203.sql b/resource/sqlupgrade/SQLServer/sql202306200203.sql new file mode 100644 index 000000000..b53f61312 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202306200203.sql @@ -0,0 +1,5 @@ +update hrsa_formula set formula = '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}' , formulaRunScript='salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction' where id = 1651740238860 +GO + +update hrsa_formula_var set delete_type = 1 where id = 1651740241717 +GO \ No newline at end of file From abd8431d4920deaca128ad3bd0fa16120f1f6049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 26 Jun 2023 16:22:19 +0800 Subject: [PATCH 202/245] =?UTF-8?q?=E6=B0=B4=E5=8D=B0=E4=B8=8A=E7=BA=BF?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202306260103.sql | 13 +++++++++++++ resource/sqlupgrade/JC/sql202306260103.sql | 13 +++++++++++++ resource/sqlupgrade/Mysql/sql202306260103.sql | 12 ++++++++++++ resource/sqlupgrade/Oracle/sql202306260103.sql | 13 +++++++++++++ resource/sqlupgrade/SQLServer/sql202306260103.sql | 14 ++++++++++++++ 5 files changed, 65 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202306260103.sql create mode 100644 resource/sqlupgrade/JC/sql202306260103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202306260103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202306260103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202306260103.sql diff --git a/resource/sqlupgrade/DM/sql202306260103.sql b/resource/sqlupgrade/DM/sql202306260103.sql new file mode 100644 index 000000000..0d80216bc --- /dev/null +++ b/resource/sqlupgrade/DM/sql202306260103.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_salary_bill_watermark +( +id NUMBER(38,0) PRIMARY KEY NOT NULL, +watermark_status NUMBER NULL, +watermark_type VARCHAR2(255) NULL, +watermark_setting CLOB NULL, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +creator NUMBER(38,0) NOT NULL, +delete_type NUMBER NOT NULL, +tenant_key VARCHAR2(255) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202306260103.sql b/resource/sqlupgrade/JC/sql202306260103.sql new file mode 100644 index 000000000..0d80216bc --- /dev/null +++ b/resource/sqlupgrade/JC/sql202306260103.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_salary_bill_watermark +( +id NUMBER(38,0) PRIMARY KEY NOT NULL, +watermark_status NUMBER NULL, +watermark_type VARCHAR2(255) NULL, +watermark_setting CLOB NULL, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +creator NUMBER(38,0) NOT NULL, +delete_type NUMBER NOT NULL, +tenant_key VARCHAR2(255) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202306260103.sql b/resource/sqlupgrade/Mysql/sql202306260103.sql new file mode 100644 index 000000000..305119e3d --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202306260103.sql @@ -0,0 +1,12 @@ +CREATE TABLE hrsa_salary_bill_watermark ( + id bigint NOT NULL, + watermark_status int NULL DEFAULT NULL, + watermark_type varchar(255) NULL DEFAULT NULL, + watermark_setting text NULL, + create_time datetime NULL DEFAULT NULL, + update_time datetime NULL DEFAULT NULL, + creator bigint NULL DEFAULT NULL, + delete_type int NULL DEFAULT NULL, + tenant_key varchar(255) NULL DEFAULT NULL, + PRIMARY KEY (id) USING BTREE +) ; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202306260103.sql b/resource/sqlupgrade/Oracle/sql202306260103.sql new file mode 100644 index 000000000..0d80216bc --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202306260103.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_salary_bill_watermark +( +id NUMBER(38,0) PRIMARY KEY NOT NULL, +watermark_status NUMBER NULL, +watermark_type VARCHAR2(255) NULL, +watermark_setting CLOB NULL, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +creator NUMBER(38,0) NOT NULL, +delete_type NUMBER NOT NULL, +tenant_key VARCHAR2(255) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202306260103.sql b/resource/sqlupgrade/SQLServer/sql202306260103.sql new file mode 100644 index 000000000..68a7bed91 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202306260103.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_bill_watermark +( +id bigint NOT NULL, +watermark_status int NULL DEFAULT NULL, +watermark_type varchar(255) NULL DEFAULT NULL, +watermark_setting text NULL, +create_time datetime NULL DEFAULT NULL, +update_time datetime NULL DEFAULT NULL, +creator bigint NULL DEFAULT NULL, +delete_type int NULL DEFAULT NULL, +tenant_key varchar(255) NULL DEFAULT NULL, +PRIMARY KEY (id) +) +GO \ No newline at end of file From 822ad8745134137b2c3965ecd4a7bb01ced0e2ce Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 27 Jun 2023 14:58:33 +0800 Subject: [PATCH 203/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=A0=A1=E9=AA=8C=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SalaryAcctResultService.java | 7 ++++++ .../impl/SalaryAcctResultServiceImpl.java | 24 ++++++++++++++++++- .../salary/web/SalaryAcctController.java | 7 ++++++ .../wrapper/SalaryAcctResultWrapper.java | 13 +++++++++- 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index a2af68ac5..b15cf93bd 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -200,4 +200,11 @@ public interface SalaryAcctResultService { List listByAcctEmployeeIdsAndSalaryItemIds(Collection salaryAcctEmpIds, Collection salaryItemIds); List listAcctEmpIdByAcctEmpId(List salaryAcctEmployeeIds); + + /** + * 检查当前用户是否有查看权限 + * @param salaryAcctRecordId + * @return + */ + Boolean checkAuth(Long salaryAcctRecordId); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 1a7a539de..555738118 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -7,11 +7,11 @@ import com.engine.salary.common.LocalDateRange; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; +import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.report.bo.SalaryAcctResultReportBO; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.entity.salaryacct.bo.*; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; -import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.*; @@ -20,6 +20,7 @@ import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.*; import com.engine.salary.entity.salarysob.po.*; +import com.engine.salary.entity.taxagent.po.TaxAgentAdminPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; @@ -173,6 +174,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); } + private TaxAgentAdminService getTaxAgentAdminService(User user) { + return ServiceUtil.getService(TaxAgentAdminServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; @@ -1031,4 +1036,21 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // } return salaryItemIds; } + + @Override + public Boolean checkAuth(Long salaryAcctRecordId) { + // 获取该核算记录的个税扣缴义务 + SalaryAcctRecordPO recordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); + if(Objects.isNull(recordPO)) { + return false; + } + SalarySobPO salarySobPO = getSalarySobService(user).getById(recordPO.getSalarySobId()); + Long taxAgentId = salarySobPO.getTaxAgentId(); + List adminTaxAgentList = getTaxAgentAdminService(user).listByEmployeeId(Long.valueOf(user.getUID())); + Optional canOperate = adminTaxAgentList.stream().filter(po -> NumberUtils.compare(taxAgentId, po.getTaxAgentId()) == 0).findFirst(); + if(!canOperate.isPresent()){ + return false; + } + return true; + } } \ No newline at end of file diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 1fdd0a7a6..8df680db0 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -371,6 +371,13 @@ public class SalaryAcctController { // **********************************薪资核算人员相关 end*********************************/ // **********************************薪资核算结果 start*********************************/ + @GET + @Path("/acctresult/checkAuth") + @Produces(MediaType.APPLICATION_JSON) + public String checkAuth(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam("salaryAcctRecordId") Long salaryAcctRecordId) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::checkAuth, salaryAcctRecordId); + } //薪资核算结果列表 @POST diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 13b292d0c..8c0e6404d 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -5,8 +5,8 @@ import com.engine.core.impl.Service; import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.progress.ProgressDTO; +import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; @@ -249,6 +249,17 @@ public class SalaryAcctResultWrapper extends Service { } + /** + * 检查是否有薪资核算结果的查看权限 + * @param salaryAcctRecordId + */ + public Boolean checkAuth(Long salaryAcctRecordId) { + if(Objects.isNull(salaryAcctRecordId)){ + return false; + } + return getSalaryAcctResultService(user).checkAuth(salaryAcctRecordId); + } + /** * 薪资核算-校验 From 1ed02f4d07468ee1fc53fc480382d5fc4c69ae55 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 27 Jun 2023 15:05:07 +0800 Subject: [PATCH 204/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C(=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8F=B0=E8=B4=A6=E5=88=97=E8=A1=A8=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E7=8A=B6=E6=80=81=E5=80=BC=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E9=80=BB=E8=BE=91)=E2=80=94=E2=80=94=E6=9A=82=E6=97=B6?= =?UTF-8?q?=E5=8F=96=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/siaccount/bo/InsuranceAccountBO.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java index 8aa28ab09..cc31abebf 100644 --- a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java +++ b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java @@ -54,8 +54,8 @@ public class InsuranceAccountBO { .id(e.getId()) .accountant(e.getAccountant()) .billMonth(e.getBillMonth()) -// .billStatus(queryLabelId(e.getBillStatus()).getDefaultLabel()) - .billStatus(e.getBillStatus().toString()) + .billStatus(queryLabelId(e.getBillStatus()).getDefaultLabel()) +// .billStatus(e.getBillStatus().toString()) .fundNum(e.getFundNum()) .fundPay(SalaryEntityUtil.thousandthConvert(e.getFundPay())) .lastTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(e.getUpdateTime())) From 89ae0dc7863e4fb2c5516dfade9a81911164ef6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 27 Jun 2023 16:18:42 +0800 Subject: [PATCH 205/245] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E6=97=B6=E5=8F=82=E6=95=B0=E5=8F=98=E6=9B=B4=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/entity/po/SalaryStatisticsItemPO.java | 6 ++---- .../service/impl/SalaryStatisticsItemServiceImpl.java | 2 +- .../report/wrapper/SalaryStatisticsReportWrapper.java | 9 ++++----- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java index 5343ae9b7..6acfff40d 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsItemPO.java @@ -1,10 +1,7 @@ package com.engine.salary.report.entity.po; import com.engine.salary.report.enums.UnitTypeEnum; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; import java.io.Serializable; import java.util.Collection; @@ -14,6 +11,7 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor +@ToString //hrsa_salary_statistics_item") //薪酬报表统计子表自定义统计项") public class SalaryStatisticsItemPO implements Serializable { diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java index 72846cd1f..8c56dc7ef 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java @@ -46,7 +46,7 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt @Override public List listByStatisticsReportId(Long statisticsReportId) { if (statisticsReportId == null) { - return null; + return new ArrayList<>(); } return getSalaryStatisticsItemMapper().listSome(SalaryStatisticsItemPO.builder().statReportId(statisticsReportId).build()); } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 8b2f1b08b..d86adfee1 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -260,11 +260,12 @@ public class SalaryStatisticsReportWrapper extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } + // 查询自定义统计项目 + List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); + // 参数转换 SalaryStatisticsReportBO.poToQueryParam(param, po); - - - String paramMd5 = SecureUtil.md5(param.toString()); + String paramMd5 = SecureUtil.md5(param + salaryStatisticsItemList.toString()); //已缓存的报表id String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); @@ -278,8 +279,6 @@ public class SalaryStatisticsReportWrapper extends Service { } - // 查询自定义统计项目 - List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); // 列表data PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, salaryStatisticsItemList); From 04f05281433eed25d06aff7ac8b7b702a265b898 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 27 Jun 2023 18:00:39 +0800 Subject: [PATCH 206/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A1=A3=E6=A1=88=E6=A8=A1=E6=9D=BF=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=B8=A6=E5=87=BA=E6=A1=A3=E6=A1=88=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryArchiveServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 1dcf84c18..952b24b60 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -390,7 +390,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe List salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); // 1.获取薪资档案所对应的当前生效的薪资项目数据 List salaryArchiveItemList = Collections.emptyList(); - if(CollectionUtils.isNotEmpty(ids) && CollectionUtils.isNotEmpty(salaryItemIds)){ + if(CollectionUtils.isNotEmpty(ids) && CollectionUtils.isNotEmpty(salaryItemIds) || !isPage){ salaryArchiveItemList = getCurrentEffectiveItemList(ids, salaryItemIds); } List finalSalaryArchiveItemList = salaryArchiveItemList; From cdf4421ac2797b01999da998496ceb74ca73cdf3 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 28 Jun 2023 15:56:30 +0800 Subject: [PATCH 207/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-pg?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E9=80=82=E9=85=8D=EF=BC=8C=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96sql=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/PG/sql202205100201.sql | 340 +++++ resource/sqlupgrade/PG/sql202205100402.sql | 197 +++ resource/sqlupgrade/PG/sql202205130903.sql | 1367 ++++++++++++++++++++ resource/sqlupgrade/PG/sql202205200203.sql | 9 + resource/sqlupgrade/PG/sql202205310203.sql | 26 + resource/sqlupgrade/PG/sql202206071403.sql | 125 ++ resource/sqlupgrade/PG/sql202206090403.sql | 3 + resource/sqlupgrade/PG/sql202206141003.sql | 21 + resource/sqlupgrade/PG/sql202206160500.sql | 30 + resource/sqlupgrade/PG/sql202206230403.sql | 15 + resource/sqlupgrade/PG/sql202207110803.sql | 22 + resource/sqlupgrade/PG/sql202207120303.sql | 14 + resource/sqlupgrade/PG/sql202207210203.sql | 4 + resource/sqlupgrade/PG/sql202208051103.sql | 97 ++ resource/sqlupgrade/PG/sql202208080403.sql | 40 + resource/sqlupgrade/PG/sql202208240403.sql | 3 + resource/sqlupgrade/PG/sql202208240503.sql | 13 + resource/sqlupgrade/PG/sql202210080203.sql | 93 ++ resource/sqlupgrade/PG/sql202210080403.sql | 4 + resource/sqlupgrade/PG/sql202210170203.sql | 29 + resource/sqlupgrade/PG/sql202210170303.sql | 4 + resource/sqlupgrade/PG/sql202211090103.sql | 25 + resource/sqlupgrade/PG/sql202211090301.sql | 86 ++ resource/sqlupgrade/PG/sql202211090402.sql | 43 + resource/sqlupgrade/PG/sql202211170503.sql | 5 + resource/sqlupgrade/PG/sql202212080903.sql | 68 + resource/sqlupgrade/PG/sql202212081003.sql | 30 + resource/sqlupgrade/PG/sql202212230103.sql | 29 + resource/sqlupgrade/PG/sql202301310403.sql | 41 + resource/sqlupgrade/PG/sql202302060801.sql | 34 + resource/sqlupgrade/PG/sql202302060902.sql | 34 + resource/sqlupgrade/PG/sql202302090303.sql | 3 + resource/sqlupgrade/PG/sql202302200403.sql | 1 + resource/sqlupgrade/PG/sql202304040503.sql | 33 + resource/sqlupgrade/PG/sql202304260103.sql | 1 + resource/sqlupgrade/PG/sql202304270203.sql | 249 ++++ resource/sqlupgrade/PG/sql202304270303.sql | 7 + resource/sqlupgrade/PG/sql202304270501.sql | 16 + resource/sqlupgrade/PG/sql202305050302.sql | 10 + resource/sqlupgrade/PG/sql202305170903.sql | 14 + resource/sqlupgrade/PG/sql202306020403.sql | 1 + resource/sqlupgrade/PG/sql202306020603.sql | 3 + resource/sqlupgrade/PG/sql202306080103.sql | 1 + resource/sqlupgrade/PG/sql202306200203.sql | 4 + resource/sqlupgrade/PG/sql202306260103.sql | 12 + 45 files changed, 3206 insertions(+) create mode 100644 resource/sqlupgrade/PG/sql202205100201.sql create mode 100644 resource/sqlupgrade/PG/sql202205100402.sql create mode 100644 resource/sqlupgrade/PG/sql202205130903.sql create mode 100644 resource/sqlupgrade/PG/sql202205200203.sql create mode 100644 resource/sqlupgrade/PG/sql202205310203.sql create mode 100644 resource/sqlupgrade/PG/sql202206071403.sql create mode 100644 resource/sqlupgrade/PG/sql202206090403.sql create mode 100644 resource/sqlupgrade/PG/sql202206141003.sql create mode 100644 resource/sqlupgrade/PG/sql202206160500.sql create mode 100644 resource/sqlupgrade/PG/sql202206230403.sql create mode 100644 resource/sqlupgrade/PG/sql202207110803.sql create mode 100644 resource/sqlupgrade/PG/sql202207120303.sql create mode 100644 resource/sqlupgrade/PG/sql202207210203.sql create mode 100644 resource/sqlupgrade/PG/sql202208051103.sql create mode 100644 resource/sqlupgrade/PG/sql202208080403.sql create mode 100644 resource/sqlupgrade/PG/sql202208240403.sql create mode 100644 resource/sqlupgrade/PG/sql202208240503.sql create mode 100644 resource/sqlupgrade/PG/sql202210080203.sql create mode 100644 resource/sqlupgrade/PG/sql202210080403.sql create mode 100644 resource/sqlupgrade/PG/sql202210170203.sql create mode 100644 resource/sqlupgrade/PG/sql202210170303.sql create mode 100644 resource/sqlupgrade/PG/sql202211090103.sql create mode 100644 resource/sqlupgrade/PG/sql202211090301.sql create mode 100644 resource/sqlupgrade/PG/sql202211090402.sql create mode 100644 resource/sqlupgrade/PG/sql202211170503.sql create mode 100644 resource/sqlupgrade/PG/sql202212080903.sql create mode 100644 resource/sqlupgrade/PG/sql202212081003.sql create mode 100644 resource/sqlupgrade/PG/sql202212230103.sql create mode 100644 resource/sqlupgrade/PG/sql202301310403.sql create mode 100644 resource/sqlupgrade/PG/sql202302060801.sql create mode 100644 resource/sqlupgrade/PG/sql202302060902.sql create mode 100644 resource/sqlupgrade/PG/sql202302090303.sql create mode 100644 resource/sqlupgrade/PG/sql202302200403.sql create mode 100644 resource/sqlupgrade/PG/sql202304040503.sql create mode 100644 resource/sqlupgrade/PG/sql202304260103.sql create mode 100644 resource/sqlupgrade/PG/sql202304270203.sql create mode 100644 resource/sqlupgrade/PG/sql202304270303.sql create mode 100644 resource/sqlupgrade/PG/sql202304270501.sql create mode 100644 resource/sqlupgrade/PG/sql202305050302.sql create mode 100644 resource/sqlupgrade/PG/sql202305170903.sql create mode 100644 resource/sqlupgrade/PG/sql202306020403.sql create mode 100644 resource/sqlupgrade/PG/sql202306020603.sql create mode 100644 resource/sqlupgrade/PG/sql202306080103.sql create mode 100644 resource/sqlupgrade/PG/sql202306200203.sql create mode 100644 resource/sqlupgrade/PG/sql202306260103.sql diff --git a/resource/sqlupgrade/PG/sql202205100201.sql b/resource/sqlupgrade/PG/sql202205100201.sql new file mode 100644 index 000000000..6cbf0ae7b --- /dev/null +++ b/resource/sqlupgrade/PG/sql202205100201.sql @@ -0,0 +1,340 @@ +delete from HtmlLabelIndex where id = 537997 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 537997,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537997 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'Salary management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537997 as indexid ,'н' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537997 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 537998 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 537998,'ҵнʸ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537998 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнʸ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'My salary and benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537998 as indexid ,'ҵнY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537998 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 537996 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 537996,'˰۽' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537996 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'˰۽' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Individual income tax withholding agent' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537996 as indexid ,'Ux' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537996 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 537999 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 537999,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 537999 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'Social security benefits' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 537999 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 537999 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538000 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538000,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538000 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'Social security welfare scheme' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538000 as indexid ,'籣' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538000 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538001 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538001,'籣' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538001 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'Social security benefit file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538001 as indexid ,'籣n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538001 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538002 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538002,'籣̨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538002 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'Social security benefit account' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538002 as indexid ,'籣̨~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538002 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538003 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538003,'нĿ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538003 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нĿ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'Salary item management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538003 as indexid ,'нYĿ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538003 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538004 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538004,'нʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538004 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'Salary file' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538004 as indexid ,'нYn' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538004 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538005 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538005,'ݲɼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538005 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'ݲɼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'data acquisition' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538005 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538005 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538006 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538006,'ۼרӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538006 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'ۼרӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Accumulated special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538006 as indexid ,'Ӌ헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538006 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538007 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538007,'˰۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538007 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'˰۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'Other tax exempt deductions' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538007 as indexid ,'ⶐ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538007 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538008 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538008,'ۼ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538008 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'ۼ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Cumulative situation in previous periods' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538008 as indexid ,'Ӌr' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538008 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538009 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538009,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538009 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'Attendance reference' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538009 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538009 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538010 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538010,'н' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538010 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'н' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'Salary a / C set' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538010 as indexid ,'нY~' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538010 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538011 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538011,'нʺ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538011 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нʺ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'Salary accounting' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538011 as indexid ,'нY' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538011 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538012 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538012,'ʵ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538012 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'ʵ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Payroll payment' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538012 as indexid ,'Yΰl' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538012 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538013 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538013,'˰걨' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538013 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'˰걨' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'Individual income tax return' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538013 as indexid ,'' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538013 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 538014 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 538014,'˰˰ʱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 538014 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'˰˰ʱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'Individual income tax rate table' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 538014 as indexid ,'ʱ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 538014 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202205100402.sql b/resource/sqlupgrade/PG/sql202205100402.sql new file mode 100644 index 000000000..41655cf75 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202205100402.sql @@ -0,0 +1,197 @@ +Delete from LeftMenuInfo where id=100118 +; +Delete from LeftMenuConfig where infoid=100118 +; +select LMConfig_U_ByInfoInsert (1,0,-1) +; +select LMInfo_Insert (100118,537997,NULL,NULL,1,0,-1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100118 +; + +Delete from LeftMenuInfo where id=100132 +; +Delete from LeftMenuConfig where infoid=100132 +; +select LMConfig_U_ByInfoInsert (2,100118,5) +; +select LMInfo_Insert (100132,538011,'','',2,100118,5,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/calculate' where id = 100132 +; + +Delete from LeftMenuInfo where id=100125 +; +Delete from LeftMenuConfig where infoid=100125 +; +select LMConfig_U_ByInfoInsert (2,100118,2) +; +select LMInfo_Insert (100125,538004,'','',2,100118,2,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100125 +; + +Delete from LeftMenuInfo where id=100130 +; +Delete from LeftMenuConfig where infoid=100130 +; +select LMConfig_U_ByInfoInsert (2,100126,0) +; +select LMInfo_Insert (100130,538009,'','',2,100126,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/attendance' where id = 100130 +; + +Delete from LeftMenuInfo where id=100129 +; +Delete from LeftMenuConfig where infoid=100129 +; +select LMConfig_U_ByInfoInsert (2,100126,0) +; +select LMInfo_Insert (100129,538008,'','',2,100126,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumSituation' where id = 100129 +; + +Delete from LeftMenuInfo where id=100120 +; +Delete from LeftMenuConfig where infoid=100120 +; +select LMConfig_U_ByInfoInsert (2,100118,0) +; +select LMInfo_Insert (100120,537999,'','',2,100118,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100120 +; + +Delete from LeftMenuInfo where id=100123 +; +Delete from LeftMenuConfig where infoid=100123 +; +select LMConfig_U_ByInfoInsert (2,100120,1) +; +select LMInfo_Insert (100123,538002,'','',2,100120,1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/standingBook' where id = 100123 +; + +Delete from LeftMenuInfo where id=100122 +; +Delete from LeftMenuConfig where infoid=100122 +; +select LMConfig_U_ByInfoInsert (2,100120,0) +; +select LMInfo_Insert (100122,538001,'','',2,100120,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/archives' where id = 100122 +; + +Delete from LeftMenuInfo where id=100135 +; +Delete from LeftMenuConfig where infoid=100135 +; +select LMConfig_U_ByInfoInsert (2,100118,8) +; +select LMInfo_Insert (100135,537996,'','',2,100118,8,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/taxAgent' where id = 100135 +; + +Delete from LeftMenuInfo where id=100121 +; +Delete from LeftMenuConfig where infoid=100121 +; +select LMConfig_U_ByInfoInsert (2,100120,-1) +; +select LMInfo_Insert (100121,538000,'','',2,100120,-1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/programme' where id = 100121 +; + +Delete from LeftMenuInfo where id=100126 +; +Delete from LeftMenuConfig where infoid=100126 +; +select LMConfig_U_ByInfoInsert (2,100118,3) +; +select LMInfo_Insert (100126,538005,'','',2,100118,3,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100126 +; + +Delete from LeftMenuInfo where id=100127 +; +Delete from LeftMenuConfig where infoid=100127 +; +select LMConfig_U_ByInfoInsert (2,100126,-1) +; +select LMInfo_Insert (100127,538006,'','',2,100126,-1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/cumDeduct' where id = 100127 +; + +Delete from LeftMenuInfo where id=100133 +; +Delete from LeftMenuConfig where infoid=100133 +; +select LMConfig_U_ByInfoInsert (2,100118,6) +; +select LMInfo_Insert (100133,538012,'','',2,100118,6,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/payroll' where id = 100133 +; + +Delete from LeftMenuInfo where id=100128 +; +Delete from LeftMenuConfig where infoid=100128 +; +select LMConfig_U_ByInfoInsert (2,100126,0) +; +select LMInfo_Insert (100128,538007,'','',2,100126,0,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/otherDeduct' where id = 100128 +; + +Delete from LeftMenuInfo where id=100119 +; +Delete from LeftMenuConfig where infoid=100119 +; +select LMConfig_U_ByInfoInsert (2,100118,-1) +; +select LMInfo_Insert (100119,537998,'','',2,100118,-1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/mySalary' where id = 100119 +; + +Delete from LeftMenuInfo where id=100131 +; +Delete from LeftMenuConfig where infoid=100131 +; +select LMConfig_U_ByInfoInsert (2,100118,4) +; +select LMInfo_Insert (100131,538010,'','',2,100118,4,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/ledger' where id = 100131 +; + +Delete from LeftMenuInfo where id=100124 +; +Delete from LeftMenuConfig where infoid=100124 +; +select LMConfig_U_ByInfoInsert (2,100118,1) +; +select LMInfo_Insert (100124,538003,'','',2,100118,1,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryItem' where id = 100124 +; + +Delete from LeftMenuInfo where id=100134 +; +Delete from LeftMenuConfig where infoid=100134 +; +select LMConfig_U_ByInfoInsert (2,100118,7) +; +select LMInfo_Insert (100134,538013,'','',2,100118,7,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/declare' where id = 100134 +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202205130903.sql b/resource/sqlupgrade/PG/sql202205130903.sql new file mode 100644 index 000000000..d6b8536ef --- /dev/null +++ b/resource/sqlupgrade/PG/sql202205130903.sql @@ -0,0 +1,1367 @@ + +CREATE TABLE hrsa_acct_result_temp ( + id bigserial NOT NULL, + calculate_key varchar(50) NOT NULL DEFAULT '' , + salary_sob_id bigint NOT NULL DEFAULT 0 , + salary_acct_emp_id bigint NOT NULL DEFAULT 0 , + salary_acct_record_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + tax_agent_id bigint NOT NULL DEFAULT 0 , + salary_item_id bigint NOT NULL DEFAULT 0 , + result_value varchar(1000) NOT NULL DEFAULT '' , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + + +CREATE TABLE hrsa_add_up_deduction ( + id bigserial NOT NULL, + employee_id bigint NOT NULL , + tax_agent_id bigint NOT NULL , + declare_month timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + add_up_child_education varchar(255) NULL DEFAULT '' , + add_up_continuing_education varchar(255) NULL DEFAULT '' , + add_up_housing_loan_interest varchar(255) NULL DEFAULT '' , + add_up_housing_rent varchar(255) NULL DEFAULT '' , + add_up_support_elderly varchar(255) NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_add_up_situation ( + id bigserial NOT NULL, + employee_id bigint NOT NULL , + tax_agent_id bigint NOT NULL , + tax_year_month timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + year int NOT NULL DEFAULT 0 , + add_up_income varchar(255) NULL DEFAULT '' , + add_up_subtraction varchar(255) NULL DEFAULT '' , + add_up_social_security_total varchar(255) NULL DEFAULT '' , + add_up_accumulation_fund_total varchar(255) NULL DEFAULT '' , + add_up_child_education varchar(255) NULL DEFAULT '' , + add_up_continuing_education varchar(255) NULL DEFAULT '' , + add_up_housing_loan_interest varchar(255) NULL DEFAULT '' , + add_up_housing_rent varchar(255) NULL DEFAULT '' , + add_up_support_elderly varchar(255) NULL DEFAULT '' , + add_up_enterprise_and_other varchar(255) NULL DEFAULT '' , + add_up_other_deduction varchar(255) NULL DEFAULT '0.00000' , + add_up_tax_exempt_income varchar(255) NULL DEFAULT '' , + add_up_allowed_donation varchar(255) NULL DEFAULT '' , + add_up_advance_tax varchar(255) NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + + + +CREATE TABLE hrsa_attend_quote ( + id bigint NOT NULL , + salary_year_month timestamp NOT NULL , + year int NOT NULL DEFAULT 0 , + month int NOT NULL DEFAULT 0 , + salary_sob_id bigint NOT NULL , + source_type int NOT NULL DEFAULT 0 , + salary_accounting_status int NOT NULL DEFAULT 0 , + attend_cycle varchar(100) NOT NULL DEFAULT '' , + salary_cycle varchar(100) NOT NULL DEFAULT '' , + description varchar(100) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_attend_quote_data ( + id bigint NOT NULL, + employee_id bigint NOT NULL , + attend_quote_id bigint NOT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_attend_quote_data_value ( + id bigserial NOT NULL , + employee_id bigint NOT NULL DEFAULT 0 , + attend_quote_id bigint NOT NULL DEFAULT 0 , + attend_quote_data_id bigint NOT NULL , + attend_quote_field_id bigint NOT NULL , + data_value varchar(250) NOT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_attend_quote_field ( + id bigserial NOT NULL, + field_name varchar(100) NOT NULL DEFAULT '' , + source_type int NOT NULL DEFAULT 0 , + field_type int NOT NULL DEFAULT 0 , + enable_status int NOT NULL DEFAULT 0 , + code varchar(50) NOT NULL DEFAULT '' , + description varchar(100) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_attend_quote_sync_set ( + id bigserial NOT NULL, + source_type int NOT NULL DEFAULT 0 , + current_setting_content varchar(4000) NOT NULL DEFAULT '' , + default_setting_content varchar(4000) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_bill_batch ( + id bigserial NOT NULL, + bill_month varchar(30) NOT NULL , + bill_status smallint NOT NULL , + social_num int NULL DEFAULT 0 , + fund_num int NULL DEFAULT 0 , + other_num int NULL DEFAULT 0 , + social_pay varchar(4000) NULL DEFAULT NULL , + fund_pay varchar(4000) NULL DEFAULT NULL , + other_pay varchar(4000) NULL DEFAULT NULL , + accountant varchar(200) NOT NULL , + remarks varchar(60) NULL DEFAULT NULL , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_bill_detail ( + id bigserial NOT NULL, + employee_id bigint NOT NULL , + bill_month varchar(30) NOT NULL , + bill_status smallint NOT NULL , + payment_status smallint NOT NULL , + supplementary_month varchar(50) NULL DEFAULT NULL , + supplementary_projects varchar(50) NULL DEFAULT NULL , + resource_from smallint NOT NULL , + social_pay_org bigint NULL DEFAULT NULL , + social_account varchar(50) NULL DEFAULT NULL , + social_scheme_id bigint NULL DEFAULT NULL , + social_payment_base_string varchar(512) NULL DEFAULT NULL , + fund_pay_org bigint NULL DEFAULT NULL , + fund_account varchar(50) NULL DEFAULT NULL , + supplement_fund_account varchar(50) NULL DEFAULT NULL , + fund_scheme_id bigint NULL DEFAULT NULL , + fund_payment_base_string varchar(512) NULL DEFAULT NULL , + other_pay_org bigint NULL DEFAULT NULL , + other_scheme_id bigint NULL DEFAULT NULL , + other_payment_base_string varchar(512) NULL DEFAULT NULL , + social_per_json varchar(512) NULL DEFAULT NULL , + social_per_sum varchar(512) NULL DEFAULT NULL , + fund_per_json varchar(512) NULL DEFAULT NULL , + fund_per_sum varchar(512) NULL DEFAULT NULL , + other_per_json varchar(512) NULL DEFAULT NULL , + other_per_sum varchar(512) NULL DEFAULT NULL , + per_sum varchar(512) NULL DEFAULT NULL , + social_com_json varchar(512) NULL DEFAULT NULL , + social_com_sum varchar(512) NULL DEFAULT NULL , + fund_com_json varchar(512) NULL DEFAULT NULL , + fund_com_sum varchar(512) NULL DEFAULT NULL , + other_com_json varchar(512) NULL DEFAULT NULL , + other_com_sum varchar(512) NULL DEFAULT NULL , + com_sum varchar(512) NULL DEFAULT NULL , + social_sum varchar(512) NULL DEFAULT NULL , + fund_sum varchar(512) NULL DEFAULT NULL , + other_sum varchar(512) NULL DEFAULT NULL , + total varchar(512) NULL DEFAULT NULL , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_bill_detail_temp ( + id bigserial NOT NULL, + employee_id bigint NOT NULL , + bill_month varchar(30) NOT NULL , + bill_status smallint NOT NULL , + payment_status smallint NOT NULL , + supplementary_month varchar(50) NULL DEFAULT NULL , + supplementary_projects varchar(50) NULL DEFAULT NULL , + resource_from smallint NOT NULL , + social_pay_org bigint NULL DEFAULT NULL , + social_account varchar(50) NULL DEFAULT NULL , + social_scheme_id bigint NULL DEFAULT NULL , + social_payment_base_string varchar(512) NULL DEFAULT NULL , + fund_pay_org bigint NULL DEFAULT NULL , + fund_account varchar(50) NULL DEFAULT NULL , + supplement_fund_account varchar(50) NULL DEFAULT NULL , + fund_scheme_id bigint NULL DEFAULT NULL , + fund_payment_base_string varchar(512) NULL DEFAULT NULL , + other_pay_org bigint NULL DEFAULT NULL , + other_scheme_id bigint NULL DEFAULT NULL , + other_payment_base_string varchar(512) NULL DEFAULT NULL , + social_per_json varchar(512) NULL DEFAULT NULL , + social_per_sum varchar(512) NULL DEFAULT NULL , + fund_per_json varchar(512) NULL DEFAULT NULL , + fund_per_sum varchar(512) NULL DEFAULT NULL , + other_per_json varchar(512) NULL DEFAULT NULL , + other_per_sum varchar(512) NULL DEFAULT NULL , + per_sum varchar(512) NULL DEFAULT NULL , + social_com_json varchar(512) NULL DEFAULT NULL , + social_com_sum varchar(512) NULL DEFAULT NULL , + fund_com_json varchar(512) NULL DEFAULT NULL , + fund_com_sum varchar(512) NULL DEFAULT NULL , + other_com_json varchar(512) NULL DEFAULT NULL , + other_com_sum varchar(512) NULL DEFAULT NULL , + com_sum varchar(512) NULL DEFAULT NULL , + social_sum varchar(512) NULL DEFAULT NULL , + fund_sum varchar(512) NULL DEFAULT NULL , + other_sum varchar(512) NULL DEFAULT NULL , + total varchar(512) NULL DEFAULT NULL , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_bill_inspect ( + id bigserial NOT NULL, + employee_id bigint NOT NULL , + bill_month varchar(30) NOT NULL , + payment_status smallint NOT NULL , + supplementary_month varchar(50) NULL DEFAULT NULL , + supplementary_projects varchar(50) NULL DEFAULT NULL , + inspect_status smallint NOT NULL , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_check_result ( + id bigint NOT NULL , + salary_acct_record_id bigint NOT NULL DEFAULT 0 , + salary_check_rule_id bigint NOT NULL DEFAULT 0 , + formula_id bigint NOT NULL DEFAULT 0 , + ignore_type smallint NOT NULL DEFAULT 0 , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_check_result_record ( + id bigint NOT NULL , + salary_acct_record_id bigint NOT NULL , + salary_check_rule_id bigint NOT NULL DEFAULT 0 , + formula_id bigint NOT NULL DEFAULT 0 , + check_result_id bigint NOT NULL DEFAULT 0 , + salary_acct_emp_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_ck_result_detail_temp ( + id bigint NOT NULL , + salary_acct_emp_id bigint NOT NULL DEFAULT 0 , + salary_acct_record_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + salary_check_rule_id bigint NOT NULL DEFAULT 0 , + formula_id bigint NOT NULL DEFAULT 0 , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + calculate_key varchar(50) NOT NULL , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_excel_acct_result ( + id bigserial NOT NULL, + salary_sob_id bigint NOT NULL DEFAULT 0 , + salary_acct_emp_id bigint NOT NULL DEFAULT 0 , + salary_acct_record_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + salary_item_id bigint NOT NULL DEFAULT 0 , + result_value varchar(1000) NOT NULL DEFAULT '' , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + tax_agent_id bigint NOT NULL DEFAULT 0 , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_formula ( + id bigint NOT NULL, + name varchar(255) NOT NULL , + description varchar(255) NULL DEFAULT NULL , + module varchar(255) NOT NULL , + use_for varchar(255) NULL DEFAULT NULL , + reference_type varchar(255) NOT NULL , + return_type varchar(255) NOT NULL , + validate_type varchar(255) NOT NULL , + extend_param varchar(255) NULL DEFAULT NULL , + formula varchar(4000) NOT NULL , + formulaRunScript varchar(4000) NOT NULL , + creator bigint NOT NULL , + delete_type int NOT NULL , + create_time timestamp NOT NULL , + update_time timestamp NOT NULL , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_formula_var ( + id bigint NOT NULL, + name varchar(255) NOT NULL , + formula_id bigint NOT NULL , + field_id varchar(255) NOT NULL , + field_name varchar(500) NOT NULL , + field_type varchar(255) NOT NULL , + source varchar(255) NOT NULL , + order_index int NOT NULL , + creator bigint NOT NULL , + delete_type int NOT NULL , + create_time timestamp NOT NULL , + update_time timestamp NOT NULL , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_fund_archives ( + id bigserial NOT NULL, + employee_id bigint NOT NULL , + non_payment smallint NULL DEFAULT 0 , + welfare_type smallint NOT NULL , + fund_start_time varchar(20) NULL DEFAULT NULL , + fund_end_time varchar(20) NULL DEFAULT NULL , + fund_scheme_id bigint NULL DEFAULT NULL , + fund_account varchar(50) NULL DEFAULT NULL , + supplement_fund_account varchar(50) NULL DEFAULT NULL , + payment_organization bigint NULL DEFAULT NULL , + under_take smallint NULL DEFAULT 2 , + fund_payment_base_string varchar(4000) NULL DEFAULT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_insurance_category ( + id bigint NOT NULL , + insurance_name varchar(50) NOT NULL , + welfare_type smallint NOT NULL , + is_use smallint NOT NULL DEFAULT 1 , + payment_scope varchar(10) NULL DEFAULT NULL , + data_type smallint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_other_archives ( + id bigserial NOT NULL, + employee_id bigint NOT NULL , + non_payment smallint NULL DEFAULT 0 , + welfare_type smallint NOT NULL , + other_start_time varchar(20) NULL DEFAULT NULL , + other_end_time varchar(20) NULL DEFAULT NULL , + other_scheme_id bigint NULL DEFAULT NULL , + payment_organization bigint NULL DEFAULT NULL , + under_take smallint NULL DEFAULT 2 , + other_payment_base_string varchar(4000) NULL DEFAULT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_other_deduction ( + id bigserial NOT NULL, + employee_id bigint NOT NULL , + tax_agent_id bigint NOT NULL , + declare_month timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + business_healthy_insurance varchar(255) NULL DEFAULT '0.00000' , + tax_delay_endowment_insurance varchar(255) NULL DEFAULT '' , + other_deduction varchar(255) NULL DEFAULT '' , + deduction_allowed_donation varchar(255) NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + + +CREATE TABLE hrsa_salary_acct_emp ( + id bigserial NOT NULL, + salary_acct_record_id bigint NOT NULL DEFAULT 0 , + salary_sob_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + tax_agent_id bigint NOT NULL DEFAULT 0 , + salary_month timestamp NOT NULL DEFAULT '0001-01-01 00:00:00' , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_salary_acct_record ( + id bigserial NOT NULL, + salary_month date NOT NULL DEFAULT '0001-01-01' , + tax_cycle date NOT NULL DEFAULT '0001-01-01' , + salary_sob_id bigint NOT NULL DEFAULT 0 , + status smallint NOT NULL DEFAULT 1 , + acct_times int NOT NULL DEFAULT 0 , + description varchar(100) NOT NULL DEFAULT '' , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_salary_acct_result ( + id bigserial NOT NULL, + salary_sob_id bigint NOT NULL DEFAULT 0 , + salary_acct_emp_id bigint NOT NULL DEFAULT 0 , + salary_acct_record_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + tax_agent_id bigint NOT NULL DEFAULT 0 , + salary_item_id bigint NOT NULL DEFAULT 0 , + result_value varchar(1000) NOT NULL DEFAULT '' , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_salary_archive ( + id bigint NOT NULL, + employee_id bigint NOT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_salary_archive_dimission ( + id bigserial NOT NULL, + dimission_time_interval varchar(20) NOT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_salary_archive_item ( + id bigserial NOT NULL, + salary_archive_id bigint NOT NULL , + employee_id bigint NOT NULL DEFAULT 0 , + effective_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + adjust_reason varchar(100) NOT NULL DEFAULT '' , + salary_item_id bigint NOT NULL DEFAULT 0 , + item_value varchar(200) NOT NULL DEFAULT '' , + description varchar(200) NOT NULL DEFAULT '' , + operator bigint NOT NULL DEFAULT 0 , + operate_time timestamp NULL DEFAULT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_salary_archive_tax_agent ( + id bigserial NOT NULL, + salary_archive_id bigint NOT NULL , + employee_id bigint NOT NULL DEFAULT 0 , + effective_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + adjust_reason varchar(100) NOT NULL DEFAULT '' , + tax_agent_id numeric(20) NOT NULL DEFAULT 0 , + operator bigint NOT NULL DEFAULT 0 , + operate_time timestamp NULL DEFAULT NULL , + description varchar(200) NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_salary_item ( + id bigint NOT NULL, + name varchar(100) NOT NULL DEFAULT '' , + code varchar(100) NOT NULL DEFAULT '' , + system_type smallint NOT NULL DEFAULT 0 , + sys_salary_item_id bigint NOT NULL DEFAULT 0 , + category smallint NOT NULL DEFAULT 7 , + item_type smallint NOT NULL DEFAULT 1 , + use_default smallint NOT NULL DEFAULT 0 , + use_in_employee_salary smallint NOT NULL DEFAULT 0 , + rounding_mode smallint NOT NULL DEFAULT 1 , + pattern smallint NOT NULL DEFAULT 5 , + value_type smallint NOT NULL DEFAULT 1 , + datasource smallint NOT NULL DEFAULT 0 , + formula_id bigint NOT NULL DEFAULT 0 , + description varchar(1000) NOT NULL DEFAULT '' , + can_edit smallint NOT NULL DEFAULT 1 , + can_delete smallint NOT NULL DEFAULT 1 , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + data_type varchar(20) NOT NULL DEFAULT 'number' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_salary_send ( + id bigint NOT NULL , + salary_month date NOT NULL, + salary_accounting_id bigint NOT NULL DEFAULT 0 , + salary_sob_id bigint NOT NULL , + send_num int NOT NULL DEFAULT 0 , + send_total int NOT NULL DEFAULT 0 , + last_send_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_salary_send_info ( + id bigint NOT NULL , + salary_send_id bigint NOT NULL , + salary_month date NOT NULL, + salary_acct_record_id bigint NOT NULL DEFAULT 0 , + tax_agent_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + send_status int NOT NULL DEFAULT 0 , + send_time timestamp NULL DEFAULT NULL, + salary_template text NULL , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_salary_sob ( + id bigserial NOT NULL, + name varchar(100) NOT NULL DEFAULT '' , + income_category smallint NOT NULL DEFAULT 1 , + salary_cycle_type smallint NOT NULL DEFAULT 3 , + salary_cycle_from_day smallint NOT NULL DEFAULT 1 , + tax_cycle_type smallint NOT NULL DEFAULT 3 , + attend_cycle_type smallint NOT NULL DEFAULT 3 , + attend_cycle_from_day smallint NOT NULL DEFAULT 1 , + social_security_cycle_type smallint NOT NULL DEFAULT 3 , + disable smallint NOT NULL DEFAULT 0 , + description varchar(1000) NOT NULL DEFAULT '' , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_salary_sob_adjust_rule ( + id bigserial NOT NULL, + salary_sob_id bigint NOT NULL , + salary_item_id bigint NOT NULL , + day_of_month smallint NOT NULL DEFAULT 0 , + before_adjustment_type smallint NOT NULL DEFAULT 1 , + after_adjustment_type smallint NOT NULL DEFAULT 1 , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_salary_sob_check_rule ( + id bigserial NOT NULL, + salary_sob_id bigint NOT NULL DEFAULT 0 , + name varchar(100) NOT NULL DEFAULT '' , + formula_id bigint NOT NULL DEFAULT 0 , + description varchar(1000) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + +CREATE TABLE hrsa_salary_sob_default_item ( + id bigint NOT NULL , + income_category smallint NOT NULL DEFAULT 1 , + sys_salary_item_id bigint NOT NULL DEFAULT 0 , + can_edit smallint NOT NULL DEFAULT 1 , + can_delete smallint NOT NULL DEFAULT 1 , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + sob_default_item_group_id bigint NOT NULL , + sorted_index int NOT NULL , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_salary_sob_emp_field ( + id bigserial NOT NULL, + salary_sob_id bigint NOT NULL DEFAULT 0 , + field_code varchar(100) NOT NULL DEFAULT '' , + sorted_index int NOT NULL DEFAULT 0 , + can_delete smallint NOT NULL DEFAULT 1 , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + +CREATE TABLE hrsa_salary_sob_item ( + id bigserial NOT NULL , + salary_sob_id bigint NOT NULL DEFAULT 0 , + salary_item_id bigint NOT NULL DEFAULT 0 , + salary_sob_item_group_id bigint NOT NULL DEFAULT 0 , + formula_id bigint NOT NULL DEFAULT 0 , + sorted_index int NOT NULL DEFAULT 0 , + description varchar(1000) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_salary_sob_item_group ( + id bigserial NOT NULL , + salary_sob_id bigint NOT NULL DEFAULT 0 , + name varchar(100) NOT NULL DEFAULT '' , + sorted_index int NOT NULL DEFAULT 0, + description varchar(1000) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + +CREATE TABLE hrsa_salary_sob_range ( + id bigserial NOT NULL, + salary_sob_id bigint NOT NULL DEFAULT 0 , + target_type smallint NOT NULL DEFAULT 1 , + target_id bigint NOT NULL DEFAULT 0 , + employee_status smallint NOT NULL DEFAULT 0 , + include_type smallint NOT NULL DEFAULT 1 , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_salary_template ( + id bigserial NOT NULL, + name varchar(100) NOT NULL DEFAULT '' , + salary_sob_id bigint NOT NULL , + use_type int NOT NULL DEFAULT 0 , + description varchar(100) NOT NULL DEFAULT '' , + email_status int NOT NULL DEFAULT 0 , + send_email_id bigint NOT NULL DEFAULT 0 , + msg_status int NOT NULL DEFAULT 0 , + theme varchar(100) NOT NULL DEFAULT '' , + background varchar(2000) NULL DEFAULT NULL, + text_content varchar(100) NOT NULL DEFAULT '' , + text_content_position int NOT NULL DEFAULT 0 , + salary_item_null_status int NOT NULL DEFAULT 0 , + salary_item_zero_status int NOT NULL DEFAULT 0 , + salary_item_setting text NOT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) + +); + + + + +CREATE TABLE hrsa_scheme_detail ( + id bigserial NOT NULL, + insurance_id bigint NOT NULL , + primary_id bigint NOT NULL , + effective_time varchar(20) NULL DEFAULT NULL , + expiration_time varchar(20) NULL DEFAULT NULL , + is_payment smallint NOT NULL DEFAULT 1 , + payment_scope smallint NOT NULL , + upper_limit varchar(1024) NULL DEFAULT NULL , + lower_limit varchar(1024) NULL DEFAULT NULL , + payment_proportion varchar(1024) NULL DEFAULT NULL , + fixed_cost varchar(1024) NULL DEFAULT NULL , + valid_num smallint NULL DEFAULT 2 , + rentention_rule smallint NULL DEFAULT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_sob_default_emp_field ( + id bigint NOT NULL , + field_code varchar(30) NOT NULL DEFAULT '' , + sorted_index int NOT NULL DEFAULT 0 , + can_delete smallint NOT NULL DEFAULT 0 , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_sob_default_item_group ( + id bigint NOT NULL , + income_category smallint NOT NULL DEFAULT 1 , + name varchar(100) NOT NULL DEFAULT '' , + sorted_index int NOT NULL DEFAULT 0, + description varchar(1000) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_social_archives ( + id bigserial NOT NULL, + employee_id bigint NOT NULL , + non_payment smallint NULL DEFAULT 0 , + welfare_type smallint NOT NULL , + social_start_time varchar(20) NULL DEFAULT NULL , + social_end_time varchar(20) NULL DEFAULT NULL , + social_scheme_id bigint NULL DEFAULT NULL , + social_account varchar(50) NULL DEFAULT NULL , + payment_organization bigint NULL DEFAULT NULL , + under_take smallint NULL DEFAULT 2 , + social_payment_base_string varchar(4000) NULL DEFAULT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_social_security_scheme ( + id bigserial NOT NULL, + payment_area varchar(100) NOT NULL , + payment_type smallint NOT NULL DEFAULT 1 , + scheme_name varchar(100) NOT NULL , + welfare_type smallint NOT NULL , + is_use smallint NOT NULL DEFAULT 1 , + remarks varchar(30) NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_sys_salary_item ( + id bigint NOT NULL , + name varchar(100) NOT NULL DEFAULT '' , + code varchar(100) NOT NULL DEFAULT '' , + system_type smallint NOT NULL DEFAULT 0 , + category smallint NOT NULL DEFAULT 7 , + item_type smallint NOT NULL DEFAULT 1 , + use_default smallint NOT NULL DEFAULT 0 , + use_in_employee_salary smallint NOT NULL DEFAULT 0 , + rounding_mode smallint NOT NULL DEFAULT 1 , + pattern smallint NOT NULL DEFAULT 5 , + value_type smallint NOT NULL DEFAULT 1 , + datasource smallint NOT NULL DEFAULT 0 , + formula_id bigint NOT NULL DEFAULT 0 , + description varchar(1000) NOT NULL DEFAULT '' , + can_edit smallint NOT NULL DEFAULT 1 , + can_delete smallint NOT NULL DEFAULT 1 , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + data_type varchar(20) NOT NULL DEFAULT 'number' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_sys_tax_rate_base ( + id bigint NOT NULL , + name varchar(100) NOT NULL DEFAULT '' , + system_type smallint NOT NULL DEFAULT 0 , + description varchar(100) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_sys_tax_rate_detail ( + id bigint NOT NULL , + base_id bigint NOT NULL DEFAULT 0 , + index_num int NOT NULL DEFAULT 0 , + income_lower_limit decimal(15, 5) NULL DEFAULT 0.00000 , + income_upper_limit decimal(15, 5) NULL DEFAULT 0.00000 , + duty_free_value decimal(15, 5) NULL DEFAULT 0.00000 , + duty_free_rate decimal(15, 5) NULL DEFAULT 0.00000 , + taxable_income_ll decimal(15, 5) NULL DEFAULT 0.00000 , + taxable_income_ul decimal(15, 5) NOT NULL DEFAULT 0.00000 , + tax_rate decimal(15, 5) NOT NULL DEFAULT 0.00000 , + tax_deduction decimal(15, 5) NOT NULL DEFAULT 0.00000 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_tax_agent ( + id bigserial NOT NULL, + name varchar(100) NOT NULL DEFAULT '' , + description varchar(100) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_tax_declaration ( + id bigint NOT NULL , + salary_month timestamp NOT NULL DEFAULT '0001-01-01 00:00:00' , + tax_cycle timestamp NOT NULL DEFAULT '0001-01-01 00:00:00' , + tax_agent_id bigint NOT NULL DEFAULT 0 , + description varchar(1000) NOT NULL DEFAULT '' , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_tax_declaration_detail ( + id bigint NOT NULL , + tax_declaration_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + field_code varchar(100) NOT NULL DEFAULT '' , + field_value varchar(1000) NOT NULL DEFAULT '' , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_tax_rate_base ( + id bigserial NOT NULL, + name varchar(100) NOT NULL DEFAULT '' , + system_type smallint NOT NULL DEFAULT 0 , + description varchar(100) NOT NULL DEFAULT '' , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + + + +CREATE TABLE hrsa_tax_rate_detail ( + id bigserial NOT NULL, + base_id bigint NOT NULL DEFAULT 0 , + index_num int NOT NULL DEFAULT 0 , + income_upper_limit decimal(15, 5) NULL DEFAULT 0.00000 , + income_lower_limit decimal(15, 5) NULL DEFAULT 0.00000 , + duty_free_value decimal(15, 5) NULL DEFAULT 0.00000 , + duty_free_rate decimal(15, 5) NULL DEFAULT 0.00000 , + taxable_income_ul decimal(15, 5) NULL DEFAULT 0.00000 , + taxable_income_ll decimal(15, 5) NOT NULL DEFAULT 0.00000 , + tax_rate decimal(15, 5) NOT NULL DEFAULT 0.00000 , + tax_deduction decimal(15, 5) NOT NULL DEFAULT 0.00000 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214787, 'нϼ', 'wagesTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651736817711, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:02', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214788, 'ȫһԽϼ', 'annualBonusTotal', 1, 5, 22, 0, 0, 2, 2, 2, 1, 1651737358294, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:07', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214789, '˰ǰۿϼ', 'preTaxDeductionsTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651737635353, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:22', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214790, '£ΣӦ˰ϼ', 'income', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651737859216, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:25', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214791, 'ǰۼӦ˰ϼ', 'addUpIncome', 1, 5, 22, 1, 0, 2, 2, 2, 0, 1651738034028, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:58', '2022-05-10 16:03:28', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214792, 'ϸ', 'endowmentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749914746, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214793, 'ҽƸ', 'medicalInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651749958879, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214795, 'ʧҵ', 'unemploymentInsurance', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750005281, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214796, '', 'housingProvidentFund', 1, 2, 10, 1, 0, 2, 2, 2, 7, 1651750034689, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214797, '£Σר۳ϼ', 'specialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651738826550, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 16:03:40', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214798, 'ǰۼר۳ϼ', 'addUpSpecialDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 7, 1651739000845, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214799, 'ۼŮ', 'addUpChildEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739053212, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214800, 'ۼסϢ', 'addUpHousingLoanInterest', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739100651, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214801, 'ۼס', 'addUpHousingRent', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739151122, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214802, 'ۼƼ', 'addUpContinuingEducation', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739212437, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214803, 'ۼ', 'addUpSupportElderly', 1, 2, 11, 1, 0, 2, 2, 2, 6, 1651739310959, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214804, 'ǰۼרӿ۳ϼ', 'addUpSpeAddiDeduction', 1, 5, 22, 1, 0, 2, 2, 2, 6, 1651739411365, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214805, '£Σ۳ϼ', 'otherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651739815651, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214806, 'ǰۼ۳ϼ', 'addUpOtherDeduction', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651740238860, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214807, '£Σ', 'subtraction', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651740311026, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:56:11', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214808, 'ǰۼƼ', 'addUpSubtraction', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651740397225, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:32:59', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214809, '£Σн˰˰', 'taxRate', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742185837, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214810, '£Σн˰۳', 'quickDeductionFactor', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651742702735, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214811, 'ǰۼӦ˰ö', 'addUpTaxableIncome', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651745445982, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:12', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214812, 'ǰۼӦ˰', 'addUpTaxPayable', 1, 7, 19, 1, 0, 2, 2, 2, 1, 1651748888864, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:14', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214813, 'ǰۼѿ۽˰ϼ', 'addUpAdvanceTax', 1, 5, 22, 1, 0, 2, 2, 2, 5, 1651748978482, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:18', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214814, '£ΣӦ˰', 'refundedOrSupplementedTax', 1, 6, 16, 1, 0, 2, 2, 2, 1, 1651749111981, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674853617092214815, '£Σʵнʺϼ', 'netSalaryTotal', 1, 5, 22, 1, 0, 2, 2, 2, 1, 1651749240004, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 16:04:24', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861648655892480, '', 'baseSalary', 1, 1, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:57:46', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861768948531201, 'λ', 'postSalary', 1, 1, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:57:57', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674861880508628992, 'ڿۿ', 'attendanceDeduction', 1, 2, 9, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:58:04', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093121, '˰ϼ', 'afterTaxReimbursementTotal', 1, 5, 22, 0, 0, 3, 2, 1, 1, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:58:06', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093122, '', 'annuity', 1, 2, 12, 0, 0, 2, 2, 2, 7, 1651749398360, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093123, 'ҵ', 'commercialHealthInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749448800, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:00', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093124, '˰ϱ', 'taxDeferredEndowmentInsurance', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749487187, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093125, 'Ʋԭֵ', 'originalValueOfProperty', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:58:29', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093126, '۳˰', 'deductedTax', 1, 2, 12, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:58:42', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093127, '', 'other', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1651749540147, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093128, '£Σ', 'fee', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093129, '£Σ˰', 'taxFreeIncome', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:58:54', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674914626953093130, '˰', 'lessTaxProportion', 1, 7, 19, 0, 0, 2, 2, 1, 0, 0, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646657, '˰ϼ', 'afterTaxAdjustmentTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:59:09', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646658, 'ǰۼƼ˰ϼ', 'addUpTaxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 5, 0, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646659, '£Σ׼ʿ۳ľ', 'allowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 8, 1651749595061, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646660, 'ǰۼ׼۳ľ', 'addUpAllowedDonation', 1, 5, 22, 0, 0, 2, 2, 2, 5, 1651749675268, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646661, '£Σ˰', 'taxDeduction', 1, 5, 22, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 16:00:25', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674916065864646662, '˰ۿϼ', 'afterTaxDeductionsTotal', 1, 5, 22, 0, 0, 2, 2, 1, 1, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:37', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919424520683521, '˰ۿ', 'afterTaxDeductions', 1, 4, 15, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:39', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919682288984064, '˰', 'afterTaxReimbursement', 1, 3, 13, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:40', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674919776783499264, '˰', 'afterTaxAdjustment', 1, 3, 14, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:48', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (674920588574261248, 'ս', 'annualBonus', 1, 1, 2, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-03-28 10:33:02', '2022-05-10 16:00:51', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532371614588928, 'ǰۼ籣˺ϼ', 'addUpSocialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801433504, '', 0, 1, 0, 0, 'all_teams', '2022-03-07 10:22:55', '2022-05-06 09:44:23', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697532667749400576, 'ǰۼƹ˺ϼ', 'addUpAccumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801586972, '', 0, 1, 0, 0, 'all_teams', '2022-03-07 10:22:55', '2022-05-06 09:46:40', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (697536344384012289, 'ǰۼҵְҵ˺ϼ', 'addUpEnterpriseAndOther', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1651801667770, '', 0, 1, 0, 0, 'all_teams', '2022-03-07 10:22:56', '2022-05-06 09:48:07', 'number'); + + + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651736817711, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.λ}', 'salaryItem_baseSalary+salaryItem_postSalary', 1, 0, '2022-05-05 15:46:58', '2022-05-05 15:46:58'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737358294, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ս}', 'salaryItem_annualBonus', 1, 0, '2022-05-05 15:55:58', '2022-05-05 15:55:58'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737635353, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ڿۿ}', 'salaryItem_attendanceDeduction', 1, 0, '2022-05-05 16:00:35', '2022-05-05 16:00:35'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651737859216, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.нϼ}+{нĿ.ȫһԽϼ}-{нĿ.˰ǰۿϼ}', 'salaryItem_wagesTotal+salaryItem_annualBonusTotal-salaryItem_preTaxDeductionsTotal', 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738034028, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}+{ۼ.ۼ}', 'salaryItem_income+addUpSituation_addUpIncome', 1, 0, '2022-05-05 16:07:14', '2022-05-05 16:07:14'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749914746, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ϱո}', 'welfare_9001socialPer', 1, 0, '2022-05-05 19:25:15', '2022-05-05 19:25:15'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749958879, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҽƱո}', 'welfare_9002socialPer', 1, 0, '2022-05-05 19:25:59', '2022-05-05 19:25:59'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750005281, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ʧҵո}', 'welfare_9004socialPer', 1, 0, '2022-05-05 19:26:45', '2022-05-05 19:26:45'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651750034689, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ס}', 'welfare_9006fundPer', 1, 0, '2022-05-05 19:27:15', '2022-05-05 19:27:15'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651738826550, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ϸ}+{нĿ.ҽƸ}+{нĿ.ʧҵ}+{нĿ.}', 'salaryItem_endowmentInsurance+salaryItem_medicalInsurance+salaryItem_unemploymentInsurance+salaryItem_housingProvidentFund', 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739000845, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σר۳ϼ}+{ۼ.ۼ籣˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'salaryItem_specialDeduction+addUpSituation_addUpSocialSecurityTotal+addUpSituation_addUpAccumulationFundTotal', 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739053212, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼŮ}', 'addUpDeductions_addUpChildEducation', 1, 0, '2022-05-05 16:24:13', '2022-05-05 16:24:13'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739100651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼסϢ}', 'addUpSituation_addUpHousingLoanInterest', 1, 0, '2022-05-05 16:25:01', '2022-05-05 16:25:01'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739151122, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼס}', 'addUpSituation_addUpHousingRent', 1, 0, '2022-05-05 16:25:51', '2022-05-05 16:25:51'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739212437, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼƼ}', 'addUpSituation_addUpContinuingEducation', 1, 0, '2022-05-05 16:26:52', '2022-05-05 16:26:52'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739310959, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼ}', 'addUpSituation_addUpSupportElderly', 1, 0, '2022-05-05 16:28:31', '2022-05-05 16:28:31'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739411365, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoanInterest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly', 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651739815651, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}+{нĿ.ҵ}+{нĿ.˰ϱ}+{нĿ.Ʋԭֵ}+{нĿ.۳˰}+{нĿ.}', 'salaryItem_annuity+salaryItem_commercialHealthInsurance+salaryItem_taxDeferredEndowmentInsurance+salaryItem_originalValueOfProperty+salaryItem_deductedTax+salaryItem_other', 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740238860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}+{ۼ.ۼҵְҵ}', 'salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction+addUpSituation_addUpEnterpriseAndOther', 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740311026, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '5000', '5000', 1, 0, '2022-05-05 16:45:11', '2022-05-05 16:45:11'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651740397225, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ}+{ۼ.ۼƼ}', 'salaryItem_subtraction+addUpSituation_addUpSubtraction', 1, 0, '2022-05-05 16:46:37', '2022-05-05 16:46:37'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742185837, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=0){0;}else if({нĿ.ǰۼӦ˰ö}<=36000){0.03;}else if({нĿ.ǰۼӦ˰ö}<=144000){0.1;}else if({нĿ.ǰۼӦ˰ö}<=300000){0.2;}else if({нĿ.ǰۼӦ˰ö}<=420000){0.25;}else if({нĿ.ǰۼӦ˰ö}<=660000){0.3;}else if({нĿ.ǰۼӦ˰ö}<=960000){0.35;}else{0.45;}', 'if(salaryItem_addUpTaxableIncome<=0){0;}else if(salaryItem_addUpTaxableIncome<=36000){0.03;}else if(salaryItem_addUpTaxableIncome<=144000){0.1;}else if(salaryItem_addUpTaxableIncome<=300000){0.2;}else if(salaryItem_addUpTaxableIncome<=420000){0.25;}else if(salaryItem_addUpTaxableIncome<=660000){0.3;}else if(salaryItem_addUpTaxableIncome<=960000){0.35;}else{0.45;}', 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651742702735, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.ǰۼӦ˰ö}<=36000){0;}else if({нĿ.ǰۼӦ˰ö}<=144000){2520;}else if({нĿ.ǰۼӦ˰ö}<=300000){16920;}else if({нĿ.ǰۼӦ˰ö}<=420000){31920;}else if({нĿ.ǰۼӦ˰ö}<=660000){52920;}else if({нĿ.ǰۼӦ˰ö}<=960000){85920;}else{181920;}', 'if(salaryItem_addUpTaxableIncome<=36000){0;}else if(salaryItem_addUpTaxableIncome<=144000){2520;}else if(salaryItem_addUpTaxableIncome<=300000){16920;}else if(salaryItem_addUpTaxableIncome<=420000){31920;}else if(salaryItem_addUpTaxableIncome<=660000){52920;}else if(salaryItem_addUpTaxableIncome<=960000){85920;}else{181920;}', 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651745445982, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation', 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748888864, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰ö}*{нĿ.£Σн˰˰}-{нĿ.£Σн˰۳}', 'salaryItem_addUpTaxableIncome*salaryItem_taxRate-salaryItem_quickDeductionFactor', 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651748978482, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼ.ۼԤԤ˰}', 'addUpSituation_addUpAdvanceTax', 1, 0, '2022-05-05 19:09:38', '2022-05-05 19:09:38'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749111981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ǰۼӦ˰}-{нĿ.ǰۼѿ۽˰ϼ}-{нĿ.ǰۼƼ˰ϼ}', 'salaryItem_addUpTaxPayable-salaryItem_addUpAdvanceTax-salaryItem_addUpTaxDeduction', 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749240004, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£ΣӦ˰ϼ}-{нĿ.£Σר۳ϼ}-{нĿ.£ΣӦ˰}+{нĿ.˰ϼ}+{нĿ.˰ϼ}-{нĿ.˰ۿϼ}', 'salaryItem_income-salaryItem_specialDeduction-salaryItem_refundedOrSupplementedTax+salaryItem_afterTaxAdjustmentTotal+salaryItem_afterTaxReimbursementTotal-salaryItem_afterTaxDeductionsTotal', 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749398360, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.ҵ}', 'welfare_9007otherPer', 1, 0, '2022-05-05 19:16:38', '2022-05-05 19:16:38'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749448800, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 1, 0, '2022-05-05 19:17:29', '2022-05-05 19:17:29'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749487187, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 1, 0, '2022-05-05 19:18:07', '2022-05-05 19:18:07'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749540147, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 1, 0, '2022-05-05 19:19:00', '2022-05-05 19:19:00'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749595061, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 1, 0, '2022-05-05 19:19:55', '2022-05-05 19:19:55'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651749675268, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ׼ʿ۳ľ}+{ۼ.ۼ׼۳ľ}', 'salaryItem_allowedDonation+addUpSituation_addUpAllowedDonation', 1, 0, '2022-05-05 19:21:15', '2022-05-05 19:21:15'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801433504, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}+{ۼ.ۼ籣˺ϼ}', 'welfare_socialPerSum+addUpSituation_addUpSocialSecurityTotal', 1, 0, '2022-05-06 09:43:54', '2022-05-06 09:43:54'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801586972, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼƹ˺ϼ}', 'welfare_fundPerSum+addUpSituation_addUpAccumulationFundTotal', 1, 0, '2022-05-06 09:46:27', '2022-05-06 09:46:27'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1651801667770, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}+{ۼ.ۼҵְҵ}', 'welfare_otherPerSum+addUpSituation_addUpEnterpriseAndOther', 1, 0, '2022-05-06 09:47:48', '2022-05-06 09:47:48'); + + + + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818266, '', 1651736817711, 'salaryItem_baseSalary', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 15:46:58', '2022-05-05 15:46:58'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651736818329, 'λ', 1651736817711, 'salaryItem_postSalary', '{нĿ.λ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 15:46:58', '2022-05-05 15:46:58'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737360610, 'ս', 1651737358294, 'salaryItem_annualBonus', '{нĿ.ս}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 15:55:58', '2022-05-05 15:55:58'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737636061, 'ڿۿ', 1651737635353, 'salaryItem_attendanceDeduction', '{нĿ.ڿۿ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:00:35', '2022-05-05 16:00:35'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859281, 'нϼ', 1651737859216, 'salaryItem_wagesTotal', '{нĿ.нϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859342, 'ȫһԽϼ', 1651737859216, 'salaryItem_annualBonusTotal', '{нĿ.ȫһԽϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651737859401, '˰ǰۿϼ', 1651737859216, 'salaryItem_preTaxDeductionsTotal', '{нĿ.˰ǰۿϼ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:04:19', '2022-05-05 16:04:19'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035450, '£ΣӦ˰ϼ', 1651738034028, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:07:14', '2022-05-05 16:07:14'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738035488, 'ۼ', 1651738034028, 'addUpSituation_addUpIncome', '{ۼ.ۼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:07:14', '2022-05-05 16:07:14'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738832854, 'ϸ', 1651738826550, 'salaryItem_endowmentInsurance', '{нĿ.ϸ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837363, 'ҽƸ', 1651738826550, 'salaryItem_medicalInsurance', '{нĿ.ҽƸ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738837909, 'ʧҵ', 1651738826550, 'salaryItem_unemploymentInsurance', '{нĿ.ʧҵ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651738838429, '', 1651738826550, 'salaryItem_housingProvidentFund', '{нĿ.}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 16:20:27', '2022-05-05 16:20:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002623, '£Σר۳ϼ', 1651739000845, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739002682, 'ۼ籣˺ϼ', 1651739000845, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739003139, 'ۼƹ˺ϼ', 1651739000845, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 2, 1, 0, '2022-05-05 16:23:21', '2022-05-05 16:23:21'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739054270, 'ۼŮ', 1651739053212, 'addUpDeductions_addUpChildEducation', '{ۼרӿ۳.ۼŮ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-05 16:24:13', '2022-05-05 16:24:13'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739101122, 'ۼסϢ', 1651739100651, 'addUpSituation_addUpHousingLoanInterest', '{ۼ.ۼסϢ}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:25:01', '2022-05-05 16:25:01'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739151221, 'ۼס', 1651739151122, 'addUpSituation_addUpHousingRent', '{ۼ.ۼס}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:25:51', '2022-05-05 16:25:51'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739213082, 'ۼƼ', 1651739212437, 'addUpSituation_addUpContinuingEducation', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:26:52', '2022-05-05 16:26:52'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739311009, 'ۼ', 1651739310959, 'addUpSituation_addUpSupportElderly', '{ۼ.ۼ}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 16:28:31', '2022-05-05 16:28:31'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411502, 'ۼŮ', 1651739411365, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411637, 'ۼסϢ', 1651739411365, 'salaryItem_addUpHousingLoanInterest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411715, 'ۼס', 1651739411365, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739411773, 'ۼƼ', 1651739411365, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739412718, 'ۼ', 1651739411365, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 16:30:11', '2022-05-05 16:30:11'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739819892, '', 1651739815651, 'salaryItem_annuity', '{нĿ.}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739822564, 'ҵ', 1651739815651, 'salaryItem_commercialHealthInsurance', '{нĿ.ҵ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739826637, '˰ϱ', 1651739815651, 'salaryItem_taxDeferredEndowmentInsurance', '{нĿ.˰ϱ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739828954, 'Ʋԭֵ', 1651739815651, 'salaryItem_originalValueOfProperty', '{нĿ.Ʋԭֵ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739829915, '۳˰', 1651739815651, 'salaryItem_deductedTax', '{нĿ.۳˰}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651739830465, '', 1651739815651, 'salaryItem_other', '{нĿ.}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 16:36:56', '2022-05-05 16:36:56'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740240713, '£Σ۳ϼ', 1651740238860, 'salaryItem_otherDeduction', '{нĿ.£Σ۳ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241221, 'ۼ˰۳', 1651740238860, 'addUpSituation_addUpOtherDeduction', '{ۼ.ۼ˰۳}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740241717, 'ۼҵְҵ', 1651740238860, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 2, 1, 0, '2022-05-05 16:43:59', '2022-05-05 16:43:59'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397497, '£Σ', 1651740397225, 'salaryItem_subtraction', '{нĿ.£Σ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 16:46:37', '2022-05-05 16:46:37'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651740397989, 'ۼƼ', 1651740397225, 'addUpSituation_addUpSubtraction', '{ۼ.ۼƼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 16:46:37', '2022-05-05 16:46:37'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185950, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742185995, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186035, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186085, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186122, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186155, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742186199, 'ǰۼӦ˰ö', 1651742185837, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 6, 1, 0, '2022-05-05 17:16:26', '2022-05-05 17:16:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742704826, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705308, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705782, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742705831, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706306, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651742706368, 'ǰۼӦ˰ö', 1651742702735, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 17:25:03', '2022-05-05 17:25:03'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745446904, 'ǰۼӦ˰ϼ', 1651745445982, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447442, 'ǰۼר۳ϼ', 1651745445982, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745447969, 'ǰۼרӿ۳ϼ', 1651745445982, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745448475, 'ǰۼ۳ϼ', 1651745445982, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745451616, 'ǰۼƼ', 1651745445982, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651745452097, 'ǰۼ׼۳ľ', 1651745445982, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 18:10:46', '2022-05-05 18:10:46'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888918, 'ǰۼӦ˰ö', 1651748888864, 'salaryItem_addUpTaxableIncome', '{нĿ.ǰۼӦ˰ö}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888952, '£Σн˰˰', 1651748888864, 'salaryItem_taxRate', '{нĿ.£Σн˰˰}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748888989, '£Σн˰۳', 1651748888864, 'salaryItem_quickDeductionFactor', '{нĿ.£Σн˰۳}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 19:08:09', '2022-05-05 19:08:09'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651748978520, 'ۼԤԤ˰', 1651748978482, 'addUpSituation_addUpAdvanceTax', '{ۼ.ۼԤԤ˰}', 'number', 'addUpSituation', 0, 1, 0, '2022-05-05 19:09:38', '2022-05-05 19:09:38'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112037, 'ǰۼӦ˰', 1651749111981, 'salaryItem_addUpTaxPayable', '{нĿ.ǰۼӦ˰}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112068, 'ǰۼѿ۽˰ϼ', 1651749111981, 'salaryItem_addUpAdvanceTax', '{нĿ.ǰۼѿ۽˰ϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749112116, 'ǰۼƼ˰ϼ', 1651749111981, 'salaryItem_addUpTaxDeduction', '{нĿ.ǰۼƼ˰ϼ}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 19:11:52', '2022-05-05 19:11:52'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240040, '£ΣӦ˰ϼ', 1651749240004, 'salaryItem_income', '{нĿ.£ΣӦ˰ϼ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240082, '£Σר۳ϼ', 1651749240004, 'salaryItem_specialDeduction', '{нĿ.£Σר۳ϼ}', 'number', 'salaryItem', 1, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240117, '£ΣӦ˰', 1651749240004, 'salaryItem_refundedOrSupplementedTax', '{нĿ.£ΣӦ˰}', 'number', 'salaryItem', 2, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240164, '˰ϼ', 1651749240004, 'salaryItem_afterTaxAdjustmentTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 3, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240199, '˰ϼ', 1651749240004, 'salaryItem_afterTaxReimbursementTotal', '{нĿ.˰ϼ}', 'number', 'salaryItem', 4, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749240245, '˰ۿϼ', 1651749240004, 'salaryItem_afterTaxDeductionsTotal', '{нĿ.˰ۿϼ}', 'number', 'salaryItem', 5, 1, 0, '2022-05-05 19:14:00', '2022-05-05 19:14:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749398399, 'ҵ', 1651749398360, 'welfare_9007otherPer', '{籣.ҵ}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:16:38', '2022-05-05 19:16:38'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749448843, 'ҵ', 1651749448800, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:17:29', '2022-05-05 19:17:29'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749487225, '˰ϱ', 1651749487187, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:18:07', '2022-05-05 19:18:07'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749540213, '', 1651749540147, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:19:00', '2022-05-05 19:19:00'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749596472, '׼۳ľ', 1651749595061, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 1, 0, '2022-05-05 19:19:55', '2022-05-05 19:19:55'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675326, '£Σ׼ʿ۳ľ', 1651749675268, 'salaryItem_allowedDonation', '{нĿ.£Σ׼ʿ۳ľ}', 'number', 'salaryItem', 0, 1, 0, '2022-05-05 19:21:15', '2022-05-05 19:21:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749675365, 'ۼ׼۳ľ', 1651749675268, 'addUpSituation_addUpAllowedDonation', '{ۼ.ۼ׼۳ľ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-05 19:21:15', '2022-05-05 19:21:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749914793, 'ϱո', 1651749914746, 'welfare_9001socialPer', '{籣.ϱո}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:25:15', '2022-05-05 19:25:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651749958917, 'ҽƱո', 1651749958879, 'welfare_9002socialPer', '{籣.ҽƱո}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:25:59', '2022-05-05 19:25:59'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750005320, 'ʧҵո', 1651750005281, 'welfare_9004socialPer', '{籣.ʧҵո}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:26:45', '2022-05-05 19:26:45'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651750034727, 'ס', 1651750034689, 'welfare_9006fundPer', '{籣.ס}', 'number', 'welfare', 0, 1, 0, '2022-05-05 19:27:15', '2022-05-05 19:27:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801435862, '籣˺ϼ', 1651801433504, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 0, 1, 0, '2022-05-06 09:43:54', '2022-05-06 09:43:54'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801436423, 'ۼ籣˺ϼ', 1651801433504, 'addUpSituation_addUpSocialSecurityTotal', '{ۼ.ۼ籣˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-06 09:43:54', '2022-05-06 09:43:54'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587331, '˺ϼ', 1651801586972, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, '2022-05-06 09:46:27', '2022-05-06 09:46:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801587794, 'ۼƹ˺ϼ', 1651801586972, 'addUpSituation_addUpAccumulationFundTotal', '{ۼ.ۼƹ˺ϼ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-06 09:46:27', '2022-05-06 09:46:27'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801669969, '˺ϼ', 1651801667770, 'welfare_otherPerSum', '{籣.˺ϼ}', 'number', 'welfare', 0, 1, 0, '2022-05-06 09:47:48', '2022-05-06 09:47:48'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1651801670474, 'ۼҵְҵ', 1651801667770, 'addUpSituation_addUpEnterpriseAndOther', '{ۼ.ۼҵְҵ}', 'number', 'addUpSituation', 1, 1, 0, '2022-05-06 09:47:48', '2022-05-06 09:47:48'); + + + + +INSERT INTO hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291652, 'taxAgentName', 0, 0, 0, '2022-02-23 17:32:08', '2022-02-23 17:32:08', 0, 'all_teams'); +INSERT INTO hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291653, 'username', 1, 0, 0, '2022-02-23 17:32:08', '2022-02-23 17:32:08', 0, 'all_teams'); +INSERT INTO hrsa_sob_default_emp_field(id, field_code, sorted_index, can_delete, creator, create_time, update_time, delete_type, tenant_key) VALUES (681983911359291654, 'departmentName', 2, 0, 0, '2022-02-23 17:32:08', '2022-02-23 17:32:08', 0, 'all_teams'); + + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368900, 4, 703459464954929153, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368899, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368902, 4, 703458434280095745, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368901, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368903, 4, 703458558739300353, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368901, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368905, 4, 674914626953093123, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368906, 4, 674914626953093124, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368907, 4, 674914626953093127, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368908, 4, 674916065864646659, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368904, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368910, 4, 704467747234045953, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368911, 4, 704468391612751873, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368912, 4, 704468443048992769, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368913, 4, 704468490269204481, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368914, 4, 704468528928063488, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 704495325212368909, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (704495325212368915, 4, 703459151591383041, 1, 0, 0, '2022-03-14 11:32:32', '2022-03-17 16:14:11', 0, 'all_teams', 0, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312448, 1, 703459151591383041, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 0, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312449, 1, 674861648655892480, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312450, 1, 674861768948531201, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312451, 1, 674861880508628992, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312452, 1, 674920588574261248, 1, 1, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312453, 1, 674853617092214790, 1, 0, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312454, 1, 674853617092214791, 1, 0, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614083, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312455, 1, 674914626953093129, 1, 0, 0, '2022-03-14 11:32:28', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312456, 1, 703419929857687552, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614083, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312457, 1, 674853617092214792, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312458, 1, 674853617092214793, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312459, 1, 674853617092214795, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312460, 1, 674853617092214796, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312461, 1, 700599184238075904, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312462, 1, 700599446244319233, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312463, 1, 674853617092214797, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312464, 1, 697532371614588928, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312465, 1, 697532667749400576, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 8); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312466, 1, 697536344384012289, 1, 0, 0, '2022-03-18 16:24:49', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614092, 9); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312467, 1, 674853617092214798, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614092, 10); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312468, 1, 674853617092214803, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614103, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312469, 1, 674853617092214802, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312470, 1, 674853617092214801, 1, 0, 0, '2022-03-14 11:32:29', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312471, 1, 674853617092214800, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312472, 1, 674853617092214799, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614103, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312473, 1, 705641858303836161, 1, 0, 0, '2022-03-17 13:48:51', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614103, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312474, 1, 674853617092214804, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614103, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312475, 1, 674853617092214807, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312476, 1, 674853617092214808, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312477, 1, 674914626953093122, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312478, 1, 674914626953093123, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312479, 1, 674914626953093124, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312480, 1, 674914626953093127, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312481, 1, 674853617092214805, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312482, 1, 674853617092214806, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614110, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312483, 1, 674916065864646659, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 8); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312484, 1, 674916065864646660, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 9); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312485, 1, 674853617092214811, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614119, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312486, 1, 674853617092214809, 1, 0, 0, '2022-03-14 11:32:30', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312487, 1, 674853617092214810, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312488, 1, 674853617092214812, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312489, 1, 674853617092214813, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312490, 1, 674916065864646661, 1, 1, 0, '2022-03-18 16:33:37', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312491, 1, 674916065864646658, 1, 1, 0, '2022-03-18 16:33:37', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614119, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312492, 1, 674853617092214814, 1, 0, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614119, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312493, 1, 674853617092214815, 1, 1, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:23', 0, 'all_teams', 703433961629614126, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (706066600446312494, 1, 700769462612156416, 1, 1, 0, '2022-03-14 11:32:31', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614126, 7); + + + + +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614083, 1, 'Լ˰', 0, '', '2022-03-11 14:49:01', '2022-03-11 14:49:01', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614092, 1, 'ר۳', 1, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614103, 1, 'ۼרӿ۳', 2, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614110, 1, '۳Ϣ', 3, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614119, 1, '˰', 4, '', '2022-03-11 14:49:27', '2022-03-11 14:49:27', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (703433961629614126, 1, 'Ӧʵ', 5, '', '2022-03-11 14:49:28', '2022-03-11 14:49:28', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368899, 4, 'Ŀ', 0, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368901, 4, '뼰˰', 1, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368904, 4, '۳Ϣ', 2, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams'); +INSERT INTO hrsa_sob_default_item_group(id, income_category, name, sorted_index, description, create_time, update_time, creator, delete_type, tenant_key) VALUES (704495325212368909, 4, '˰', 3, '', '2022-03-15 17:52:48', '2022-03-15 18:14:53', 0, 0, 'all_teams'); + + + + +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9001, 'ϱ', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9002, 'ҽƱ', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9003, '˱', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9004, 'ʧҵ', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9005, '', 1, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9006, 'ס', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9007, 'ҵ', 3, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); +INSERT INTO hrsa_insurance_category (id, insurance_name, welfare_type, is_use, payment_scope, data_type, create_time, update_time, creator, delete_type, tenant_key) VALUES (9008, 'ס', 2, 1, '1,2', 1, '2022-02-22 10:46:02', '2022-02-22 10:46:02', 0, 0, 'all_teams'); + +ALTER TABLE hrsa_salary_sob_item ADD COLUMN can_delete int NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202205200203.sql b/resource/sqlupgrade/PG/sql202205200203.sql new file mode 100644 index 000000000..6acc95f65 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202205200203.sql @@ -0,0 +1,9 @@ +ALTER TABLE hrsa_add_up_situation +ADD COLUMN add_up_illness_medical varchar(255) NULL , +ADD COLUMN add_up_tax_savings varchar(255) NULL , +ADD COLUMN add_up_infant_care varchar(255) NULL ; + + +ALTER TABLE hrsa_add_up_deduction +ADD COLUMN add_up_illness_medical varchar(255) NULL , +ADD COLUMN add_up_infant_care varchar(255) NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202205310203.sql b/resource/sqlupgrade/PG/sql202205310203.sql new file mode 100644 index 000000000..3853d84d8 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202205310203.sql @@ -0,0 +1,26 @@ +INSERT INTO hrsa_formula (id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1653993466778, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼסϢ}', 'addUpDeductions_addUpHousingLoanInterest', 1, 0, '2022-05-31 18:37:47', '2022-05-31 18:37:47'); +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993466787, 'ۼסϢ', 1653993466778, 'addUpDeductions_addUpHousingLoanInterest', '{ۼרӿ۳.ۼסϢ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:37:47', '2022-05-31 18:37:47'); + + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993837931, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼס}', 'addUpDeductions_addUpHousingRent', 1, 0, '2022-05-31 18:43:58', '2022-05-31 18:43:58'); +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993837947, 'ۼס', 1653993837931, 'addUpDeductions_addUpHousingRent', '{ۼרӿ۳.ۼס}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:43:58', '2022-05-31 18:43:58'); + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653993954233, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƼ}', 'addUpDeductions_addUpContinuingEducation', 1, 0, '2022-05-31 18:45:54', '2022-05-31 18:45:54'); +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653993954257, 'ۼƼ', 1653993954233, 'addUpDeductions_addUpContinuingEducation', '{ۼרӿ۳.ۼƼ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:45:54', '2022-05-31 18:45:54'); + + +INSERT INTO hrsa_formula ( id , name , description , module , use_for , reference_type , return_type , validate_type , extend_param , formula , formulaRunScript , creator , delete_type , create_time , update_time ) VALUES (1653994061764, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼ}', 'addUpDeductions_addUpSupportElderly', 1, 0, '2022-05-31 18:47:42', '2022-05-31 18:47:42'); +INSERT INTO hrsa_formula_var ( id , name , formula_id , field_id , field_name , field_type , source , order_index , creator , delete_type , create_time , update_time ) VALUES (1653994061780, 'ۼ', 1653994061764, 'addUpDeductions_addUpSupportElderly', '{ۼרӿ۳.ۼ}', 'number', 'addUpDeductions', 0, 1, 0, '2022-05-31 18:47:42', '2022-05-31 18:47:42'); + + + +update hrsa_sys_salary_item set formula_id = 1653993466778 where id = 674853617092214800; +update hrsa_sys_salary_item set formula_id = 1653993837931 where id = 674853617092214801; +update hrsa_sys_salary_item set formula_id = 1653993954233 where id = 674853617092214802; +update hrsa_sys_salary_item set formula_id = 1653994061764 where id = 674853617092214803; + + +update hrsa_salary_item set formula_id = 1653993466778 where sys_salary_item_id = 674853617092214800; +update hrsa_salary_item set formula_id = 1653993837931 where sys_salary_item_id = 674853617092214801; +update hrsa_salary_item set formula_id = 1653993954233 where sys_salary_item_id = 674853617092214802; +update hrsa_salary_item set formula_id = 1653994061764 where sys_salary_item_id = 674853617092214803; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202206071403.sql b/resource/sqlupgrade/PG/sql202206071403.sql new file mode 100644 index 000000000..463561511 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202206071403.sql @@ -0,0 +1,125 @@ +CREATE TABLE hrsa_tax_agent_emp +( + id bigint NOT NULL , + create_time timestamp NULL DEFAULT NULL , + update_time timestamp NULL DEFAULT NULL , + creator bigint NULL DEFAULT NULL , + delete_type int NULL DEFAULT 0, + tenant_key varchar(10) NULL DEFAULT NULL , + tax_agent_id bigint NULL DEFAULT NULL , + employee_id bigint NULL DEFAULT NULL , + employee_name varchar(255) NULL DEFAULT NULL, + PRIMARY KEY (id) +) ; + + +CREATE TABLE hrsa_tax_agent_emp_change +( + id bigint NOT NULL , + create_time timestamp NULL DEFAULT NULL , + update_time timestamp NULL DEFAULT NULL , + creator bigint NULL DEFAULT NULL , + delete_type int NULL DEFAULT 0 , + tenant_key varchar(10) NULL DEFAULT NULL , + tax_agent_id bigint NOT NULL , + employee_id bigint NOT NULL , + change_type int NOT NULL DEFAULT 0 , + employee_name varchar(255) NULL DEFAULT NULL, + module_type int NOT NULL DEFAULT 0, + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_tax_agent_admin +( + id bigint NOT NULL , + tax_agent_id bigint NOT NULL , + employee_id bigint NOT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP (0) , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP (0) , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + +CREATE TABLE hrsa_tax_agent_manage_range +( + id bigint NOT NULL , + tax_agent_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + tax_agent_sub_admin_id bigint NOT NULL DEFAULT 0 , + target_type smallint NOT NULL DEFAULT 1 , + target_id bigint NOT NULL DEFAULT 0 , + employee_status varchar(100) NOT NULL, + include_type int NOT NULL DEFAULT 1, + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP (0) , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP (0) , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + range_type int NOT NULL DEFAULT 0, + PRIMARY KEY (id) +) ; + + +CREATE TABLE hrsa_tax_agent_base +( + id bigint NOT NULL , + devolution_status int NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP (0) , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP (0) , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +) ; + + +CREATE TABLE hrsa_tax_agent_sub_admin +( + id bigint NOT NULL , + tax_agent_id bigint NOT NULL , + employee_id bigint NOT NULL , + description varchar(100) NULL DEFAULT NULL , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + creator bigint NOT NULL DEFAULT 0 , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + remark text NULL, + PRIMARY KEY (id) +) ; + + +CREATE TABLE hrsa_tax_agent_sub_admin_emp +( + id bigint NOT NULL , + create_time timestamp NULL DEFAULT NULL , + update_time timestamp NULL DEFAULT NULL , + creator bigint NULL DEFAULT NULL , + delete_type int NULL DEFAULT 0 , + tenant_key varchar(10) NULL DEFAULT NULL , + tax_agent_id bigint NOT NULL DEFAULT 0 , + tax_agent_sub_admin_id bigint NOT NULL DEFAULT 0 , + employee_id bigint NOT NULL DEFAULT 0 , + employee_name varchar(255) NULL DEFAULT NULL , + PRIMARY KEY (id) +) ; + + +ALTER TABLE hrsa_tax_agent ADD COLUMN payment_agency varchar(255) NULL ; + + +ALTER TABLE hrsa_salary_sob ADD COLUMN tax_agent_id bigint NULL ; + + +INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 1, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams'); + +ALTER TABLE hrsa_bill_detail_temp ADD COLUMN payment_organization bigint NULL ; + +ALTER TABLE hrsa_bill_detail ADD COLUMN payment_organization bigint NULL ; + +ALTER TABLE hrsa_bill_batch ADD COLUMN payment_organization bigint NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202206090403.sql b/resource/sqlupgrade/PG/sql202206090403.sql new file mode 100644 index 000000000..679a8cc59 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202206090403.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_tax_declaration ADD COLUMN income_category int NOT NULL ; + +ALTER TABLE hrsa_tax_declaration_detail ADD COLUMN employee_type int NOT NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202206141003.sql b/resource/sqlupgrade/PG/sql202206141003.sql new file mode 100644 index 000000000..120b99e0b --- /dev/null +++ b/resource/sqlupgrade/PG/sql202206141003.sql @@ -0,0 +1,21 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836162, 'ۼӤ׶ջ', 'addUpInfantCare', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655196897860, '', 0, 1, 0, 0, 'all_teams', '2022-05-31 17:36:04', '2022-05-31 17:36:04', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703419929857687552, 'ǰۼ˰', 'addUpTaxFreeIncome', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197296054, '', 0, 1, 0, 0, 'all_teams', '2022-03-11 13:50:17', '2022-03-17 16:13:27', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (705641858303836161, 'ۼƴҽ', 'addUpIllnessMedical', 1, 7, 1, 1, 0, 2, 2, 2, 0, 1655197430967, '', 0, 1, 0, 0, 'all_teams', '2022-03-17 13:30:57', '2022-03-18 17:06:46', 'number'); + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655196897860, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼӤ׶ջ}', 'addUpDeductions_addUpInfantCare', 92, 0, '2022-06-14 16:54:58', '2022-06-14 16:54:58'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197296054, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.£Σ˰}+{ۼ.ۼ˰}', 'salaryItem_taxFreeIncome+addUpSituation_addUpTaxExemptIncome', 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655197430967, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{ۼרӿ۳.ۼƴҽ}', 'addUpDeductions_addUpIllnessMedical', 92, 0, '2022-06-14 17:03:51', '2022-06-14 17:03:51'); + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655196897869, 'ۼӤ׶ջ', 1655196897860, 'addUpDeductions_addUpInfantCare', '{ۼרӿ۳.ۼӤ׶ջ}', 'number', 'addUpDeductions', 0, 92, 0, '2022-06-14 16:54:58', '2022-06-14 16:54:58'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296059, '£Σ˰', 1655197296054, 'salaryItem_taxFreeIncome', '{нĿ.£Σ˰}', 'number', 'salaryItem', 0, 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197296063, 'ۼ˰', 1655197296054, 'addUpSituation_addUpTaxExemptIncome', '{ۼ.ۼ˰}', 'number', 'addUpSituation', 1, 92, 0, '2022-06-14 17:01:36', '2022-06-14 17:01:36'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655197430986, 'ۼƴҽ', 1655197430967, 'addUpDeductions_addUpIllnessMedical', '{ۼרӿ۳.ۼƴҽ}', 'number', 'addUpDeductions', 0, 92, 0, '2022-06-14 17:03:51', '2022-06-14 17:03:51'); + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (728615865977528321, 1, 705641858303836162, 1, 0, 0, '2022-05-31 17:36:04', '2022-05-31 17:36:04', 0, 'all_teams', 703433961629614103, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845569, 1, 674853617092214787, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 8); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845572, 1, 674853617092214788, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 9); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845578, 1, 674853617092214789, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 10); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845567, 1, 733975748932845568, 1, 1, 0, '2022-06-14 14:52:53', '2022-06-14 14:52:53', 0, 'all_teams', 703433961629614083, 11); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202206160500.sql b/resource/sqlupgrade/PG/sql202206160500.sql new file mode 100644 index 000000000..cf0c9b791 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202206160500.sql @@ -0,0 +1,30 @@ +delete from SystemRightDetail where rightid =2693 +; +delete from SystemRightsLanguage where id =2693 +; +delete from SystemRights where id =2693 +; +delete from SystemRightToGroup where rightid =2693 +; +delete from SystemRightType where id =36 +; +delete from SystemRightGroups where id =-22 +; +insert into SystemRights (id,rightdesc,righttype,detachable) values (2693,'нȨ','36',0) +; +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,8,'Salary management authority','Salary management authority') +; +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,9,'н','н') +; +insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (2693,7,'нȨ','нȨ') +; + +insert into SystemRightDetail (id,rightdetailname,rightdetail,rightid) values (43969,'нܹԱ','Salary:Chief',2693) +; + +insert into SystemRightToGroup(rightid,groupid) values (2693,-22) +; +insert into SystemRightGroups (id,rightgroupmark, rightgroupname, rightgroupremark) values(-22,'SALARY','нȨ','н') +; +insert into SystemRightType(id,rightTypeName,rightTypeDesc) VALUES (36,'н','н') +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202206230403.sql b/resource/sqlupgrade/PG/sql202206230403.sql new file mode 100644 index 000000000..7bc92c9a7 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202206230403.sql @@ -0,0 +1,15 @@ +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1655976865885, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.ۼŮ}+{нĿ.ۼסϢ}+{нĿ.ۼס}+{нĿ.ۼƼ}+{нĿ.ۼ}+{нĿ.ۼƴҽ}+{нĿ.ۼӤ׶ջ}', 'salaryItem_addUpChildEducation+salaryItem_addUpHousingLoanInterest+salaryItem_addUpHousingRent+salaryItem_addUpContinuingEducation+salaryItem_addUpSupportElderly+salaryItem_addUpIllnessMedical+salaryItem_addUpInfantCare', 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865909, 'ۼ', 1655976865885, 'salaryItem_addUpSupportElderly', '{нĿ.ۼ}', 'number', 'salaryItem', 4, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865913, 'ۼƼ', 1655976865885, 'salaryItem_addUpContinuingEducation', '{нĿ.ۼƼ}', 'number', 'salaryItem', 3, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865917, 'ۼס', 1655976865885, 'salaryItem_addUpHousingRent', '{нĿ.ۼס}', 'number', 'salaryItem', 2, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865921, 'ۼסϢ', 1655976865885, 'salaryItem_addUpHousingLoanInterest', '{нĿ.ۼסϢ}', 'number', 'salaryItem', 1, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865924, 'ۼŮ', 1655976865885, 'salaryItem_addUpChildEducation', '{нĿ.ۼŮ}', 'number', 'salaryItem', 0, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865929, 'ۼƴҽ', 1655976865885, 'salaryItem_addUpIllnessMedical', '{нĿ.ۼƴҽ}', 'number', 'salaryItem', 5, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1655976865933, 'ۼӤ׶ջ', 1655976865885, 'salaryItem_addUpInfantCare', '{нĿ.ۼӤ׶ջ}', 'number', 'salaryItem', 6, 92, 0, '2022-06-23 17:34:26', '2022-06-23 17:34:26'); + +update hrsa_sys_salary_item set formula_id = 1655976865885 where id = 674853617092214804; + + +update hrsa_salary_item set formula_id = 1655976865885 where sys_salary_item_id = 674853617092214804; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202207110803.sql b/resource/sqlupgrade/PG/sql202207110803.sql new file mode 100644 index 000000000..b9dbcda6e --- /dev/null +++ b/resource/sqlupgrade/PG/sql202207110803.sql @@ -0,0 +1,22 @@ +CREATE TABLE hrsa_salary_acct_result_report +( + id bigint NOT NULL, + salary_sob_id bigint NOT NULL DEFAULT 0 , + salary_acct_emp_id varchar(200) NOT NULL DEFAULT '' , + salary_acct_record_id bigint NOT NULL DEFAULT 0 , + employee_id varchar(200) NULL DEFAULT '' , + tax_agent_id bigint NOT NULL DEFAULT 0 , + salary_item_id bigint NOT NULL DEFAULT 0 , + result_value varchar(1000) NOT NULL DEFAULT '' , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NULL DEFAULT NULL , + update_time timestamp NULL DEFAULT NULL , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + department_id bigint NULL DEFAULT NULL , + subcompany_id bigint NULL DEFAULT NULL , + costcenter_id bigint NULL DEFAULT NULL , + jobtitle_id bigint NULL DEFAULT NULL , + location_id bigint NULL DEFAULT NULL , + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202207120303.sql b/resource/sqlupgrade/PG/sql202207120303.sql new file mode 100644 index 000000000..1a06d70b8 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202207120303.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_sys_conf +( + id bigint NOT NULL, + conf_key varchar(200) NOT NULL , + conf_value varchar(500) NOT NULL , + title varchar(200) NULL DEFAULT NULL , + module varchar(200) NULL DEFAULT NULL , + order_weight int NULL DEFAULT NULL , + description varchar(200) NULL DEFAULT NULL , + delete_type int NULL DEFAULT NULL , + create_time timestamp NULL DEFAULT NULL , + update_time timestamp NULL DEFAULT NULL , + PRIMARY KEY (id) +) ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202207210203.sql b/resource/sqlupgrade/PG/sql202207210203.sql new file mode 100644 index 000000000..a45bb83e2 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202207210203.sql @@ -0,0 +1,4 @@ +ALTER TABLE hrsa_salary_archive +ADD COLUMN tax_agent_id bigint NULL , +ADD COLUMN pay_start_date timestamp NULL DEFAULT NULL , +ADD COLUMN pay_end_date timestamp NULL DEFAULT NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202208051103.sql b/resource/sqlupgrade/PG/sql202208051103.sql new file mode 100644 index 000000000..844d109e7 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202208051103.sql @@ -0,0 +1,97 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599184238075904, '籣˺ϼ', 'socialSecurityTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339100298, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 17:01:24', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (700599446244319233, '˺ϼ', 'accumulationFundTotal', 1, 7, 1, 1, 0, 2, 2, 2, 7, 1659339063868, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 17:01:26', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458434280095745, '', 'laborIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:56', '2022-08-01 16:55:45', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703458558739300353, '˰', 'laborTaxFreeIncome', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-08-01 16:55:54', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459151591383041, 'ע', 'description', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-06-17 09:01:57', 'string') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (703459464954929153, 'Ŀ', 'incomeItems', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-06-17 09:01:57', 'string') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704467747234045953, '˰', 'laborSubtraction', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340673739, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:57', '2022-08-01 17:03:47', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468391612751873, '˰Ӧ˰ö', 'laborTaxableIncome', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659340916981, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:51', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468443048992769, '˰˰', 'laborTaxRate', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341397524, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:53', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468490269204481, '˰۳', 'laborQuickDeductionFactor', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341564390, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:58', '2022-08-01 17:03:54', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (704468528928063488, '˰Ӧ˰', 'laborTaxPayable', 1, 7, 4, 1, 0, 2, 2, 2, 1, 1659341811881, '', 0, 1, 0, 0, 'all_teams', '2022-06-17 09:01:59', '2022-08-01 17:03:55', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (733975748932845568, '˰', 'taxAdjustment', 1, 7, 1, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-06-17 09:01:59', '2022-06-17 09:01:59', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629570, 'ҵ', 'commercialHealthInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341909423, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:38', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629571, '˰ϱ', 'taxDeferredEndowmentInsurance4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341966905, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:40', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629572, '', 'other4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659341993723, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:41', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629573, '£Σ׼۳ľ', 'allowedDonation4', 1, 7, 4, 0, 0, 2, 2, 2, 8, 1659342041963, '', 0, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 17:00:42', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629574, 'ע', 'description4', 1, 7, 4, 1, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-21 14:00:00', '2022-08-01 16:56:25', 'string') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629575, 'ѷнʺϼ', 'issuedTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-08-01 16:59:28', 'number') +; +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629576, 'нʺϼ', 'ressueTotal', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, '', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-08-01 16:59:40', 'number') +; + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339063868, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.˺ϼ}', 'welfare_fundPerSum', 92, 0, '2022-08-01 15:31:04', '2022-08-01 15:31:04') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659339100298, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{籣.籣˺ϼ}', 'welfare_socialPerSum', 92, 0, '2022-08-01 15:31:40', '2022-08-01 15:31:40') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340673739, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.}-{нĿ.˰}<=4000){800;}else{0.2*({нĿ.}-{нĿ.˰})}', 'if(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome<=4000){800;}else{0.2*(salaryItem_laborIncome-salaryItem_laborTaxFreeIncome)}', 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659340916981, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{нĿ.}-{нĿ.˰}-{нĿ.˰}', 'salaryItem_laborIncome-salaryItem_laborTaxFreeIncome-salaryItem_laborSubtraction', 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341397524, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0.2;}else if({нĿ.˰Ӧ˰ö}<=50000){0.3;}else{0.4;}', 'if(salaryItem_laborTaxableIncome<=20000){0.2;}else if(salaryItem_laborTaxableIncome<=50000){0.3;}else{0.4;}', 92, 0, '2022-08-01 16:09:57', '2022-08-01 16:09:57') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341564390, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=20000){0;}else if({нĿ.˰Ӧ˰ö}<=50000){2000;}else{7000;}', 'if(salaryItem_laborTaxableIncome<=20000){0;}else if(salaryItem_laborTaxableIncome<=50000){2000;}else{7000;}', 92, 0, '2022-08-01 16:12:44', '2022-08-01 16:12:44') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341811881, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', 'if({нĿ.˰Ӧ˰ö}<=0){0;}else{{нĿ.˰Ӧ˰ö}*{нĿ.˰˰}-{нĿ.˰۳}}', 'if(salaryItem_laborTaxableIncome<=0){0;}else{salaryItem_laborTaxableIncome*salaryItem_laborTaxRate-salaryItem_laborQuickDeductionFactor}', 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341909423, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.ҵ}', 'otherDeduction_businessHealthyInsurance', 92, 0, '2022-08-01 16:18:29', '2022-08-01 16:18:29') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341966905, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.˰ϱ}', 'otherDeduction_taxDelayEndowmentInsurance', 92, 0, '2022-08-01 16:19:27', '2022-08-01 16:19:27') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659341993723, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.}', 'otherDeduction_otherDeduction', 92, 0, '2022-08-01 16:19:54', '2022-08-01 16:19:54') +; +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1659342041963, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{}', '{˰۳.׼۳ľ}', 'otherDeduction_deductionAllowedDonation', 92, 0, '2022-08-01 16:20:42', '2022-08-01 16:20:42') +; + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339063886, '˺ϼ', 1659339063868, 'welfare_fundPerSum', '{籣.˺ϼ}', 'number', 'welfare', 1, 92, 0, '2022-08-01 15:31:04', '2022-08-01 15:31:04') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659339100354, '籣˺ϼ', 1659339100298, 'welfare_socialPerSum', '{籣.籣˺ϼ}', 'number', 'welfare', 2, 92, 0, '2022-08-01 15:31:40', '2022-08-01 15:31:40') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673751, '', 1659340673739, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340673754, '˰', 1659340673739, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, '2022-08-01 15:57:54', '2022-08-01 15:57:54') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917032, '', 1659340916981, 'salaryItem_laborIncome', '{нĿ.}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917035, '˰', 1659340916981, 'salaryItem_laborTaxFreeIncome', '{нĿ.˰}', 'number', 'salaryItem', 1, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659340917039, '˰', 1659340916981, 'salaryItem_laborSubtraction', '{нĿ.˰}', 'number', 'salaryItem', 2, 92, 0, '2022-08-01 16:01:57', '2022-08-01 16:01:57') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341397539, '˰Ӧ˰ö', 1659341397524, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:09:57', '2022-08-01 16:09:57') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341564447, '˰Ӧ˰ö', 1659341564390, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:12:44', '2022-08-01 16:12:44') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811897, '˰Ӧ˰ö', 1659341811881, 'salaryItem_laborTaxableIncome', '{нĿ.˰Ӧ˰ö}', 'number', 'salaryItem', 0, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811901, '˰˰', 1659341811881, 'salaryItem_laborTaxRate', '{нĿ.˰˰}', 'number', 'salaryItem', 3, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341811904, '˰۳', 1659341811881, 'salaryItem_laborQuickDeductionFactor', '{нĿ.˰۳}', 'number', 'salaryItem', 4, 92, 0, '2022-08-01 16:16:52', '2022-08-01 16:16:52') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341909473, 'ҵ', 1659341909423, 'otherDeduction_businessHealthyInsurance', '{˰۳.ҵ}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:18:29', '2022-08-01 16:18:29') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341966920, '˰ϱ', 1659341966905, 'otherDeduction_taxDelayEndowmentInsurance', '{˰۳.˰ϱ}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:19:27', '2022-08-01 16:19:27') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659341993736, '', 1659341993723, 'otherDeduction_otherDeduction', '{˰۳.}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:19:54', '2022-08-01 16:19:54') +; +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1659342041967, '׼۳ľ', 1659342041963, 'otherDeduction_deductionAllowedDonation', '{˰۳.׼۳ľ}', 'number', 'otherDeduction', 0, 92, 0, '2022-08-01 16:20:42', '2022-08-01 16:20:42') +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202208080403.sql b/resource/sqlupgrade/PG/sql202208080403.sql new file mode 100644 index 000000000..879bd9957 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202208080403.sql @@ -0,0 +1,40 @@ +Alter table hrsa_bill_detail alter social_payment_base_string type varchar(1500) +; +Alter table hrsa_bill_detail alter fund_payment_base_string type varchar(1500) +; +Alter table hrsa_bill_detail alter other_payment_base_string type varchar(1500) +; +Alter table hrsa_bill_detail alter social_per_json type varchar(1500) +; +Alter table hrsa_bill_detail alter fund_per_json type varchar(1500) +; +Alter table hrsa_bill_detail alter other_per_json type varchar(1500) +; +Alter table hrsa_bill_detail alter social_com_json type varchar(1500) +; +Alter table hrsa_bill_detail alter fund_com_json type varchar(1500) +; +Alter table hrsa_bill_detail alter other_com_json type varchar(1500) +; + + + + +Alter table hrsa_bill_detail_temp alter social_payment_base_string type varchar(1500) +; +Alter table hrsa_bill_detail_temp alter fund_payment_base_string type varchar(1500) +; +Alter table hrsa_bill_detail_temp alter other_payment_base_string type varchar(1500) +; +Alter table hrsa_bill_detail_temp alter social_per_json type varchar(1500) +; +Alter table hrsa_bill_detail_temp alter fund_per_json type varchar(1500) +; +Alter table hrsa_bill_detail_temp alter other_per_json type varchar(1500) +; +Alter table hrsa_bill_detail_temp alter social_com_json type varchar(1500) +; +Alter table hrsa_bill_detail_temp alter fund_com_json type varchar(1500) +; +Alter table hrsa_bill_detail_temp alter other_com_json type varchar(1500) +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202208240403.sql b/resource/sqlupgrade/PG/sql202208240403.sql new file mode 100644 index 000000000..513718b84 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202208240403.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_social_security_scheme +ADD COLUMN shared_type varchar(255) NULL , +ADD COLUMN tax_agent_ids varchar(500) NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202208240503.sql b/resource/sqlupgrade/PG/sql202208240503.sql new file mode 100644 index 000000000..ffa045492 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202208240503.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_salary_item_hide ( + id bigint NOT NULL, + salary_sob_id bigint NOT NULL, + salary_item_id bigint NOT NULL, + is_group int NOT NULL, + item_hide bigint NULL DEFAULT 0, + creator bigint NOT NULL DEFAULT 0, + delete_type int NOT NULL DEFAULT 0, + tenant_key varchar(10), + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202210080203.sql b/resource/sqlupgrade/PG/sql202210080203.sql new file mode 100644 index 000000000..995de0bf6 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202210080203.sql @@ -0,0 +1,93 @@ +CREATE TABLE hrsa_excel_bill_detail ( + + id bigint NOT NULL, + + employee_id bigint NOT NULL, + + bill_month varchar(30) NOT NULL, + + bill_status int NOT NULL, + + payment_status int NOT NULL, + + supplementary_month varchar(50) NULL, + + supplementary_projects varchar(50) NULL, + + resource_from int NOT NULL, + + social_pay_org int NULL, + + social_account varchar(50) NULL, + + social_scheme_id bigint NULL, + + social_payment_base_string text NULL, + + fund_pay_org int NULL, + + fund_account varchar(50) NULL, + + supplement_fund_account varchar(50) NULL, + + fund_scheme_id int NULL, + + fund_payment_base_string text NULL, + + other_pay_org int NULL, + + other_scheme_id bigint NULL, + + other_payment_base_string text NULL, + + social_per_json text NULL, + + social_per_sum text NULL, + + fund_per_json text NULL, + + fund_per_sum text NULL, + + other_per_json text NULL, + + other_per_sum text NULL, + + per_sum text NULL, + + social_com_json text NULL, + + social_com_sum text NULL, + + fund_com_json text NULL, + + fund_com_sum text NULL, + + other_com_json text NULL, + + other_com_sum text NULL, + + com_sum text NULL, + + social_sum text NULL, + + fund_sum text NULL, + + other_sum text NULL, + + total text NULL, + + creator bigint NOT NULL DEFAULT 0 , + + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + + delete_type int NOT NULL DEFAULT 0 , + + tenant_key varchar(10) NOT NULL , + + payment_organization bigint NULL, + +PRIMARY KEY (id) + +); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202210080403.sql b/resource/sqlupgrade/PG/sql202210080403.sql new file mode 100644 index 000000000..f6886cb28 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202210080403.sql @@ -0,0 +1,4 @@ +ALTER TABLE hrsa_salary_archive +ADD COLUMN run_status varchar(255) NULL, +ADD COLUMN add_type varchar(255) NULL, +ADD COLUMN stop_type varchar(255) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202210170203.sql b/resource/sqlupgrade/PG/sql202210170203.sql new file mode 100644 index 000000000..8014c2e96 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202210170203.sql @@ -0,0 +1,29 @@ +CREATE TABLE hrsa_insurance_base_info ( + + id bigint NOT NULL, + + employee_id bigint NOT NULL , + + payment_organization int NULL , + + social_archives_id bigint NULL , + + fund_archives_id bigint NULL , + + other_archives_id bigint NULL , + + tenant_key varchar(10) NOT NULL, + + creator int NOT NULL, + + delete_type int NOT NULL, + + create_time timestamp NOT NULL, + + update_time timestamp NOT NULL, + + run_status varchar(20) NOT NULL , + +PRIMARY KEY ( id ) + +); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202210170303.sql b/resource/sqlupgrade/PG/sql202210170303.sql new file mode 100644 index 000000000..b9c35c238 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202210170303.sql @@ -0,0 +1,4 @@ +ALTER TABLE hrsa_salary_sob_range ADD employee_statuses VARCHAR(255); + +ALTER TABLE hrsa_salary_sob_range ALTER employee_status type int; +ALTER TABLE hrsa_salary_sob_range ALTER employee_status drop not null; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202211090103.sql b/resource/sqlupgrade/PG/sql202211090103.sql new file mode 100644 index 000000000..9a72b7633 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202211090103.sql @@ -0,0 +1,25 @@ +create table hrsa_special_add_deduction +( + id bigserial not null , + employee_id bigint not null , + tax_agent_id bigint not null , + children_education varchar(255) default '' null , + continuing_education varchar(255) default '' null , + housing_loan_interest varchar(255) default '' null , + housing_rent varchar(255) default '' null , + supporting_elder varchar(255) default '' null , + serious_illness_treatment varchar(255) default '' null , + infant_care varchar(255) default '' null , + create_time timestamp default CURRENT_TIMESTAMP not null , + update_time timestamp default CURRENT_TIMESTAMP not null , + creator bigint default 0 not null , + delete_type int default 0 not null , + tenant_key varchar(10) default '' not null , + PRIMARY KEY ( id ) +); + +create index idx_employee_id + on hrsa_special_add_deduction (employee_id); + +create index idx_tenant_key + on hrsa_special_add_deduction (tenant_key); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202211090301.sql b/resource/sqlupgrade/PG/sql202211090301.sql new file mode 100644 index 000000000..f61abf167 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202211090301.sql @@ -0,0 +1,86 @@ +delete from HtmlLabelIndex where id = 539971 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 539971,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539971 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'Rule Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539971 as indexid ,'ҎtO' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539971 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlModuleLabel where indexId = 539971 and moduleCode = 'HRM' and type = 'label' +; +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539971) +; + + +delete from HtmlLabelIndex where id = 539970 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 539970,'Ӧ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539970 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Ӧ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'Apply Settings' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539970 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539970 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlModuleLabel where indexId = 539970 and moduleCode = 'HRM' and type = 'label' +; +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539970) +; + + +delete from HtmlLabelIndex where id = 539968 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 539968,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539968 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'set up' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539968 as indexid ,'O' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539968 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlModuleLabel where indexId = 539968 and moduleCode = 'HRM' and type = 'label' +; +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539968) +; + + +delete from HtmlLabelIndex where id = 539967 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 539967,'רӿ۳' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 539967 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'רӿ۳' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'Special additional deduction' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 539967 as indexid ,'헸ӿ۳' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 539967 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlModuleLabel where indexId = 539967 and moduleCode = 'HRM' and type = 'label' +; +insert into HtmlModuleLabel(type,moduleCode,indexId) values ('label','HRM',539967) +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202211090402.sql b/resource/sqlupgrade/PG/sql202211090402.sql new file mode 100644 index 000000000..744cb9c57 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202211090402.sql @@ -0,0 +1,43 @@ +Delete from LeftMenuInfo where id=100183 +; +Delete from LeftMenuConfig where infoid=100183 +; +select LMConfig_U_ByInfoInsert (2,100181,0) +; +select LMInfo_Insert (100183,539970,'','',2,100181,0,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/appconfig' where id = 100183 +; + +Delete from LeftMenuInfo where id=100182 +; +Delete from LeftMenuConfig where infoid=100182 +; +select LMConfig_U_ByInfoInsert (2,100181,-1) +; +select LMInfo_Insert (100182,539971,'','',2,100181,-1,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/sysconfig-1' where id = 100182 +; + +Delete from LeftMenuInfo where id=100180 +; +Delete from LeftMenuConfig where infoid=100180 +; +select LMConfig_U_ByInfoInsert (2,100126,0) +; +select LMInfo_Insert (100180,539967,'','',2,100126,0,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/dataAcquisition/specialAddDeduction' where id = 100180 +; + +Delete from LeftMenuInfo where id=100181 +; +Delete from LeftMenuConfig where infoid=100181 +; +select LMConfig_U_ByInfoInsert (2,100118,9) +; +select LMInfo_Insert (100181,539968,'','',2,100118,9,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100181 +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202211170503.sql b/resource/sqlupgrade/PG/sql202211170503.sql new file mode 100644 index 000000000..ff25c1df8 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202211170503.sql @@ -0,0 +1,5 @@ +alter table hrsa_salary_item add shared_type int ; + +alter table hrsa_salary_item add tax_agent_ids varchar(1024) null; + +ALTER TABLE hrsa_salary_acct_record ADD COLUMN lock_salary_item_ids varchar(2000); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202212080903.sql b/resource/sqlupgrade/PG/sql202212080903.sql new file mode 100644 index 000000000..08d0ace4e --- /dev/null +++ b/resource/sqlupgrade/PG/sql202212080903.sql @@ -0,0 +1,68 @@ +CREATE TABLE hrsa_compensation_log ( + + id bigint NOT NULL, + + payment_agency bigint NULL , + + payment_organization bigint NULL , + + employee_id bigint NULL , + + welfare_type int NULL , + + category_type varchar(100) NULL , + + country_total text NULL , + + company_total text NULL , + + adjustment_total text NULL , + + adjust_to bigint NULL , + + bill_month varchar(30) NULL , + + creator bigint NULL , + + delete_type int NULL , + + create_time timestamp NULL DEFAULT CURRENT_TIMESTAMP , + + update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP , + + tenant_key varchar(10) NULL , + + PRIMARY KEY ( id ) + +); + + +CREATE TABLE hrsa_compensation_config ( + + id bigint NOT NULL, + + payment_agency bigint NULL , + + payment_organization bigint NULL , + + employee_id bigint NULL , + + welfare_type int NULL , + + category_type varchar(100) NULL , + + adjust_to bigint NULL , + + creator bigint NULL , + + delete_type int NULL , + + create_time timestamp NULL DEFAULT CURRENT_TIMESTAMP , + + update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP , + + tenant_key varchar(10) NULL , + + PRIMARY KEY ( id ) + +); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202212081003.sql b/resource/sqlupgrade/PG/sql202212081003.sql new file mode 100644 index 000000000..56c9a9382 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202212081003.sql @@ -0,0 +1,30 @@ +create table hrsa_salary_send_range +( + id bigserial not null , + salary_send_id bigint default 0 not null , + grant_type varchar(64) not null , + creator bigint default 0 not null , + create_time timestamp default CURRENT_TIMESTAMP not null , + update_time timestamp default CURRENT_TIMESTAMP not null , + delete_type int default 0 not null , + tenant_key varchar(10) default '' not null , + PRIMARY KEY (id) +) +; + +create table hrsa_salary_send_range_obj +( + id bigserial not null , + salary_send_id bigint default 0 not null , + salary_send_range_id bigint default 0 not null , + range_type int not null , + target_type int not null , + target_id bigint not null , + creator bigint default 0 not null , + create_time timestamp default CURRENT_TIMESTAMP not null , + update_time timestamp default CURRENT_TIMESTAMP not null , + delete_type int default 0 not null , + tenant_key varchar(10) default '' not null , + PRIMARY KEY (id) +) +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202212230103.sql b/resource/sqlupgrade/PG/sql202212230103.sql new file mode 100644 index 000000000..a39ae969a --- /dev/null +++ b/resource/sqlupgrade/PG/sql202212230103.sql @@ -0,0 +1,29 @@ +CREATE TABLE hrsa_salary_sob_back_item( +id bigint NOT NULL , +salary_sob_id bigint NULL DEFAULT NULL , +salary_item_id bigint NULL DEFAULT NULL , +salary_item_code varchar(255) NULL DEFAULT NULL , +data_type varchar(255) NULL DEFAULT NULL , +rounding_mode int NULL DEFAULT NULL , +pattern int NULL DEFAULT NULL , +value_type int NULL DEFAULT NULL , +formula_id bigint NULL DEFAULT NULL , +back_calc_type int NULL DEFAULT NULL , +tenant_key varchar(255) NULL DEFAULT NULL , +creator bigint NULL DEFAULT NULL , +delete_type int NULL DEFAULT NULL , +create_time timestamp NULL DEFAULT NULL , +update_time timestamp NULL DEFAULT NULL , +PRIMARY KEY (id) +) ; + +alter table hrsa_salary_acct_record add back_calc_status int null ; +alter table hrsa_salary_acct_result add origin_result_value VARCHAR(1000) null ; +alter table hrsa_salary_acct_result_report add origin_result_value VARCHAR(1000) null ; +alter table hrsa_salary_send add salary_acct_type int null ; +alter table hrsa_salary_send add send_status int null ; +alter table hrsa_salary_send_info add salary_acct_type int null ; +alter table hrsa_salary_template add replenish_name VARCHAR(100) null ; +alter table hrsa_salary_template add replenish_rule VARCHAR(255) null ; +alter table hrsa_salary_template add replenish_salary_item_setting text null ; +alter table hrsa_acct_result_temp add origin_result_value VARCHAR(1000) null ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202301310403.sql b/resource/sqlupgrade/PG/sql202301310403.sql new file mode 100644 index 000000000..ae7927ed2 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202301310403.sql @@ -0,0 +1,41 @@ +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629577, 'ս', 'annualIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629578, 'ս˰', 'annualTaxRate', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1675043440772, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2023-01-30 09:51:43', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629579, 'ս۳', 'annualQuickDeductionFactor', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674894163247, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629580, 'սӦ˰', 'annualTax', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674896933031, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629581, 'Ӧս', 'annualPayable', 1, 7, 1, 0, 0, 2, 2, 2, 0, 1674897014605, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629600, 'ս˰', 'annualTaxFreeIncome', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629601, 'ս', 'annualOther', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2023-01-30 15:33:47', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629602, '׼۳ľս', 'annualDonateTax', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629603, '˰ս', 'annualTaxSavings', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2022-07-28 17:26:52', 'number'); +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629604, 'עս', 'annualRemark', 1, 7, 1, 0, 0, 2, 2, 1, 0, 0, ' ', 1, 1, 0, 0, 'all_teams', '2022-07-28 17:26:52', '2023-01-30 15:33:31', 'string'); + + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845590, 2, 746777981115629577, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 0); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845591, 2, 746777981115629578, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 1); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845592, 2, 746777981115629579, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 2); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845593, 2, 746777981115629580, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 3); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845595, 2, 746777981115629600, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 4); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845596, 2, 746777981115629601, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 5); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845597, 2, 746777981115629602, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 6); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845598, 2, 746777981115629603, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 7); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845599, 2, 746777981115629604, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 8); +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845594, 2, 746777981115629581, 1, 0, 0, '2022-06-17 09:33:41', '2022-06-17 09:33:41', 0, 'all_teams', 0, 9); + + + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674894163247, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=36000){0;}else if({нĿ.ս}<=144000){210;}else if({нĿ.ս}<=300000){1410;}else if({нĿ.ս}<=420000){2660;}else if({нĿ.ս}<=660000){4410;}else if({нĿ.ս}<=960000){7160;}else{15160;}', 'if(salaryItem_annualIncome<=36000){0;}else if(salaryItem_annualIncome<=144000){210;}else if(salaryItem_annualIncome<=300000){1410;}else if(salaryItem_annualIncome<=420000){2660;}else if(salaryItem_annualIncome<=660000){4410;}else if(salaryItem_annualIncome<=960000){7160;}else{15160;}', 92, 0, '2023-01-28 16:22:43', '2023-01-28 16:22:43'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674896933031, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}*{нĿ.ս˰}-{нĿ.ս۳}', 'salaryItem_annualIncome*salaryItem_annualTaxRate-salaryItem_annualQuickDeductionFactor', 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1674897014605, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ս}-{нĿ.սӦ˰}', 'salaryItem_annualIncome-salaryItem_annualTax', 92, 0, '2023-01-28 17:10:15', '2023-01-28 17:10:15'); +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1675043440772, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', 'if({нĿ.ս}<=0){0;}else if({нĿ.ս}<=36000){0.03;}else if({нĿ.ս}<=144000){0.1;}else if({нĿ.ս}<=300000){0.2;}else if({нĿ.ս}<=420000){0.25;}else if({нĿ.ս}<=660000){0.3;}else if({нĿ.ս}<=960000){0.35;}else{0.45;}', 'if(salaryItem_annualIncome<=0){0;}else if(salaryItem_annualIncome<=36000){0.03;}else if(salaryItem_annualIncome<=144000){0.1;}else if(salaryItem_annualIncome<=300000){0.2;}else if(salaryItem_annualIncome<=420000){0.25;}else if(salaryItem_annualIncome<=660000){0.3;}else if(salaryItem_annualIncome<=960000){0.35;}else{0.45;}', 92, 0, '2023-01-30 09:50:41', '2023-01-30 09:50:41'); + + + + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674894163265, 'ս', 1674894163247, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, '2023-01-28 16:22:43', '2023-01-28 16:22:43'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933036, 'ս', 1674896933031, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933041, 'ս˰', 1674896933031, 'salaryItem_annualTaxRate', '{нĿ.ս˰}', 'number', 'salaryItem', 1, 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674896933045, 'ս۳', 1674896933031, 'salaryItem_annualQuickDeductionFactor', '{нĿ.ս۳}', 'number', 'salaryItem', 2, 92, 0, '2023-01-28 17:08:53', '2023-01-28 17:08:53'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014622, 'ս', 1674897014605, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 0, 92, 0, '2023-01-28 17:10:15', '2023-01-28 17:10:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1674897014626, 'սӦ˰', 1674897014605, 'salaryItem_annualTax', '{нĿ.սӦ˰}', 'number', 'salaryItem', 1, 92, 0, '2023-01-28 17:10:15', '2023-01-28 17:10:15'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1675043440796, 'ս', 1675043440772, 'salaryItem_annualIncome', '{нĿ.ս}', 'number', 'salaryItem', 1, 92, 0, '2023-01-30 09:50:41', '2023-01-30 09:50:41'); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202302060801.sql b/resource/sqlupgrade/PG/sql202302060801.sql new file mode 100644 index 000000000..8b0e81ed3 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202302060801.sql @@ -0,0 +1,34 @@ +delete from HtmlLabelIndex where id = 540871 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 540871,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540871 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'file management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540871 as indexid ,'n' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540871 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; + + +delete from HtmlLabelIndex where id = 540869 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 540869,'ֶι' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 540869 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'Field management' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 540869 as indexid ,'ֶι' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 540869 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202302060902.sql b/resource/sqlupgrade/PG/sql202302060902.sql new file mode 100644 index 000000000..21b23dbe5 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202302060902.sql @@ -0,0 +1,34 @@ +Delete from LeftMenuInfo where id=100125 +; +Delete from LeftMenuConfig where infoid=100125 +; +select LMConfig_U_ByInfoInsert (2,100118,2) +; +select LMInfo_Insert (100125,538004,'','',2,100118,2,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='' where id = 100125 +; + + + +Delete from LeftMenuInfo where id=100185 +; +Delete from LeftMenuConfig where infoid=100185 +; +select LMConfig_U_ByInfoInsert (2,100125,0) +; +select LMInfo_Insert (100185,540871,'','',2,100125,0,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/salaryFile' where id = 100185 +; + +Delete from LeftMenuInfo where id=100184 +; +Delete from LeftMenuConfig where infoid=100184 +; +select LMConfig_U_ByInfoInsert (2,100125,-1) +; +select LMInfo_Insert (100184,540869,'','',2,100125,-1,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/fieldManagement' where id = 100184 +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202302090303.sql b/resource/sqlupgrade/PG/sql202302090303.sql new file mode 100644 index 000000000..a01231bc6 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202302090303.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_scheme_detail ADD COLUMN payment_cycle int NULL; +ALTER TABLE hrsa_scheme_detail ADD COLUMN account_type int NULL; +ALTER TABLE hrsa_scheme_detail ADD COLUMN cycle_setting varchar(255) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202302200403.sql b/resource/sqlupgrade/PG/sql202302200403.sql new file mode 100644 index 000000000..9afce8204 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202302200403.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_item ALTER shared_type TYPE int ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202304040503.sql b/resource/sqlupgrade/PG/sql202304040503.sql new file mode 100644 index 000000000..168f8e5d6 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202304040503.sql @@ -0,0 +1,33 @@ +ALTER TABLE hrsa_other_deduction ADD COLUMN private_pension varchar(255) NULL; + +ALTER TABLE hrsa_add_up_situation ADD COLUMN add_up_private_pension varchar(255) NULL; + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629605, 'Ͻ', 'privatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1680746056549, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); + +INSERT INTO hrsa_sys_salary_item(id, name, code, system_type, category, item_type, use_default, use_in_employee_salary, rounding_mode, pattern, value_type, datasource, formula_id, description, can_edit, can_delete, creator, delete_type, tenant_key, create_time, update_time, data_type) VALUES (746777981115629698, 'ۼƸϽ', 'addUpPrivatePension', 1, 2, 12, 0, 0, 2, 2, 2, 8, 1681201555316, '', 0, 1, 0, 0, 'all_teams', '2022-03-28 10:33:01', '2022-05-10 15:54:31', 'number'); + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1680746056549, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{˰۳.Ͻ}', 'otherDeduction_privatePension', 92, 0, '2023-04-06 09:54:16', '2023-04-06 09:54:16'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1680746056577, 'Ͻ', 1680746056549, 'otherDeduction_privatePension', '{˰۳.Ͻ}', 'number', 'otherDeduction', 0, 92, 0, '2023-04-06 09:54:16', '2023-04-06 09:54:16'); + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681201555316, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.Ͻ}+{ۼ.ۼƸϽ}', 'salaryItem_privatePension+addUpSituation_addUpPrivatePension', 92, 0, '2023-04-11 16:25:55', '2023-04-11 16:25:55'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555332, 'Ͻ', 1681201555316, 'salaryItem_privatePension', '{нĿ.Ͻ}', 'number', 'salaryItem', 0, 92, 0, '2023-04-11 16:25:55', '2023-04-11 16:25:55'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681201555338, 'ۼƸϽ', 1681201555316, 'addUpSituation_addUpPrivatePension', '{ۼ.ۼƸϽ}', 'number', 'addUpSituation', 1, 92, 0, '2023-04-11 16:25:55', '2023-04-11 16:25:55'); + + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845610, 1, 746777981115629605, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 10); + +INSERT INTO hrsa_salary_sob_default_item(id, income_category, sys_salary_item_id, can_edit, can_delete, creator, create_time, update_time, delete_type, tenant_key, sob_default_item_group_id, sorted_index) VALUES (733975748932845611, 1, 746777981115629698, 1, 0, 0, '2022-03-18 16:30:21', '2022-03-18 16:59:24', 0, 'all_teams', 703433961629614110, 11); + +INSERT INTO hrsa_formula(id, name, description, module, use_for, reference_type, return_type, validate_type, extend_param, formula, formulaRunScript, creator, delete_type, create_time, update_time) VALUES (1681265757380, 'ʽ1', 'ע', 'salary', 'salaryitem', 'formula', 'number', 'number', '{\"datasource\":{\"datasourceId\":\"\"}}', '{нĿ.ǰۼӦ˰ϼ}-{нĿ.ǰۼר۳ϼ}-{нĿ.ǰۼרӿ۳ϼ}-{нĿ.ǰۼ۳ϼ}-{нĿ.ǰۼƼ}-{нĿ.ǰۼ׼۳ľ}-{нĿ.ۼƸϽ}', 'salaryItem_addUpIncome-salaryItem_addUpSpecialDeduction-salaryItem_addUpSpeAddiDeduction-salaryItem_addUpOtherDeduction-salaryItem_addUpSubtraction-salaryItem_addUpAllowedDonation-salaryItem_addUpPrivatePension', 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); + +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757404, 'ǰۼ׼۳ľ', 1681265757380, 'salaryItem_addUpAllowedDonation', '{нĿ.ǰۼ׼۳ľ}', 'number', 'salaryItem', 5, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757408, 'ǰۼƼ', 1681265757380, 'salaryItem_addUpSubtraction', '{нĿ.ǰۼƼ}', 'number', 'salaryItem', 4, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757413, 'ǰۼ۳ϼ', 1681265757380, 'salaryItem_addUpOtherDeduction', '{нĿ.ǰۼ۳ϼ}', 'number', 'salaryItem', 3, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757417, 'ǰۼרӿ۳ϼ', 1681265757380, 'salaryItem_addUpSpeAddiDeduction', '{нĿ.ǰۼרӿ۳ϼ}', 'number', 'salaryItem', 2, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757421, 'ǰۼר۳ϼ', 1681265757380, 'salaryItem_addUpSpecialDeduction', '{нĿ.ǰۼר۳ϼ}', 'number', 'salaryItem', 1, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757424, 'ǰۼӦ˰ϼ', 1681265757380, 'salaryItem_addUpIncome', '{нĿ.ǰۼӦ˰ϼ}', 'number', 'salaryItem', 0, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); +INSERT INTO hrsa_formula_var(id, name, formula_id, field_id, field_name, field_type, source, order_index, creator, delete_type, create_time, update_time) VALUES (1681265757428, 'ۼƸϽ', 1681265757380, 'salaryItem_addUpPrivatePension', '{нĿ.ۼƸϽ}', 'number', 'salaryItem', 6, 92, 0, '2023-04-12 10:15:57', '2023-04-12 10:15:57'); + + +update hrsa_sys_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö' ; +update hrsa_salary_item set formula_id = 1681265757380 where name = 'ǰۼӦ˰ö'; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202304260103.sql b/resource/sqlupgrade/PG/sql202304260103.sql new file mode 100644 index 000000000..e91b90473 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202304260103.sql @@ -0,0 +1 @@ +update hrsa_sys_salary_item set use_in_employee_salary = 1 where code in ('baseSalary','postSalary'); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202304270203.sql b/resource/sqlupgrade/PG/sql202304270203.sql new file mode 100644 index 000000000..7cbcc5a56 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202304270203.sql @@ -0,0 +1,249 @@ +create table hrsa_sub_table +( + id bigint primary key , + create_time timestamp , + update_time timestamp , + creator bigint , + delete_type int default 0 , + tenant_key varchar(10) , + sub_table_name varchar(100) not null , + dimension varchar(20) not null , + start_month varchar(10) , + end_month varchar(10) , + pay_org_string varchar(500) , + pay_agency_string varchar(500) , + sub_company_string varchar(500) , + depart_string varchar(500) , + grade_string varchar(500) , + position_string varchar(500) , + status_string varchar(500) , + employee_type varchar(500) , + employee_string varchar(500) , + payment_type_string varchar(100) +) +; + +create table hrsa_sub_table_item +( + id bigint primary key , + create_time timestamp , + update_time timestamp , + creator bigint , + delete_type int default 0 , + tenant_key varchar(10) , + table_id bigint not null , + item_name varchar(50) not null , + item_value varchar(500) not null , + index_value int not null , + total_rule varchar(500) , + count_rule varchar(500) , + unit_type int default 2 +) +; + +alter table hrsa_sub_table add table_type int +; + +alter table hrsa_sub_table ALTER table_type TYPE int +; + +alter table hrsa_sub_table ALTER COLUMN table_type set DEFAULT 0 +; + + + +create table hrsa_salary_stats_dim +( + id bigint primary key , + create_time timestamp , + update_time timestamp , + creator bigint , + delete_type int default 0 , + tenant_key varchar(10) , + dim_name varchar(100) , + dim_type varchar(20) , + remark varchar(500) , + setting varchar(2000) , + is_default int , + dim_code varchar(50) +) +; + +create table hrsa_salary_stats_report +( + id bigint primary key , + create_time timestamp , + update_time timestamp , + creator bigint , + delete_type int default 0 , + tenant_key varchar(10) , + report_name varchar(100) , + dimension varchar(1000) , + tax_agent_setting varchar(1000) , + income_category_setting varchar(20) , + sub_company_setting varchar(1000) , + depart_setting varchar(1000) , + grade_setting varchar(1000) , + position_setting varchar(1000) , + status_setting varchar(1000) , + employee_setting varchar(1000) , + hiredate_setting varchar(1000) , + leavedate_setting varchar(1000) , + salary_start_month timestamp , + salary_end_month timestamp +) +; + +create table hrsa_salary_statistics_item +( + id bigint primary key , + create_time timestamp , + update_time timestamp , + creator bigint , + delete_type int default 0 , + tenant_key varchar(10) , + item_name varchar(50) , + item_value varchar(1000) , + count_rule varchar(500) , + sum_rule varchar(500) , + avg_rule varchar(500) , + max_rule varchar(500) , + min_rule varchar(500) , + median_rule varchar(500) , + index_value int , + unit_type int , + stat_report_id bigint +) +; + +create table hrsa_charts_setting +( + id bigint primary key , + create_time timestamp , + update_time timestamp , + creator bigint , + delete_type int default 0 , + tenant_key varchar(10) , + table_id bigint not null , + charts_type int not null , + item_values varchar(500) , + item_col_value varchar(50) not null , + dimension_range int not null , + item_sort_value varchar(500) , + item_col_sort_value varchar(50) , + sort_type int , + sort_num int +) +; + +create table hrsa_salary_echarts_setting +( + id bigint primary key , + create_time timestamp , + update_time timestamp , + creator bigint , + delete_type int default 0 , + tenant_key varchar(10) , + report_id bigint not null , + charts_type int not null , + item_values varchar(500) , + item_col_value varchar(50) not null , + dimension_range int not null , + item_sort_value varchar(500) , + item_col_sort_value varchar(50) , + sort_type int , + sort_num int +) +; + +alter table hrsa_salary_stats_dim alter dim_type TYPE varchar(30) +; + +alter table hrsa_salary_stats_report alter income_category_setting TYPE varchar(1000) +; + +create table hrsa_statreportlogs_detail +( + id bigint primary key , + create_time timestamp , + update_time timestamp , + creator bigint , + delete_type int default 0 , + tenant_key varchar(10) , + uuid varchar(36) not null , + mainid varchar(36) not null , + dataid varchar(50) not null , + belongdataid varchar(50) not null , + tablename varchar(200) not null , + tablenamelabelid varchar(50) default '-1' not null , + tablenamedesc varchar(50) not null , + fieldname varchar(200) not null , + fieldnamelabelid varchar(50) default '-1' not null , + newvalue text not null , + oldvalue text not null , + newrealvalue text not null , + oldrealvalue text not null , + fielddesc varchar(200) not null , + showorder int not null , + isdetail int NOT NULL DEFAULT 0 +) +; + +create table hrsa_statreportlogs +( + id bigint primary key , + create_time timestamp , + update_time timestamp , + creator bigint , + delete_type int default 0 , + tenant_key varchar(10) , + uuid varchar(36) not null , + log_date timestamp not null , + device varchar(500) not null , + log_operator bigint not null , + operatorname varchar(100) , + targetid bigint NOT NULL DEFAULT -1 , + targetname text not null , + modulename varchar(100) not null , + functionname varchar(100) not null , + interfacename varchar(100) not null , + requesturl varchar(200) not null , + requesturi varchar(200) not null , + operatetype varchar(50) not null , + operatetypename varchar(100) not null , + operatedesc varchar(3000) not null , + params text not null , + belongmainid varchar(36) not null , + clientip varchar(50) not null , + groupid varchar(50) not null , + groupnamelabel varchar(1000) not null , + redoservice varchar(200) not null , + redocontext text not null , + cancelservice varchar(200) not null , + cancelcontext text not null , + totalruntime bigint NOT NULL DEFAULT 0 , + mainruntime bigint NOT NULL DEFAULT 0 , + log_result varchar(100) not null , + fromterminal varchar(100) not null , + resultdesc text not null , + old_content varchar(3000) not null , + link_type varchar(20) not null , + link_id bigint NOT NULL DEFAULT 0 , + old_link_id bigint NOT NULL DEFAULT 0 +) +; + +alter table hrsa_salary_stats_report add remark varchar(100) +; + +alter table hrsa_salary_stats_report add second_dimension varchar(100) +; + +alter table hrsa_salary_stats_report add sort_index varchar(100) +; + +alter table hrsa_salary_stats_report add sort_type varchar(100) +; + +alter table hrsa_salary_stats_dim add label_id int +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202304270303.sql b/resource/sqlupgrade/PG/sql202304270303.sql new file mode 100644 index 000000000..071cede28 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202304270303.sql @@ -0,0 +1,7 @@ +INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA, SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL, BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER, WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME, onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl, isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryItemBrowser', '1', '1', '', 'select * from hrsa_salary_item where delete_type = 0', '', '', '', '', '1', 'id', '', '', '', '', '', '', 2, 'нĿ', NULL, '', NULL, NULL, NULL, NULL, '', '', '2020-01-01', '19:12:12', NULL, NULL, '', '', '0',uuid(), '', '', '', '', '1', 0, 1); + +INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) VALUES ('salaryItemBrowser', '0', 0, '2020-01-01', '19:12:12', NULL, NULL); + +INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES ((select max(id) from datashowparam), '', 'name', '', 1, 1, uuid(), NULL); + +INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES ((select max(id) from datasearchparam), '', 'name', '2', '', 1, uuid(), ''); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202304270501.sql b/resource/sqlupgrade/PG/sql202304270501.sql new file mode 100644 index 000000000..3afcff69c --- /dev/null +++ b/resource/sqlupgrade/PG/sql202304270501.sql @@ -0,0 +1,16 @@ +delete from HtmlLabelIndex where id = 542781 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 542781,'нͳƱ' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 542781 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нͳƱ' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'Salary Statistics Report' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 542781 as indexid ,'нyӋ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 542781 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202305050302.sql b/resource/sqlupgrade/PG/sql202305050302.sql new file mode 100644 index 000000000..5cdc90ab4 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202305050302.sql @@ -0,0 +1,10 @@ +Delete from LeftMenuInfo where id=100187 +; +Delete from LeftMenuConfig where infoid=100187 +; +select LMConfig_U_ByInfoInsert (2,100118,9) +; +select LMInfo_Insert (100187,542781,'','',2,100118,9,18) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/analysisOfSalaryStatistics' where id = 100187 +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202305170903.sql b/resource/sqlupgrade/PG/sql202305170903.sql new file mode 100644 index 000000000..9343fcda9 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202305170903.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_acct_result_log ( + id bigint NOT NULL, + datasource int NOT NULL, + salary_acct_record_id bigint NOT NULL, + salary_acct_result_id bigint NOT NULL, + salary_acct_emp_id bigint NOT NULL, + salary_item_id bigint NOT NULL, + employee_id bigint NOT NULL, + operator bigint NOT NULL, + operate_time timestamp NOT NULL, + delete_type int NOT NULL, + update_time timestamp NOT NULL, + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202306020403.sql b/resource/sqlupgrade/PG/sql202306020403.sql new file mode 100644 index 000000000..43b41bec2 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202306020403.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_item ADD COLUMN sorted_index int NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202306020603.sql b/resource/sqlupgrade/PG/sql202306020603.sql new file mode 100644 index 000000000..53dadf7fa --- /dev/null +++ b/resource/sqlupgrade/PG/sql202306020603.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_salary_template ADD COLUMN sms_status int; + +UPDATE hrsa_salary_template SET msg_status = 1; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202306080103.sql b/resource/sqlupgrade/PG/sql202306080103.sql new file mode 100644 index 000000000..0c6239970 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202306080103.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_tax_agent ADD COLUMN sorted_index int ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202306200203.sql b/resource/sqlupgrade/PG/sql202306200203.sql new file mode 100644 index 000000000..2eefa273a --- /dev/null +++ b/resource/sqlupgrade/PG/sql202306200203.sql @@ -0,0 +1,4 @@ +update hrsa_formula set formula = '{нĿ.£Σ۳ϼ}+{ۼ.ۼ˰۳}' , formulaRunScript='salaryItem_otherDeduction+addUpSituation_addUpOtherDeduction' where id = 1651740238860 +; +update hrsa_formula_var set delete_type = 1 where id = 1651740241717 +; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202306260103.sql b/resource/sqlupgrade/PG/sql202306260103.sql new file mode 100644 index 000000000..c32283213 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202306260103.sql @@ -0,0 +1,12 @@ +CREATE TABLE hrsa_salary_bill_watermark ( + id bigint NOT NULL, + watermark_status int NULL DEFAULT NULL, + watermark_type varchar(255) NULL DEFAULT NULL, + watermark_setting text NULL, + create_time timestamp NULL DEFAULT NULL, + update_time timestamp NULL DEFAULT NULL, + creator bigint NULL DEFAULT NULL, + delete_type int NULL DEFAULT NULL, + tenant_key varchar(255) NULL DEFAULT NULL, + PRIMARY KEY (id) +) ; \ No newline at end of file From 5d83326d232b2bccae71c663734a68c507b413b5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 28 Jun 2023 16:26:20 +0800 Subject: [PATCH 208/245] =?UTF-8?q?listByAcctEmployeeIdsAndSalaryItemIds?= =?UTF-8?q?=E7=9A=84=E5=88=86=E7=89=87=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/SalaryAcctResultService.java | 2 +- .../salary/service/impl/SalaryAcctExcelServiceImpl.java | 4 ++-- .../salary/service/impl/SalaryAcctResultServiceImpl.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index b15cf93bd..20b9ad2f8 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -197,7 +197,7 @@ public interface SalaryAcctResultService { * @author Harryxzy * @date 2022/12/26 22:24 */ - List listByAcctEmployeeIdsAndSalaryItemIds(Collection salaryAcctEmpIds, Collection salaryItemIds); + List listByAcctEmployeeIdsAndSalaryItemIds(List salaryAcctEmpIds, Collection salaryItemIds); List listAcctEmpIdByAcctEmpId(List salaryAcctEmployeeIds); diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 6801cb415..6cba27124 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -768,7 +768,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 包含错误提示信息的sheet页 List> errorExcelSheets = Lists.newArrayList(); // 解析excel - Set salaryAcctEmpIds = Sets.newHashSet(); + List salaryAcctEmpIds = Lists.newArrayList(); // excel导入了哪些薪资项目 Set excelSalaryItemIds = Sets.newHashSet(); List salaryAcctResults = Lists.newArrayList(); @@ -1109,7 +1109,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc * @param salaryAcctResults */ private void handleSalaryAcctResultLog(List salaryAcctResults) { - Set salaryAcctEmpIds = salaryAcctResults.stream().map(SalaryAcctResultPO::getSalaryAcctEmpId).collect(Collectors.toSet()); + List salaryAcctEmpIds = salaryAcctResults.stream().map(SalaryAcctResultPO::getSalaryAcctEmpId).distinct().collect(Collectors.toList()); Set salaryItemIds = salaryAcctResults.stream().map(SalaryAcctResultPO::getSalaryItemId).collect(Collectors.toSet()); // 查询导入的薪资核算结果 List salaryAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 555738118..0fbcf6ee6 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -974,7 +974,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } @Override - public List listByAcctEmployeeIdsAndSalaryItemIds(Collection salaryAcctEmployeeIds, Collection salaryItemIds) { + public List listByAcctEmployeeIdsAndSalaryItemIds(List salaryAcctEmployeeIds, Collection salaryItemIds) { if(CollectionUtils.isEmpty(salaryAcctEmployeeIds)){ return Collections.emptyList(); } From b130fb0121660737db4845efbb17ccb13573ecfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 28 Jun 2023 18:11:53 +0800 Subject: [PATCH 209/245] =?UTF-8?q?=E6=B5=B7=E5=BA=B7=E5=8C=85=E5=86=B2?= =?UTF-8?q?=E7=AA=81jar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/jar/artemis-http-client-1.1.3.jar | Bin 0 -> 39732 bytes .../timer/AutoAddAllSpecialAddDeductionJob.java | 3 +++ .../engine/salary/timer/SyncTaxAgentEmpJob.java | 8 ++++++++ 3 files changed, 11 insertions(+) create mode 100644 resource/jar/artemis-http-client-1.1.3.jar diff --git a/resource/jar/artemis-http-client-1.1.3.jar b/resource/jar/artemis-http-client-1.1.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..df04afa68a9619cc0f06e0293bae654f3ab92962 GIT binary patch literal 39732 zcmb4q19WBE(r#?qPCB-2+qUhFZQHhO+v?a(2OX>9yqtT_(P24QncSt8o7MJL2m^ z`S)Qm0-42r8-XVfJBVVBOo@+5!IYlmGxG|MfB;Ur%XdXYU|FUF$%Ut;FmPWNh^pbcBCNXJltS^9{&;H_XAA3p-WmeH z@K0i(Kgs`Kvw^+6wS|#^^Orzq?H%pxO&pyqOq_uKDQXCSKN#JWBim<-2mr9k3jjd( zm$wx7yP(9Ko$Xb=?oMlDZQ$gzl>zOgJls9%>*U&K_Pr581EQ{s8-)cj2n7K@d>57w zgc3v?C~VIm)mTC`!FqG+y6z$TLGuABY`vhhMTJteoL~u|Pf?Rb6{R_U8JZVrf=aL$ z3s(0>OD~7#qcPhWx42=%@4NBi^Qo-#&#AX#uHH`$r-oPj4OajRQm|DAmgS)XKyHlK z&}(8;z7``IJk^`9h|hYVVJuX>`hA7;xALyHDL81KntcYYnSLydX9v_@RZqdpw?U}C zs@)Wa>8jl%(YUJ(17Ujym{_fc$TV)Nq-|1C^){|?a#{z2E#23M=vZ8>hgrE=4nR?R z<7vK+P1#kiQZV%v7Q zI?9LT#-TSNJrQ}OMCx^23Cq;^0#K_`r*&@yigN9lE(2Q*j6mLnY5^DbOBl#JwUz4! z?G6cXZ+V^O3|i){ZI#OB#B)F`UUm|}TD( z4>CXw_nh|d+ZW90*`Aox=|C?Y-C9&Tziu6M(F7H4c>6w5tHaDT(fPUP%691acS;4m zFdOo=cMTD|FWVAyN5h&!i*3gX-hY1Xe%gtadW53UFZQYT7T2%TCO@1|)-%%Gqtc<5 z{hEq!S-0A%6fE8eYcz6w*wnaMP8+<$hO{V}sXD=v-B=aM&3({)H*Ffk)J(aV49xMX zCn1$dEwX=OBSCEmZaBEf&?OH(P}!uct2L7P;T-kpvoe}?)vU9>mR7Qo?P43rAq}am zvY^gV+Kn~m4`+9}p1tLdNMf!Ovu&8D1(Xl`=$)X{^oxo70I zwSt=5UPRGT*38gVpAtR^Vij26dmSYLCkk?+M%-29ExJ3I$C1BOE?KA+aS<*!8G+U? zFZgzUC*`)&uJ@Ztp4tMhGLHQ&0WSi^oEueb1cz_xFkn+Tz0b2?DZHx@fGR$*(U1r_4HI=m!~i|SqZ7VN?+BJCn^@_50(O4 zvPL5KDXv=9+taG1JTndY!m`B+c((u}Gc;-G?g9S;c0&51X(1j|U#DH8EajW; z;JgAQz_|t6{Z5esl$!L=%HgZ{qz5V=9vsgvr$ zp#ZX+K?qRjG>%=9im9|Z869D@Jmo4MjB+A~3{GzC(moEed53H}c>Xq)w5IMJnlfMDoJLlfOWbw7y=aXz3>j z-6OxJV_YE6a_m9Wl+tu_dVzg);LuS%;Ivh2*OB1JHQK4R0Q#8kJDXS zOXIYhoa|2G0+HN1cETtzk4{;*Sv-P*IlP{FreNL;xV>lB4UO)nX?YdYxJDx+8=XYV z5h^sSaf$`qdm4#8YTh3N9Exs?#zZAuX4u^;@CLYLLK|pU(gms=fCaS3Kw2As&r~;s9NHwk84JdGbO0hCOW=;9@1m@p#IFeQcVDxm9N(_?UDK zG*cuNo@IZ)6hT3eE=O^O^jvMXPE<~tXrx8<@S(5YqUMtvK_Q^rox_}S@%#0ygO48M zv<=HI0PqRkSWv$!Wm2D)iii)bJME_vLM^gJ!iXN2z)-QZznf}h!eFHcRTn~{n@bR- zK4Z_M9(GMX%Ce!+k)yhS+1hwgwLZue6mltt<+rI*hnhB>uN-la9I-d#eF>y{M-t7wn;}9wn87R&!P~NZJ((99~o&ne?7K9urxOa^#to%Hq<| zRdFZh=o1}NoxAqsw0ElaYIV3Z9GMLKSDL?Em}X!fviBo4BJNP^n=&0fOkp;o1hnYc zx6T?m7A;{MG(uGlfKr>m&`UP7TP$H@TC2pgJI)%c3xr1Y$ax1u=&dd@f`xT!LlSfF zgyqcU1`kdOa5(8xV=|>mlNpZ&nKy$lp9pUq@S(1WTfAUb4C!hHd6zl;+?zW6QjQNm zK9rn3i8|Q9`399+)HGhT*VAN2@%3%NZrcd70oEr$o0I{S1f`}A%~5DrA}JD6GNwCC zWA1n!GsZ=5L(LdMDWJswip=lgy;0{q#%%KqTIE~0GAWqEptZp^)G&$+x7+oM=zW!^ zVy}>Q4svl)CYm1E=#=p!{bog>LCnYmoUG_+77ZF4WF2Y2Gy9EGDzUB@TLBU|kV@L< zrBl8dc^dV!L4$C=u|-fhB=1jiuPKHb1;|{H{X)y9G9-K=(wp$aCv|NHLa)a?9pGH; z`=2ahCK`fXDM-0TRX04_o#DT2ODgS1d8xu?ajDxApEiSW+pv9i1CJ{~%F(DS>{w`O z_Nk`du~?l>r*KM0S<#l^31tFzc*ciL{CuqeeoaMCaz^&)ms8rJ{Bh6L8a@V|! zW+MctP9aONjfIQ_inMOby9f2MK}U>JgxPbsDZPd^8f0QIXc~1qeYrtem4RxNtQiQ^ zvS?b7TYX5PNjOs42xa&TNw;Ly&^V<6gS{l&fpPfAI1=)=0^(%Tut`?!ePd!}3fjz| ziOYr+ef18?d?H7}GTB=ZPM9T^lgVFzw9DW@XF`H5VJtD%+YGdZxahm=xGxNpYiDRZ z!8?H-meXeHkzidhbk}G*?K^v~j{-eb_{agZJ*Hk0=!dgUs?_}zMV(F%l^~N7XhO_& z)=hXoQkUmSVCtpvC4nxILef7JnOy2*EyB{9lZ2^b3VEvtP507TEuo4n!*nJ*^L3$F zy17gU$UMoJJ;)b5U1!P>mHK7oDnOG7F8py_7Sb%nGJiLuCosDF0AJ9bS$MV znC(UL?M2b;3k0L@pHt&dNu8k_kAcF6l0~LgRnMA!3Ml#Qmazg z6x3H@lFAu^e>K@}li{tf;~pJr2R{ZwjF&LE|7fS&5)mUqVcy;cq{5a=VHt>r2Xj;o zfwFUNcHxGwSDeEM26ZOG8L>Wx6uI2fByx>o3)Z*Hq1>nmrR|3nyzY*PrNM{gY1}je zlnMdO1Cdw`Ji6$SH!0+!TmxbyZ_3pKDpnLKR*))I8krSGSB6U&{e7#$6)Nj+OA#>% zfU>kcAG+NBmvote02xE$f?i^pTI<$mu_sG_M|FUePYQAJ@zJzM8V@p1c z547zbx%D>yMhD6M*nEc8+&}VHF@Ba4*E8I+VsNpx@Da^e(Gbxd z``H~@IfP{f*oAWzyJT}V6BErN%MJ$#L||elG6QyMog6ODF)rtj__qcK`pM^ zxgk~HaU`L;a$J{e4O{M!EUp_Ti6YUy&=J;Ftwg^$Au{)x@PNStEJyX$fj>RGaKidc zrXB6UOXO2Aohpb?FD==9pny7T*DiBr2QaXg4*MCoh2B?sD?p3XSNimgq4;hzX$D`( z;6oPkt$UqX&=&fx^g+Jtcivs;8pK^HoF`MVR2a~83#;Ja1(qL`Gr;H>;jQ!cU~yP} z7BW8@&}oHi*o;Cg$czW`Fdq!1H(^@w!-}v?MWWWMG4I$h@7%F1=|fv$$5!Nae1vwc z@J$`zOWQ@t--fx4_#YKjLk1=+vgB4_n}O!?czx&-LWuoNfq2|j(Yx+ML~c2(MVHPP zEF}Yq-`C?h7DTVBm;#RNGC*fxMX$MSAU03Kb}@f7@ene4Y%goxcLfrE0A4P}bL#Qg z*qziYJQ|3CN-PzdIfL+(9Ee>LM-jV8DBUBzjXsgQD66;!F!M-c_(){rkjeBC$zV$? zkj*!xGxNabDn@4}RksPPg}f%CUzaridnRYE*1p96JtBcxqw}ij_J5nemsq?ED|~u* zQFzlmApbBQQt%2CPz*$5#*R{20{i+U&H+Ua*#Tuo?bW(=wjF zH*)L^9oz@qr;M11U#z5OBW}&)n(;Qut-b1?E6O%F^?-ydBlY{(r03z0_pPH}mlwY- zTzu-_;Sss}bJ&?v*4Z6{t&*%^@hv2t!r4v9EyuPh)^*M;C>({}e%mc-I!AObm7dsj zgY5ByH>QjcAVQidN%E!A3Elw zYu&8&Rs?km{JZ|9dRM9#5Q|uZrL6nEw#3V(4a|2&xjNr!+24C%mg|LiPh!!O6e}Et zSMMzCi(eFfZul{=WD4`sM)+BDWcl>M zrKHsi+AOF=GisLK$Z{7$oI-w|`hRcwNyCvBzrG1-12ZaFH7{hzEv;vDhg=cOre>vb z^@;wEC>_M#qI7`xJ)a?85uc>55FPnnhHiwcElg~kNf`bfvx!c$kz0^Q8U0L+cA*j> zDP^bqj0f{Hd^dSzQ z$Zf=PgIdfh_pHqYc8k?#0Y;suJP>dE{W@@+qmH>I2__LofRoIVFq1-2(Dw=gO@jgE z;GjRs2-ZI?78L+Z#_!JcXIKX3;6NLq7o@PYT2LYHKj@iIYy@C46QdK{2obCLK@)UI<+K{wG*^osS zW}nm=cHhJr*`l)!&44SY8ES*VI<=0~pfhka(A5C9z%^o#v`TBSo9F_0nb=ae=zRbV zA`EOetm@uB*=8+09*b zsW|Z8O{r~OtDyjS@{!$hb>lFJwpS%kw|LfZ7f6PjnmZ zqkzGt4~`DY;Gg$HV~t4iZ^EF40jD?B$H4^FFlYh5IfThV`w2DS|BW&|wyVqxCJXhU zN*sCYx{5U2exylhPn@h!$+Tok=BQEn&XyF)#eHM)*by$4pq;bwy(w|CJ_cQd>0*{!%AQ4P=*h+Eh7gXhOhu9?_I>};HotsClXM-i&@T{f}(ewg5gXD>A(wuS*P)mBIBS+s8O@e-iYTZ?DEm=7 zu}9s3_Y$g@*BX;j%}Bqr)6zASB(SO~*IOTj(;udaon7%F-?i_0k|FPmH6x4fkDIw9 zUKJ-Cs7%mt4Que4$qG`eHMs_rmP@oZoZ5js5(0IT4mkHL_t~a&%?Jf!ua4oA^tUY{ zUWbkq2LoMr+K}371J;%VQ;LJA9bN(xEJ!jbNwoSsxU!0}G=r-~p}spkGo)SzQB`DA zl%;t!Z~FA>K`A|*-=N;UI;aCXK2gZEei4<*46ftAsVA)izrKhjEppv8`@?0WUwnHH6 z6;M=NBrwl0FIJ={-fE#Maz+d2FuB?aRu9cjjPExESdtIk#AS*8kyI&m^eZ?wY7?NMu6 zE&V>oQV9PD0YCT`q5<1|1OCezZ0H(%pc~$xwwxjH4oT+IEd+7wbeb@eoe%Vk(>o0> z16>_H?d|&uZOa}~%Yjf+9hK`Yqm5b}GFu%q+mDc|dTc(&(%iY3nA5)6ruPuqw;0;J?{RSbiB)JWcgfm$42Qty64e|2tajNM0 z<&hXlS3e#B@m27ND|v&bB^(!1#~hGkE3euEt)WHNz@=>q>ikgl?2( z2Z1Lbp`FH9(ZL$h7pMk@)RJNBWrjchrA_}x>I@vnCN={C01N{I05JchHvKaT_GfNK z=x;f(zw6fIc)c$#0b?Y$(S?R48PFD4!2v^jB*}%)gY*YA$;glho#=H3)#ydvazcyN zeydFr$^55d-v(|#S)7ja92a#L3=om?pPh^pcJqQ@CJ+~ zUzlOY!(%#^YqtNd-&wLaP`$r%1isVJ_FU(}kfGvU250G>g$|(KfQNY5Tm{{W^;4LU zw*=4j#)RnL;dO2SrpEXm!^v*SkMUw!I_L?*Ot+xJWcRS+M~Z{=9E337M~sEb&f?Nt z`-bH#WJJX%i&2Zlj^?6TmbavWS_vGhLe^UpHscJU1(_yw5SufKoQHr1TP0O)#A_-c#MVYnl z&@m#m%!!<7BKSqGPEYx;PEbK@PzHr!JrP`e7|VncJQmr37}2UXzEj$w^3%N8(+2WL z_%+^9c7L(A_akuAy196S%eb+UnljNWJhzu!}JB9hATn zs39J-pjaRyoj?xV&)g!e)%ea9Ff7^6nsU04>t8VVBN^GYUM!~kt&f4PP^YML!BLLO_5wnB>nvXxPoz@SJ ztGldZ1u+J(X4IxoJJDPe_3VFV*cd!)49pp$-t~KKd<$_t@SUL3!IbeyN>Dym5 z+?8Zen@p{E#o2%{6jC|s=&Ds_fs0^NrM2faN|T3Af{i&Aq8Pj}B)4(w!jaU%;S#dQ zG)gsKtwlK$)mUg&6e(w622(XuA0PKnh`&n`t~|B0=&itCOcp%NuIW)@DIU0qfO1dt ztz=8?(5z6QLr?e)UL7OiPSn|Aa3h>J|8uiNgk!SBNCkW=WoZG1@jhE;;e2eCd~6pgN!eY{I1lFx7WLg#i{&CB&B9!V{$EK_%oa;!~) z5oAbKS~_ZsoR6jc#Lv8omhr9$tgxZg^CdM6)a_o<>7r+fCk9fOK}w$zi@fyIBX{Ax zp0cD6_fY=iDGZ>9%-;&?{Yr(ng}AZzF>bWOj>Bt1-2B}bhE~FAL*2sNIEL85Y(t*V zwn98)ZW&btUpj{tANfr`#7|zs#0wICaI`;yo;zK8Cileiw+D?1g!=>Ti_eYMyY6L? zSoseB9P!ODum(KPV{i`%!w&^@80sUExLKCCBMHlW1O88pjtgzE6@RI!%P*Y%kE-gQ z7?k7MdgT8ML@x1us^Zjc0C-Ri-;@m#K#?-7d{;(CdsaT4f4#y3)Y{AUQ@T#N$&UzyOnbBv zW8pfG$?~zzWNaO<4ysyF(~-&*@f>&WM)U9)s@HO5f?5daktyNsAr3wcZ0E4scG-!o zYO%i0{c z@FRrmpe99-N9aA#u(9;ZNON0AXDA-|i5rvN2&XjktC&l4rad)sr@LK)KNUtPEv^Ql z(=B*!r)QsXUA&I|!uBIhY7jS|34DNI#eh;F#JZ@kQrrC1a=~sZ6sO*q8k_LDc;`R{ z*|PWh0R1lzALAlB%?3V2G*(R2#MJD{4*OpP-WnV&b;I&+R1~(@HNiF^$;OW*nDD)M zK+s$;cjMZ_XwF~S=S=x^J&U2}@lgxL;@b&jh?mT31uvGfGP!YS?S3je_nO_f{OB7^ z$#ixMhTAkW*qbaL_nA02Z)&~*Fz!v+YhSmWXP4zvU4^k)@FC|0jA(x8jLRnJXC`M9 zThbsm8pgz@rR0ZCtLIX?S`ML8%W*j&uBrK?=yQp*mGRhnoEz5s+qq29K*JVsFttjN z0=Yo|?>G8zmLdv8ssc#kuxb!FWHV%Lp)9Fu>KpBVJ7>dso(NFIr!NQ4R+}_mGM)cA|373ZW8!RXXZ)v3<7Q>QWIECt zOw^1f@CLr!RUU4;uW|rdiB}OP-%e)&3~jQ~1buZhJ`@PQD}-5^3{r#V>gvO^Gcz;w zd-fRJ&nnA}{GcsD71bu>)(C-td9Yj^DhGn+r*|eLPme*FOVmu&oGU>>u=5^0d$%p0 zYqaCqK0W>Z(PWc#srGV zca$fq;S(5c7?~WoWowEi6XvvvRL7JDYvv;dDnf7L>#b%M-%N$QJ-i#mjh^#vDIZ+U zD09b0Y0qF%KPe~X)UOJ;vL;sdQApRZck^UQfihCcK-P&iVYkU1S=~ZccXqMdsqG@H z1Btry^BivgA9cka$81si(K3wR`2Zgs_}K;x@;P5X|C9Sc{vFkLUz~6H|Kq-rk-3SD z!Jpih|J#i6CJt5w5qKLYWMhe!;jXw5G-PMCR2=Z8!0wo{mFc|h{l{!-Oa`gd-R@z# zyES#~>EYuA+|1h%h7IM7@xnpw`r-B_coGcVoX)S-ZJoQtK^ z=<@Mub|E-|reChjmkNZ?zREbl>HPYr&kYRTa40uRCy? zQYy1v0rhp&%=#T`P9RlpK;Y=?{lDs_^pjR2nZH=w@O85M?-ZDfli7c}SMt-cKnxgJ zay}w)_$&%`+lztGx-4WN`s{uf1lkfBSme|?jWpbTX2{5e;JH9NUs?>%3qGnRsJ_$i z{>-Fj#+h-asWx|(4gjt$MG)i}1PZbW;r7V%u4{`tMQSP0wOqG$2{L%XPmbNG{j5IZ zruYmOiBUw(Vldgl;X8GLI_XesQNqtOgtcu8!~&68Du}fR<$Y`JGl<@Ct{RA2?$Az} z%Spf4;j&XHnblhM?XZUUrN_t_(^f_RrLTWbuEe86B9a-~f3r6jeRAFuK-Ca|G;1IOd<*Uk5<&v#%yZ|h_FNJlg)jVdN;T^FmR zn(r@_8a8^mZ7@_1@ok7+ME8E4WQrd4eRcBCF4jS;xD4r%;Mg$3t^QlctsaNEZg8x6 z2`zHiH7hl&Gq~0ahgHkgELJsvwJ9=H>0B|0IpfiASSrJYmn9Sgvy^IDV|WuiX=lIWmVz^d|x|)59wH` zi@z&vpR}Xi*s+1C$bM4U>^I#i{;%8c^Db1WCu!EtLq9t5`SCi-Zpqkxsk1-UF1GIK z$>3k>7BDaX0P4S-Uw<#8{0}RV^eT%ifHKmXFZI1cr}#^m0k*e-mY2C%iP(bv5R9)T ziS~^vuBuzLP1JQm!WXtG5G}m1%N;zX&tcM$2p`#H<>>t~DOnt5B^y_KeBPk;$j=DO z+>CX8BDf2jDKIdG>4OnNaRP}{=VRh9OlqW}X;w&uQ=>>mQ!e2SKas;Be=3Dbn5q(u zY{rE#v5_K8WyR3=_i2*RAxxrC9UbPso~>55qtaQZ{gPd)CbfF4O^8_`UrE50eXncC zMS`$7s(QP$wDlAssOr&rzId2s0Te1P7UVU89IHO=)dBN;w}Gm^=IKwCW=))hNK+oV zbRAiru+bzb{HE0e>)Lv;#99@5L2a7r)bbSB$cD(>A_ZGYMvwZMYqIWWvV(Xs(UH@* zMt;Sy)YYw4fT(jc*^MGT+938=pH02CEihl9rgKGr%J&NQ!@Af!)%Cn$GW`8K!z>jy z=arbrCBc=am6vYrE;V}PfUBv)=R~oTaFXZx+@nx39f%<(?$mHx?=8>9CWKNlw|U>4 zvcHZp+VY2nOZ&3Dm0`$TdfNWZT~oN(Dq0%5mMn5(o%CkE4zf_2sbSh6M5qFs5zYvQ zw0+tk!U4i@Tpx@7U1=xc33Uo3p2`YtWUEWY2A5-m%b9-7`+16#Yjw)Y22IXPhGtrE zt9hKRfm41g6=>KXub5ZN3(g(KrPIK1(QMjm+bjsv{OmVzE^~-IPE&$75*ES3QFFmA zu~9aV?Kq@10fw@lFJpXCzBDwSHqK=V#1*8x1$WrYkKeOyclLQTX>VuC-8+CHvJB7w zUjRG|&(6R>c0P>SV?4DvFR5mM#f!)*1VPvaW@BgPpcHtn0dH{yB{4FP3`nPBNoOb= zc*}%Skq~vlp(TZjkmDpt5DM8ln2hI;sM;hd?U{GTY2iiI|#{_On$tIyD|67gs0K-NxFQ)5phg>JH$p1o@}|j&5wf zk6YkSCW)(fm&m>i(p8*W>X0W13=$}k2vRXb9mJ+Qfwqxsv4SGM9v!P?dW8G07K_Yi zkC8eYRi=w5osMLK2i55r>+9@eRCy}c4F!UFpM^FX;|kI4tZ}Xs4Y~!*1$#=2Wph@# zMjcSYvO|p@h9?LPQ&?6_@=DA0ss^Ir8ZAHvws|Q=s!Z6T$c00q6i>=>-j2ScHvk)j@o)N0K;Vnk?$Ee`dQR!nx_+fo3(7?>A^y* zskk&!1~KT^{w^?Rdtv|Q&o|Cp@G5ZEX8S}`+_cfFPxg-}bA-I}GEfM=*u?F$`;jCz zA{hL5a1{2ThruT{;wiJ>=d9z{DKFvk%NKmJDYx+r2$_C3(HST16AT1CHmM{J-|WE+SQxfTH#xk{TTZd^+t_H39|!uiQM z00ml=ph&`HpC}H0^#u$UxbHZFT}d3rqQ4mvMURx)L_uNfqa`s8u}~F`u#y>uSSXD# zyk!R{VmTLh9%B*QR)e9Oj6^&RVYn|jYWHm=v44)DMyiVBV#UTees}pXh}Qumx7&+6 zNFab%L;=bHD>u%sj5s8an*tB96p54@A5ca#hD$NF;24(&aSQn3bpo7l%|9b4AV@SO zrWohs7#9a|%kbj051eq%pA#PtBoZfAOfWkkFhDeBc5>GaFFpax0Z)Y#HwFxN2u(5O z1VIphgXQK+JC=Ilv;rQa3rp&Qr`yMZNJ6Q4m;*BO{!^P@3ys!8fc2FMnKVxye@^Y> zwHZF{71ygiGnhKGQ?DgezLP{GI=pP>Jp82rhlQ-bC$eYfId29ge+HtAgThiR;&Xu>kS*W}j=%QMYoMCR*i~M?c>d{wkHT-Ec|00n6m?zw2HO|kRXlzz7 zj>=vItRS4Aw_w(em*759GMsHMLwKjx%WpIH@nce} zZ)bkys5@evbw&5}zud)J@rtF7FR!BSYvayer_2>iob111p?^l0vQxC27DT^N=2l#) z)|0LYWEK!KEJ*=QfC}WnDG20*Xe2W=#xD4Ua3N;*jSfV zt5ZaQEH`ibn_hG&G_WkN8!#G|nLeqtZLpF4)l7$HH3wQTz3)Xr3E^i(cXQ0^B@4`! zJ!V|f*f5y0FV$8KzTN$KS~6+>Q1oMx)$mdef}RL5Zi#I1ZdwcGvMk5qBrm{WX4@Rk03Adn%J0TL~G;$*~#X z5(3YScIxVqrzS!x)lj5#%3|LYifpyVqVYHrJ$bLgl%+(PC&|-pr_gw(-1Wi>8tIX6 z#4r)w075~@z_Th@p=s>V{igdgU>1T;YOfpb*YS-w)U=ao8(Q*Hmc9e)D%(+@*TYG> zV7|vB!HL_}zT@rlg~+Srr)zgdvuWhvU3X<9kjm&Nd$AGB0VmnDe~d)Ebhrr?zNK54 z5qK=d$YGZ`V~nLbgL~vz*#Y?ZSsLo{w;RO4^wwTF;2O5ycv>#G7~tzd$own`U}Va; z7-{0dXW2Eri$_meTpWECFU)ACzbXg`DTPXd$Ytx~L|>Jgl#=`Ck+bCH>{t_&KAK_| za8c8iA6?B?(fK2=3I`!5Xe{ zBrp%58`?QRgqa0Ebd>{&jN^Vu#z9-gCBZZZv$BQyNsAJoCle4ej@gig<%40y3tT2l zpCQDRLmVRUmU3Z|&;%-@5bT|QRfM5Z`as-EfiMpSrS34$wgjinA-M(rD3yMa0rP=w z3j9!xG7P+CHA-Xhp2D;&>w9CYGhA@)5}k&0#~*T%CnuJ3jX7k|oHZkM<4F`SAyq(A zGLB1K!T-=Cj&%(O1`u&a2=U2Qzwrg^Uyjrto3se-xgamUmYgGBdgQNnO#N+>)<5=3 z{j>TeLCWrL!D=(fQdkO_qj$<;pbUTk&~Q)`e|eAsMNKpc6;jn0BP2FtIb+X)+gg3l zvjQY7AC!HM1OQ5CQwFBdmET-W-iP>nu`z($BbuNLHKc7hyP^T8A#2C$=AQwCHA}xS zOtCb?7^qpB6}X=Bs?Tf8OO-WjO%;ng2hQqpP|UpKxI)fS7$#U1_p%C(-b<#yx=LS( zFPu%=>U3e74r&&T+gB)jf4yJxgm1*Mj<;2QMK_n`DrZuh+8d1Pbt`?%@xtPFWyd!y zKf|R=cy@dnZkhxHeHRtoQ0>>08g|5+8GTlM#%N>YEJ^-2$WczCwR5kO`OYMafG?Tx zMfW*6vk^DLr@HV%b0UU(_|!aEHASm@`y_5>fH^!Auyj=qJKZ$q+UCep<6HkUrK&?^ zgi@MGS?Wx(!Rajj)jGJOM@X_f=b@hv{Q zbRmJ`Bc8LphE>X!Q5_U&R)im0g;GN34BXBnnxsYS-Wp|_uTYP{!a*D!p*F%h^l}}X zw*0{;;&i)HAU^c|#E;J)?)T`J?_}up%!GRL$f4`wdU)u&XKqeFU@mBr!I*;_S>FQo z20o{IQkf$i>Ivxf91-VGwTCSfQP0AlOfUb<{QLo(Ty|RLwy%wSb1DD;G=J%X{|9vb z?ulP`g6rcfH9vBwQB7O2IBICMtbhhqcGNNG8(Y_rVosJ}psKBFYHCFm>zI5$5;P|) z$wU!k0+D7&1Ax>?K_rFD|BWVI)(;6;PC^Gs3f6nInT~rQNu`1Cgn#u8==pOdTWj`r zwyW9uQ0Z@8eqpAiNW6|zBe3sn?%koTH(>47Q~NSr4gGrG?^nVeQuD^nrcQ!_*^L(}ADE3{mAd*`!t`iocbUV=JIwnZz}q)nW3MN zpO-&<$KG@2AAtk;?&nOYQ~CB|k8bJUulD2`o|LvD6AGw@B_$|eT_#9lY47DvS2HK< zse~STFpCsz*Di$Il+*E!6g1{1k~%tJk}vYBahxg%=dH+>OG4V0>|<{$5b;)%j<1fX5~$&ULrOC1oJX~SG>q!1D6!X)kh0%;(Pzeh zOMW7*=hvdwM6%IUn@5ChNuiDyUdL8Q8#Hdp^HL@laaOTilK6P|NKo}Pw~_FsMuMr% zUT7_uub3ZHe%&~}|5Qhf8c~FqYce6kE0kH+ zT$8X>VQ**|+PSo|giIRykj&5w^p~$HqCv2NWD|S%s5f(#k9RG3e`!hugH*y_-SIPd zX(2(13CCVMAhNgn{RAK=H(by=kAkS+F^rj-f?noQPC7D6G{7jx zVq%v7KUw-#=E9+1RwDRwFOYD98^+V#@k-!#=DZX+1*c@=`Ab@_1uocfWN9 z^P&KK&9y^F2IvY%El8+wSsxD7yp20Z^;eGEj)^Z2pCxPa~P&c$LaKo5WN%6Wyg zR^>&a7G8?EO4|c8tBPL3k)$53Et-x~^RK02*b(k=Q4t`kfq2$BE{wqa>9blRel~K8 zs3yw;By-)9`;0(+Fb9yksapEfo(7Pq21xTCmo0QLuHK z-x+%86)?gt`fY~z@#?FlgnBbzF!`1BSl>2!Ao|p3o{#`lE79mL-YWoC%qI0%wC_W6r$vGCHcm=O`G-UPxI8`-LU)upbvR>&) zTKl<53c*Cyc;}@M0ZV_0qZx^*;Tt7;d1ufd=mQ~I;Oay_$4g;%1(#nqRT<79N!F{@ zp7Wj9>FmaWWme^7p3ct_N6-h3$rZ}PC@r@OT62`;PL8x>(9vcwRaEJ5Q#+Fv#wZxE*^vq*EMX{0pSH7}xYdF8Y& zvGZ*9Xl|T{>y87(wOZy63E`aDg@;wKBu|1Dqoutqv%af^UERk>?z9w`=)Uua+6;gO zk7p4@mO&lDg3)-*v}jJvo2J_r*V?KFTUq8G(+8Hf346+hd7DGAT(7N`otR)M{IUE* zzVPCb3#oJHOj%9Q5^qtJ<76a3jzHBRD@6&Trg5_?5(jadv+A%PgH+5T1v($YF?%C``vLeXv9iArpI;u$+} zsv7=FIugocVg2m_3>;QvO1b^29NZ4@*C1|uN#8&o&c5+zEMa7EwZ!iq@6sagnXGw; z(a$z$s#ZHe$#^P1^lt&V#}AF#X5_)sEps@54o{`CSZ14)q(1+WT>B^(l! z^sKc^5=(EKg>Wq@o-O_JC!|$sDE(e`XV7Kv26@k=XqXpalyHmDFe~PjBbR=JWSCS? zs@POusX$L96j@}Ordx)0VJ&OLlyHhJVO7j1KUDN9M_ZPcr<5O&9Xs@ttCl5)Xqr?Q ziKGnYUM$Wlk4n^1I9PGbrJHz7kB26c&F*@ERPbzQ9LBbo1Hq%MxG5W_Xp~#T&&ZU! zA#6<|C1?!vY-k0__-Lq(j}*XSv!Y0pX)hxB?=8lk;;g=jGb3bftk%_;w~XVta9f`z ztiOP{g$U%#rEzC&ZAT{nb~)hu!J{-^h#*WuhO%V{pzAD>?)`z0Nk9#c2-Rqvg!s1 z?~ry$&>TwI@x(YWKyhsp9vzVgkH|O8u*?n^%z0jGgj=(zEMH#~GVexR-v}8{56YKiSSmkbZiCP%Ul6jYGJm^Y zl`qXagL!~e%9fyGl3D*g7PdR9yrY~6>ylDFqlz%eai*=5T{^?I2wJjUz#4JUesF zoPGx9QcB>BUchte(%RGmu3F7T7-(}*?Vy?hzWl_cX~e^j=pBN)6nUl0B~xQIW>-bs z!@iDZ4pmc6qk8jyIC}>m+nP7cw@%r%ZQHi(s#CUY+qP}nu2VQ=+qPY|zV4a+&vZxM zJ9BsJ9kEufm22;aHzOnS-OuxTJ*bQrl~c=I%0Y!TEh}uCbIY&P;L^?n9u0#IVN@Q^ zO_8UC`}8Vu%W?%N%lrdi@AkKoFrF58^3@H{O)5ecrWMOQeHqfg&-Imf3UFB#4bSYA zc=B_Aub*&~`lHP2{{YBgoS7@}6y`*~=X(pQKA}?cRG))~Q$Ds4LBC*IZR`-zDe=_m zhOJi}w1LCw#|g?ftTb2339|e1lZ|zgQM5ZpIQH=lT9+xwm5!_9?}h$JL|vajgs`pa ziMcdAqyT7M+osf|o7qrTORmej1u9OJ?os(9i{i2AB~voY;4B-WGVVl%Q2W{ZOGCL^ z`MQJ7p&gV;UCg*x*!-+AW4@ZW=7%|M=|!Mw5eKW1DWV?toGq5cmsHc!npSC!iU2C7 zSHg4)o*Z^SiOPjeDz>;K;>(IPonzlE=N@+3!*AWYzh<(tmHm$dLWK(x zGDgRW#yDh4dfPd!)Jx&cx+D)wfLR9^#hVnl%9Qp;#AjTb zDFDtNJN@J1gma6K6eR>^yo<_%bBnu;VrX#ck8VIu-ez2^SW5UL*n~e2`zEI@p?*`c zmh`bBb;X2MASvZ4u7-9Ku9;JiO3L7XFKlC8id?zD(bM_jaW~u`1M0)e(Q6{b(Db37 zr;U)rq@n*gwHISgK?H5!#;-RN_60PXPW)Cui-rFQLKUJy7Lr} za5kjU%Y*l_)=LW#WTP^4ObHw-IDM9w%pBzg@j9M626A|q^qMotIB=@oS_YaGN?r8gh z8r{*0yt1rHsmP@3Vf2orCQt<3*grDZgj+n`K&W)A-Q_Ghu_vDDMd>I|ToQ#R0y$m^ zc-dIrL7VF(g|7vDBW=+W60nFk&bYZ1yt`CIFDS1sfu6;x+;Df_;?y0~ z)be;ldK`$)q63%yVK*H40`6@>$AB7_4u4R5B{>);&6oD>3gy%_71VxfXeE9~300PU zAeU&QUi87XbZ%sHE8g zugRFzksdtpb$8*h^;T54tU|Qq)RndLsdgGrle&D9$O+VNR+a z(3dXO=&90S&N8P$ks6y&9|}{PKfX=xG%Mmh6gN+zb)G$u#cVXZX5wvyGkj0F+7>Z1 zJ`yual;)Ea#hq>nl%;%p;m&T#?c(HpRjGco@O4*7`LIZNv`FY0m+?8I`kS(rAKu(^ z0p^|FD#U1bYS0l*dh#yBtgyWe4Dav_p3oI;GyfcV0^#kO=u>!&H{1KLSsV{O%dUNH z#?AuJA^M;z3pOXonGjP<${8bDx_>Io=}%jP#9#w&zy(26TatPE#LB%LeH>brj#~n7 z1Toj>=99QIv)+Vy4|4kK_7xW3_d<*tu?l>9Ziem=E0!zf{}rG1%HWa3oi^BqE~khp zDmS`bD*sF`DL2nV-W@&H_<${`2h1Z!2fi-vfk3iUoO)t>BPGdKs@6w9(H)T>mFgqV zI|Q!i0mH-Sbn2W0eewSL0aTTS@iT5~Ksx<_3OXk?XNhyWpR?NDm23Y;5b((|@(HuH zEqT?gEK?$Iy$6T&p!Ip|y3{Cejq%_a_@y_47tULv;b~6k4r(D)_BAgV_!ZUb+rRz% zoRAs-GJ4So`nHv;(8&4F*&q^q$T;>)s2(O)Nw`j*h zBix~cNob-U+HtZcAB;;>{|w*;Q@^>QG^ispc1KDUT@wL6-Wog4`S(a`iS1(9x`OLc zk_Od`&b#=v0qK4F-JPHcgS0Awe1cycv95`?25z{{7(1cqz)1dkvqJ!6u-k%AmCUa0FB@wl|LX?=%ALrsWt$(7XU&xaOXD|#1;U=*4K9u z@ONJdGsJ?!1k^k(KyRc8xj-KCeCF}QMNzs|xi&w$xL2BM%DpDnSYT^{nnkgfIHEo` zPtd9WQMKfi2x06_n;fDsNx~oGh!tW+97N;y2Cr4v@CKy>a4DQ!pg}mDU8!f>mPE;5 z30!>xTgL`;(lkA?#(d&Jg5ys=g?x2Kd}Yuv7D4Y6Ar}GJLi)}V>Zv>_y}-^D89IB? z?g5Pl)XWDo+>&%>4wzx|P{u$U+^D2cNa;TVMX2k-pHJ*o>-%-qv4brBu41C|m9)h(nVDowzL;mFv;2I;__Xmm02IjhbESiG3{+Nw*Zq z=DtAN_g7-f4lAY1T=8Cop7$~H!!IA9t~_0t8DFA$z=U#)Kz_R{vYb zml1n39Ae5U6X>25?8q8+aveLZm4n{45KeDy&Y1%C-&$EG3vo)wWd(OUlc zJ7of$wg8KFCp}Tn$Og^)C?na79ZWWyZe&=4*1H|~kb>?#@VWQ4gKz!_qdXIrzkK-H z2~&=U54!=`Z2)7-fyVp>izx*doj<|m&8FSAEg7=!4BU4C8@+^$S;xU{pVFS4_uhVor%e^DI)BJZC9QUax)uv6~fM@_T1Q;Mlo+1HFv(9O9DDwAok?Q{-(zwj5cAhJNY!ax@W53}? zf4&)E-==u%j+^q!3nVLKqI~Rh{tJ?G&V!Hf)LZcTlVMs>Czn3vxsFzoG@0uO7wh-T z4B@qd^4NTYu}F4P16VyLCWL*LsEto{$PHG~pzR#HPv+C{Zvs89&ca1XVkU*-*Gcc zZiW(K%g+oI@eH-PG3xk`_W^Q@nDhY4ASd`?f_cF3@*e6povAjX6ug+h7q1sTG|UZ7s*W)0qAUqi zfuI@j4$qLFS`=8QGEor6k;YmeaO%jAL8}}*m1Ie+QBlok;Tz#Z_fYE##vD3t56cZ3Y0nsONSHQ3-a^SycGwdItdc{qKKuL+1A%4SO^UV^tNP2 zBMW=Lv>1QR>4=n7QdTM=QKP|Ag*;4*m|*obV3EBpV$$R9+ODex&zTlRND=1dp3I*% z_U0VBF~+7DN66iQCn5=85rM$bZfsS;TGfgo;78mQMCqfu>(tBC!Lr3j% z@pS}9N>PNBuKAJovU4-^pL|5yRO_n%^klczjV?pnUyMBZHhCU+vhiA$?9PLaIy$2Wd{#4 zfoJz``UKf=OpI=Y{}KYbenz^PDt+K_!pz%>^k<}A7z^>HGf{Ryk&zkVQ~Ht#3FfoV z$&j1qG-tBou7sSrys!u|I$nUr13k^rI-^8fnNlihnPvBX{4fqybo`~=&28fk=ML4> z76-9)ttGvg)CgE}yT13`J5RK20HLFdb$}J%HF%(M$*d}3mJy+tA0a@*X_m9be`rC( zyl+I)s8+;mwVXKztslFD0335TIWHJWVb8y7C5FDT&OKb7 zyU8y$M5@V*LDP%@5H|L?kKI==apq_fjv^gM1s1GEAUo|D!yXpeb=LdJf`zWPE|FG; z0j|#!4Y@?-q-etB;?og(E8EF^`fCJIVvz*kSrM~}C_nc~1f5wx=>Knz@3gRESN$jRU-p;kbuQU5W5r zc0SR-efzklGn#cJ?L~p*RgopvX~#qj@w}%unsx1(K>8L|(Toh6fex1iB?PUg)n&&QVOT30@NlHWn3 zm>a+y1M!RFuG7zUyGN3NK;{dz`r`e0aW4eYNhb&$gh(OoW zERbHJYtp&98Rj7RYxZ3ofen=+dBKG8H=-_TqEPx@hz;(K*hMdZFe-F{0d)N|UDA#U zv`W2s!DlFDmz8!$y-ovb2E>3g*uYvPbLhMhV%kFHsI@}b1%>z%q3tS$YNOVy->8n@ zvzX^@lM9t`8Jny`_kWsGNBSnUOf#@Y@Fr#k)3uU?<Nkl55~CCl-oh{ zUeg2HKJv%oI*@eDCHi?&G0z+vHTJbFU-j;JqLLnS?M%Ck3kLxoH)iJ&fx)jvO_0d; zn?#$oMIlxzj_t>kfO3{fv-?@ft2I_2rdF-EJmRn{u6Cy5??`ysO~<*4V%5!mqE|)= zmnf^LT{Cnu&2|RrQJ#sWM|vAL|8n1VB710*MlDh<*){&iM^IMMwlw^U`DnT=@#0_s zsTiEdX+TcBHKmo9TPmy05T_L~p8);cYv@~ac7Eg|?KR3m!$cFfWD+{qD1Gda-NUGo zA73xKH-=G>p?f;%$p^h*@zJ*MzcrHRN4MRe>!aP57VQBktJuSs)YJMhk=lrRvheY~ zL{ehLM5tx{pmimnbGaYx18QU8$@Y~^8MKp=+QA;D!?)dh8$41(lC-JErP{UApFq~^ zF;_yGCjH1q{?ph23D0$%h5-PO_|b3E{$Grpf7g#JszbPGtDt8_>p3 zyu?JfztjX=m#gC=)Aa%E-NJyxmY1RNJQ|c=SDGO{vF(Bh_QQ#si|Kx-_sey?lt<+5 z9_xMxK71*1`xNikqfFShqV=lg@3IZ-Z+qMZMUdSl1#FkAM|Pro=yvf{@4!(m?Z@)^ zd`L8XQFnbxfqX^uQoMAceap{=m@0oDjiPW@?);`)vlr~|Md2>paSvERjm0{8E3?rE z5xJ>~7$SPY45+N}LF@14owbH11tGF8ZU7v|2(Y(a=r|5fSfi*GJg;7`-CxjY7ANs`~iRliyX;i7XR`Dwue zzqrriA7?GP$3rD`9dFTk>it^#*dMftH1qyoSBr3RXneSa6S9~ZrUgnTXXWxb(q@fI zEIomeL)YmZ)5)g4I&jDkd9R*p^UP?)FnA^7gp{N!bj>O)rI%s}Dc3=1o(ASFj*?Op zD;mXKnawsbREHg(QbJl^Wq?UdGg(H(%4Zxva)_>oTJaZVuD?e*PZjmfNrl3$R=;_| zp;#)V68eYn$|ogGh1}KmuF)?sVz}>LH*3nIMjb2!_?vtVY5B5ftc3T4Z&xIowTC=k z$zgIndxZeQ>2HwThZDv1nl1fm<-W({O0iht2rQ2QDA7RAm_~&#oSf=2$t3zbkwN3+ zoWTOqK@fi_#wI$Pj<_U>}Aq0U`H& z0@>tH-9-lkvD(vz66PN2E~(e?H!*DK;rb#H;9YTbsdn4Noa%rOox8ZyO%U7%&Y0pf zL(Ul1yC<-%t3edrWAs-jLGV#x{EC%;^onS@QN2ExQX!sAee7E_vEWy%ad-B z#p|fFCCWKwNt*TL;bS}c0i;Skqu_-Ix}rk~xn9kh?V0SDy^sHJBe!7?{|7?z7)Gq7O(&YSQCD=c`ou}c&^neE8%#FS3`ytL*MD^Ja{ zIJQnob1gm);;oygB{{;D?MmiDU3T1ICKa~HVI<^4(WH^ko~Sx9exa1ROkpS-F2ZUF z;rXrQBzVw)oR~+8-H4tmS_ytjl-(S%>Avc|o}_Ekvg28HvH{+Ktd(3)!tR#yYz}bm z(}-y4_}k|;_P9Kuc}TPjg2I>zNAm+=zUZK=lLdRwpp}5Rb3sV!u1N|}s-R8u_*h|F zL42y0cBXleVz4Nt3StRz83s!QqEO=fY0)fk#ex~5ieq}I0*nknmeSs7ZsQ#1`~qAA zAb(-`!EUEWPePi$MwCUKN-N=RRtA5exiS@YiWVl0KZdiC9GGNXT4v1{XefeI>y?T2 z>~ch<%+p2b3h!AoWvP%YX3a>d3A4PzFNFRwz~Yk7$xfJ7LaIv86u%tje0z0MW4^ORk`P!k61qk<^J+=f{>e##%P`1jen2%7DUM zP83qt#Vm_l0X$80HOn62aVcCul{-?1QewbXQf_SsMj+p1gkpS!TH|>DhA|j*5h*@YNo>WdH{}B5dnJs(DOSY`b&c>aZP|Il1;Ls_bOG^ua(&73SBTQ0HjnX$1 z8!a`cM~hKD*20QJ7f8eA>Z&E_+wih{3!I}p0w?|#C4WKO@iDCr6u%cT$T$|Lz_UXk zbm!}7eD?9KfsaKw#K{23$N6A!8#FC}v}4=ysJAC(OhHw#7kW)ih-mLS`9>hQ?JYB$ zf8`kgc@XMwEp)$>m*)>t8E;phj7GP2^cqJn*lk|8Qn3Y8-ud95_4CkY8lE(H7gu+H z=5I!S$SSW=8;4xHR71Gd75Xmhjt398Cx=KQs>y1`)w7WP zny@8an|2LbG>@4Ho5hAD@S201Pj22&)8Yrwd5=y6M`A;2jAIv;aos*{5C{-&$Qn-n zVfx}zV5pWM)-gAo=r3lU>4rDRE4=s@_Yekm5-h%2ezNG?<^JhowGUn}zHM?J z7Q|k|6}~76oxrs5yF;P0l-VOB$Kn=0GYMmcj7F*Sllq`9 z9w9G-(6f(st*T!iGX@j#2N=&N!7k-VtgTxeGr}Alr{~k z6Vje4<`4{=D+;^eGNE+owxnk3VIJS_!6cw97rECbKbCE5^9gjZM{tDF{{+#{Cbd_4 z=>B4WfLp7>lSasqC-9y$WFHiEH#A;glI2Pln)vD zr!4*3ttc)^f7>`jNDfNW1hf#Nrh=*l? zcgFkwcDi4n%>;VLR{sGr4AHHJd>H(VGJcFq=A@%ghG#I^J6XdwIfZLj);l2Y8=dVF zq~qlj0P%T*CUt@}O7!s4=aVmlGk0cK;fv(`gWdDf^68!}>dqG9kSu*hjsa6njy^v! z-%C<(n;kcQTe0h|98aWux3|IzbF|Vc=lED+fsvLfY(~KNg!nl~nU}45W&F5WgbGi^ z3tD#nnf;q`!`BO4Mmv|em5mKrZ}w`W5F9(Cwq2o1eqQWG-J@%GGYQ1Jo!o@Ds5Md* zQ!#ep8n>_AHE-a$MuVCe9GPT5O8uH(66rcQ{dq8penU2v)#OWGI}Wq<55{yt?%;VA z*?Z%|!X$S@al!qcu?a>{8H*Z?5uLqD;<%M=FplDwV7sQ-Yd7RY5q+3;MIN^sU0Al06%$dex@wDdNsD^XCLIgQ z++Q6t1mYEx1o16X^eg9R>Ct1Z>2}upv#|D43j#fcQSJ@&uWer|e6&VF;5iuDRt4}hocxCDD zQAQPUr;}^pqtG|fC!ln;IiE`j)2CE6uWKWro|75xM(1-E_c6!uhU5KnZ}0c79ZGH- zG&`|DH1o+*@w~Eqq79V^9-LBpzUWuxo`qW!)P*~Kn%|b>rzgWW&g#m)r7%;HUxi?{ zi*CuIQJg7D>nomEV74t@WJfis&e=n+S**<5s&>Kr7pi{Xiq`%$AAd6VpLJ>}L1a^~ z)o7bDP)<{;B?A+z#u}?fG7h=Uu%S8!JCMM&X;yXTtGF_!v-@tf=kJ78odB82Y%;26 z%+n$n!K*U5ju(vJYZMuY^pvakx6(2kDpv zrnB;}?dT@AXxM8{_?n{`u@ZF0__JHkSIh67YCy#&f|zsFdP488pMKV8)E~>58LKBWT7!=-%d|-{kjeuc3RH>_oEZ z9BjIKDOF((qz@~|+Z~RW)d|laiCqEdU~pLJ-*eX2t5x4)CsJ<=al&FvEfp$aaYYy| z^WqBos4Fk0dL_l=Oi&8rJYsXu*irqshN;z4<_JSbWKMW)e2Qi7>tGLulkiBd4m$o% zMR*InHr>6k1KKt+s80CaTO$8hL!ue|w8~l5KC-sS?ogzJ*zAdu2q#l0-~4A3#Pih} z9j9-Nl^>^CIgZ)7vWtix##NprTQ(CpHUMuVLXQ9JA626Qa6|hbU-Gjf-Hq5dRfGl} z&l#ygE_MdZ75`hv?(@z+)G-PU4q&Azy1Nf=FSHHo#eYiWUf~%6vD(7n3?xBLv}+N3 zBQi2i2AQXJP^b2pjyMA$CKcZ}id%^~l&S>qct*<+n*KDnsj1gOFyI$lbjo;jiARX$KU z83m|ZB<160>;q)Lm2VunX9T^aC*MM zw}RhiV3BicLGN+!qU`W+H>A{;HWpVvSig*LGSGv6qz@$3(XsF;88HiUazY8y8Ql6TpidZ03cu}0Dw}A|09c(lDVnPzviz^btpINpA?sELuccvv}Q-# zjI|ULqGZEZ!x~spQ4=!-gFowViHtemfDw~Sij7O^s)RYR{~i1x!JkeQ+yIsWlnE*s z@FYTfzzCIJAP5M;UVbk>;+W6t%~hEeEBw2BpWN3UM)LEP;|~!y>pRDhG`83A+6ADo zZXz^zC2yCTZt8g#Q2S)q)caKA3R{s}ma^Qs53m|POx0=~YK?s%i z3Y?mG+Zq@j>z`LkV&`hKW%IVJ$mrpfAUgM3V>+9gJ<;-G($_W(2k+rfExXE)+BZ9J zR`IF7!!MX`k+;qpqOKNH?!LPD9jsdv)xqQx#j0E1DIs{w1?gi9&t z?IoCPSf8Jq(v~0#iAFHK6NHDtnlV+CW3nYuH*sVjlxf3>Jq9*so6if%%?NQ>sn;*U zO9slPns;@%Friw7JNKw078Hp^GEvR~UCB64gNyWCq0BZ*X3aGzPH#2}6Q84W=g;;NI*Dc} zw!y@wSt$LHXdGpnx|<~QdcCWW$tR*!elsG~wzqdq;>C`l$?L!JdLAGoS&`7RAZSPp zTX5+j_!DAy3|=)$6G-wVrN!RQd?V#EcqgK{Cvtie)=xdyi4=%zMsE2Iis2p6kc&Hm z18+4elF6BAHc#3Eet!U%zJG_ShDR(pFeRTf6Lv{Ojy{a2`~Rt2s;=SK9v!xRUCP|E zpRb6;C{L1RFK*`?M@f|~WTd!3F)lI2l^~(coJcrhpRI$QT0Ba`E=^?SF4*m?;saFc zs!jhMGdpxnuOXaGlgMtQ;sxK~IbEQlcPFkcap0$$QM%m@UI{Xz^p2BeWxwdo&TXlQ zX3^W8!=K2&WX0kcI-9+&CHtl*UtcZ&*oIFADI!)Hi;dghj2R~MKdZ0wB}R~272SYc z<^tY7v`hkNwMT%e2@!Mlf{R7?qEcfHIy!a3mII&sLorZZgaOf7*5DDax;zlS@%+x| z<40!x)-$?fkLlKcXHXh~clyHMBKedHevw;h040r)uCs;JTF7JKqA<=wVz+}Xp)fk{ zCORs2%hUqQ>p#Q3F=MtqCJN@3BZAP5aGeojdYi@1kZqJ{&(-8~t6jj&l<=6z=3TF! z$>~uqJBm3op1Y3$GkyL7qN_)N0dWL5!5prF(>oN2=~KK<(lt3zwZH5pGHQEcF@n^d zE--3)sJI$d|F{{lXu!xbOtkUh>ZUS!eG7(DyX%a}o!D#mqD9VgBj$g@US)eKWzTB( z9rTzVh9GJD1_Wb!@`ChLwM)nOlk`1(;rhzoS9)P~E#IxpD4jroFkUBX)ttE{-I}{) z-9lvd%Azrc4M=g$vJqWTNP*y!=<3u$c;ezp!)VQh&p6Pz0W4sH7 zbT|vNkvccZiW3Os(pg5v9o2ZAR_g^pqb09fb>Rx?zN5^!nrRk38mnnhh(>aAGH4Nn zH9@p!Jt_WNKkVh|K;|63bP=tFN%1J&5nL!F_db2sUpej@K2a>!OQbcKU5VA-qI^ZR zN}5z-u`I~jO5`iZDvo4oi=DY-{mz;6!|pWU(

H-hMLPq2$DhD}D(d-it4aoHra% zR5Y^WtjxT+Z(&v|x`%}Fw}*^-w&p=PsWG*TCDY*(2?vrNB-!r|N9Fi0&+@>YC|)`LZ03poy>;dbRn zAg_yX3;aSf$4C3}n9Px+I3k7?FT6jS=bVc8jk^U){BMW`cp3Jb>+l1vUs5}V9dJ^! zlN>o%6Ltj-;|^W{N%9L0iXagd{gB9%79S}DCW6Wb|= zwq)O9McweW1pJ^PFLlH>E2*de};tQWucA>0Ch*!2L4zZiK{!_WS< z$tu5-!4b&&{Y^u?F#_ef4o$2mpl;ihwgUEjmv9vFZH?6C z$mSNUQGG^tIQ_2|O$KM%p3b7PMR9!8rGgG0vnu)6VZ#i`(~T$3jqb100u-!zoKuEt z?78N9fS`ARLv{!PP7GGs0q5X#KH8${I#bm(LxydTwfhzq{VW54mczi>bR~v`?0}iV zJT~w!Z3@(bG6g7XkxF)z0lQ`pHlW0Hd zMT9Uht2cMb*I^}MTfmLC{pq*40U~RLa%9&y0$3-lTOH);%b6@3r-8!OqfUm;Q98_J z30ehFS0PDM%t%WhC@~2$hh+%kAZ){U=3365*iQzN>>_yBr;{dL)g{w8Z+1$g z`SL4C6lz*0&%rcX+81k=b_4NY89Fbe$TCt`Hg3$er*F=J?2l4KHu`%;VAtj-`N&r{ z9h%LU2iGPFw+u4x;KVca`M4vy-*(ckF2B`}psL}>3us+~*qeyEmHs9xR^zEXk|d07 z*j#%H(d_-~#nqTno1{gg9ooA~Q3mU5Q6!xAsiSLbk?e_a;IqR}ELMUuinsrTIPj0$ z;B}%xR_BL}i2jos_&<;vC^~!*}rfg}h0@mSgr*%RW>yY+{F1xSxLe)l-LyR1=&qzDLgGOMyX^G_n6#9d285v|r*GyVbvJ8`w z#yQf87$hORc@#{dq4=y>4vHSOdB*-9d@P$SaJJGaLt$9`6S0}*UnETk;ts$G1HcZ< zaAT znH89VCJ|}Hx=9(tUfd&6XpA&nA z7qdeNbAw9em)OwP5cZZJ44{42X=7Gof4A_olv|-qSuYD3Oua$gN4YHOr-+udBUnKH zXb#lU_HJNpzkdBIh4l~d@gLWZwGqU;|gz8hD8&2GJs%v0Ui(sdrzI}Ab$`@^b7Hpn6j zI*_7SwLSXVwd&pZ_4qz22k`EOofq86d-d9erw4*%&246=l;_MJvXSq%j0Y!+5!1j# zGm{=Si#Pr%jYejX!Z@F8^y7|F5m5O`eb5$E#mB}fj4V{vsO0cw4R2_dJ~0qTVI)%7 zeaNcHIs!?5an314rWj2o8;s}QpUCk;hpLjLU>#2ef%D{GYQ`abfPRUlY3@xO>uen4bgU&wQ%&))h@fx&r>x8^80^DS^g96 zZv|oMKR@w){J)GhS*_#cai$Mp({8{DA5+vJzfvXi&1QEi-%{hRRfxw#V zRc}#Etyj;%Z)@B9hWzpRVg)BTvE#f>C39lgm~354KHsOOe*?U&IPUJ%1bV_=b($GW z^tS}I1cJfhuC3JHhUs65QzzJX7DIC+w{7f~ejc}#sq$^%4nWK&Wu!y+40fnrk zdV{hWn8_Y!+v^w!d$IE#OW`7Gj`VBgh>>ygXbLc>-Rl*=%;!a5Bjs~RL{KB!7PaeF z&OL-v6hQp0q?dJw$OgwDVZw^#xhUA*MdSt@twZ&aMUJkWE!`~-rS*Vzp=~IJhNyYY z=->+Pt#<0yuwV>HWf43eDNRSym0X{4;~SpI-p2}CuR9{is2%*9)p8%RMu`fFZTt<@7|R=~RYI#RP{u0mP*JwA%I*vB zf1d=lp}+O2f9gP${s7wkdqU2CnFRiQNF=MCD=8bJe|OhiXvB#1izqNEAs8bZ9)K{( zBO)Xn6gW^YHV$6tb2MCVAzj=j)b#I53t^Czi zXFmv}>5s2R))tf&WoV1~)pb0W7es(Tb^D{$CHDH0$1Gadp@TMyE#`{el^I>uZ;9Rj zWSkA1!^u>{bijh4&`q+mUA=y(=^8}-Maonr!pX7@|4ckP=n2!Hu!PL~zNlMh+h+&O zRAIro{0<{#-DpLGS<_qtdgG7LSnnfVOtd{ha-bg|ITYsJn3D2aQl1!;5GnaHfs*&9!zE+F*DJz?>3?vdF zgN^XQCIzR&-_w}Khm#iEwMt8ZO%wIB2$OZ@m^hg8E*ZEHt3bF#P0-g?<}E78_aV1N zlX#=4{4^Ul1uCn}aFMnfzUn2RrF{=I+2u`cro{9l%scwdXv==yIlD{oGQzx$ox*!D zL|)P;c?iW}2V(3J&rFQQzz%YzVCKS9l!3$mhboh_)N)+Nm^=hGo!uY=u1BDfwtP8M#T@4NbUH5=)zZgvKjaz^hKctHo ztTMuKGrK(X?-o|U3i)JW@G{Z4n4BL&%a!&M$$Vv}i2@Vp>~#B62P9-`PwgmQ)F5fY z;<_@7FXuv$g@iM^_Ku)L(ar2$+f=J`B~Fmmz&CIG35r%%HOzQf~}t^z&cvVXK6bp*o5N&9CfUI5W~A3@UIhcuR1A=wEXsR(;>&MG?dfgKXCoH@a9 z0;m5iPk_P$F#3wdz#>Ub#j-| z%dDg)|D&OANV~`xW>a|$44CbGI^o zv+CZ_nTH#it4)!osJQQuqm~}3a8!+J9Z-zxTS1ekY&ET@#!VC2QnsDPRTdGN0~fPV z2w-^5!~kj!*1lx-C~({8chtu%i6lK4B&Y{?y;V>Yo?Z1rCeW7D796g`BAStlz}ZVz z4d5@nlcQV!Yp~0Z;EaHJg<3Rpf$$ZCTr4MqF5AIr-IBGmi(C_&zY1^rNg5@pfMDH1 zW?v}~u^J$G7b~pZQdXEf$GfnwDrFjdh_YIezs;`*pax&jE3_n#z`bhAEm@8YuvnPj z*mtkUz6BHK##P8kEG8-g-Lekchapa+)Cmp9LPYB!>Z;)qKvRe$)=3E_zPC!(}{?BGeg@&D`1hPKwUX6BYI=8opJHngVt|1Z7&sW|hWzUsg9)_3^9#hW|QnElir zp)vfoN}B)iL~wuzA5&Fwml8PdpAFW+4_cY)|K}6!etxu@wbihimMu05vd{K!hAKCs zi_N40M46HTa%B{VYH%d-+Wnw_S?bppcyrqo30Jpeft>414V+W0i?QUnZ~$_a0jqFhQ@VMdZZ% z8|rs@_87_bCur%+xcr*g@MoFymV=tyYV)Hsoo_hW&g7|6H=5>7f_jUet`)#YgbhCK;tUsT(N+o+oh}VOZ@9!R7w*I_#{w3k( z=l9M&)O+}D_2<9Rg{95s8Y=W2*Or`p=U2|ZAHk_b z`|7_xIGNvW|Ht-snSXT9UgO#io6C+FoQ+92{pRMY1wLPmdi)s9q&sxmJW4plE!pWh zQ)Ts>)3rH!mhL)oBPrI8ST#^o%m@;?n>upCkcN9K+`}O;_ zYrd7N0?C5m{tv~b7YI%|=MWm-!L0V$Q2*4UhE|75=S@o9{je-a(M&(zozh-qHrm4@#XwSh(#e)99ch;3Om3<9 zpD!KpdIJBiW8)I}w&B8oALXV3(~t4#^~_)r(fb&1 zZV^}1tDUPfivDICpL1QL&uaI9&1sJ+bkw&hYjbYN_VN^7JWplinF z`mu1IUO#8a$4fgur*+u&Si~&})#qV7@#!gNY4Lx5m;B|<;pewpS~X4X$p2j|bK{EC zb=C%nt@(8QkqGOa^GANWvrK+4&2@63pNyZc&dJ{HgI9jW-r@aRnZ1O2^W7gvSF(bN zK zU9Y&h*mPnA+pllF+uuLefA>Ul(FK!r@F7uOPIZF=eBP=+mCaUhR)yO zB~s3}Z}YKPbBcM6U-O^Ky*l#8+#mL5d!iCW>K0D6G0uFtH^yb#rP>*LGQI*Y9Ajh> zVFq?6fB?O&0WOz;0s)4%jvywyIzVXSU;rK7xnj=LfS9S1`a)G(kfFhE2j1H+QWCZKR4VjxTpk zhSs3Q0nONf*Fn&0L19N2LwecBhJ(Tm{TgzF;l;pgf;;S-Q7$D%Hx>OtXoRWu;)G4b zbSWqp(62>BnAt0X&rE14#Bxb0x~tJ|+(g(gMUH?C@VgC>@83i>AN{sOg!vZ0Y=t|l zfj)qnk9v0^vJIdxLcf>~VS_#}rx9TT`Zay%7NFk}hp>QIm1ql)Z~H;F0R18~gawVj zo5hLr0rItI=oX+~{e`gL1F$9_!UD{Tz|gHgzt#$2MY$$XR$yLog=_^V+oE5vgs>t& z8=n=J*Dax&jDFJ$!sLa(U5mKG2j$)wWJ5ve68+`|grUoTcMak*6!{(pWK*%7<&H4* zl{r3B!6h}UScJ_$pc{^U+Bd>*RV$(m$6k`5?;=JRtr11E(eORR$PNdEHTphNgy|_U z#G8)Y<>(8Q5oXtC5i}devSoDlqpu-E*x`{+&<@lUh3H13&!-}co?b=RX!O}tWYa-; z5`78`VY(Br6^=cTV~mAkOO7DJ(dSzbh8xurZ#Z=J1>NQ7&^DR9sF I%3cr;0FTsrI{*Lx literal 0 HcmV?d00001 diff --git a/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java b/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java index f08fe4b3a..656db3943 100644 --- a/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java +++ b/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java @@ -13,6 +13,9 @@ import weaver.interfaces.schedule.BaseCronJob; import java.time.LocalDate; import java.util.Date; +/** + * 定时自动累计专项附加扣除 + */ @Slf4j public class AutoAddAllSpecialAddDeductionJob extends BaseCronJob { diff --git a/src/com/engine/salary/timer/SyncTaxAgentEmpJob.java b/src/com/engine/salary/timer/SyncTaxAgentEmpJob.java index f8cf72df1..ea16e2022 100644 --- a/src/com/engine/salary/timer/SyncTaxAgentEmpJob.java +++ b/src/com/engine/salary/timer/SyncTaxAgentEmpJob.java @@ -7,6 +7,14 @@ import org.springframework.util.StopWatch; import weaver.hrm.User; import weaver.interfaces.schedule.BaseCronJob; +/** + * 自动同步人员 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Slf4j public class SyncTaxAgentEmpJob extends BaseCronJob { From 2735661b4a5de8a0ad2fc6c12b3f9e5c2c88f244 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 29 Jun 2023 10:35:55 +0800 Subject: [PATCH 210/245] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E6=A1=A3=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/archive/SalaryArchiveMapper.java | 2 + .../mapper/archive/SalaryArchiveMapper.xml | 10 ++++ .../mapper/siarchives/FundSchemeMapper.java | 7 ++- .../mapper/siarchives/FundSchemeMapper.xml | 13 +++++ .../siarchives/InsuranceBaseInfoMapper.java | 8 ++- .../siarchives/InsuranceBaseInfoMapper.xml | 12 +++++ .../mapper/siarchives/OtherSchemeMapper.java | 8 ++- .../mapper/siarchives/OtherSchemeMapper.xml | 12 +++++ .../mapper/siarchives/SocialSchemeMapper.java | 7 ++- .../mapper/siarchives/SocialSchemeMapper.xml | 12 +++++ .../salary/service/SIArchivesService.java | 6 +++ .../salary/service/SalaryArchiveService.java | 6 +++ .../service/impl/SIArchivesServiceImpl.java | 52 +++++++++++++++++++ .../impl/SalaryArchiveServiceImpl.java | 31 +++++++++++ .../sys/constant/SalarySysConstant.java | 4 ++ .../salary/sys/entity/vo/AppSettingVO.java | 5 ++ .../sys/service/SalarySysConfService.java | 6 +++ .../impl/SalarySysConfServiceImpl.java | 16 ++++++ .../salary/web/SIArchivesController.java | 12 ++++- .../salary/web/SalaryArchiveController.java | 14 +++++ .../web/SalarySystemConfigController.java | 14 +++++ .../salary/wrapper/SalaryArchiveWrapper.java | 9 ++++ .../wrapper/SalarySystemConfigWrapper.java | 4 ++ 23 files changed, 263 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java index 1775995f3..952c37bbb 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java @@ -122,4 +122,6 @@ public interface SalaryArchiveMapper { void deletePendingTodo(@Param("ids") Collection ids); void deleteSuspendTodo(@Param("ids") Collection ids); + + void deleteByIds(@Param("ids")Collection deleteIds); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index 35524924f..4b28a239d 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -467,6 +467,16 @@ + + UPDATE hrsa_salary_archive + SET delete_type=1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + - + diff --git a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml index bb4eda856..bf3fc220f 100644 --- a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml @@ -316,6 +316,9 @@ AND delete_type = #{deleteType} + + AND auto_send_status = #{autoSendStatus} + AND salary_sob_id IN @@ -496,13 +499,13 @@ replenish_salary_item_setting=#{replenishSalaryItemSetting}, - + auto_send_status=#{autoSendStatus}, - + auto_send_day_of_month=#{autoSendDayOfMonth}, - + auto_send_time_of_day=#{autoSendTimeOfDay}, diff --git a/src/com/engine/salary/service/SalarySendService.java b/src/com/engine/salary/service/SalarySendService.java index 36864da21..f8c301c1d 100644 --- a/src/com/engine/salary/service/SalarySendService.java +++ b/src/com/engine/salary/service/SalarySendService.java @@ -2,6 +2,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryBill.dto.*; import com.engine.salary.entity.salaryBill.param.*; +import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -187,4 +188,10 @@ public interface SalarySendService { * @param param */ Boolean checkMobileCode(SMSCodeCheckParam param); + + /** + * 获取所有工资单状态为未发送、已撤回的id + * @return + */ + List getNeedSendInfoId(List salarySobIds); } diff --git a/src/com/engine/salary/service/SalaryTemplateService.java b/src/com/engine/salary/service/SalaryTemplateService.java index 6042da567..0b855e351 100644 --- a/src/com/engine/salary/service/SalaryTemplateService.java +++ b/src/com/engine/salary/service/SalaryTemplateService.java @@ -112,4 +112,9 @@ public interface SalaryTemplateService { * @return */ PageInfo listPage(SalaryTemplateQueryParam queryParam); + + /** + * 获取所有设置了定时发送的默认工资单模板 + */ + List getAutoSendTemplate(); } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 64253642f..683c8801e 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1557,4 +1557,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService return true; } + + @Override + public List getNeedSendInfoId(List salarySobIds) { + return getSalarySendInfoMapper().getNeedSendInfoId(salarySobIds); + } } diff --git a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java index 8a67e9079..6241c2b13 100644 --- a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java @@ -132,7 +132,6 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate salaryTemplate.setTextContentPosition(saveParam.getTextContentPosition()); salaryTemplate.setSalaryItemNullStatus(saveParam.getSalaryItemNullStatus()?1:0); salaryTemplate.setSalaryItemZeroStatus(saveParam.getSalaryItemZeroStatus()?1:0); - salaryTemplate.setSalaryItemZeroStatus(saveParam.getSalaryItemZeroStatus()?1:0); mapper.insert(salaryTemplate); // 记录日志 // SalaryLoggerUtil.recordAddSingleLog(salaryTemplateLoggerTemplate, @@ -317,4 +316,9 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate PageInfo page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryTemplateDTOList, SalaryTemplateListDTO.class); return page; } + + @Override + public List getAutoSendTemplate() { + return mapper.listSome(SalaryTemplatePO.builder().autoSendStatus(NumberUtils.INTEGER_ONE).useType(NumberUtils.INTEGER_ONE).deleteType(NumberUtils.INTEGER_ZERO).build()); + } } diff --git a/src/com/engine/salary/timer/AutoSendSalaryJob.java b/src/com/engine/salary/timer/AutoSendSalaryJob.java new file mode 100644 index 000000000..bcc538a1f --- /dev/null +++ b/src/com/engine/salary/timer/AutoSendSalaryJob.java @@ -0,0 +1,80 @@ +package com.engine.salary.timer; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; +import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; +import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import com.engine.salary.service.SalaryBillService; +import com.engine.salary.service.SalarySendService; +import com.engine.salary.service.SalaryTemplateService; +import com.engine.salary.service.impl.SalaryBillServiceImpl; +import com.engine.salary.service.impl.SalarySendServiceImpl; +import com.engine.salary.service.impl.SalaryTemplateServiceImpl; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import weaver.hrm.User; +import weaver.interfaces.schedule.BaseCronJob; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author Harryxzy + * @ClassName AutoSendSalaryJob + * @date 2023/07/03 10:39 + * @description 自动发送工资单 + */ +public class AutoSendSalaryJob extends BaseCronJob { + + private SalarySendService getSalarySendService(User user) { + return ServiceUtil.getService(SalarySendServiceImpl.class, user); + } + + private SalaryTemplateService getSalaryTemplateService(User user) { + return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user); + } + + private SalaryBillService getSalaryBillService(User user) { + return ServiceUtil.getService(SalaryBillServiceImpl.class, user); + } + + @Override + public void execute() { + User tempUser = new User(); + tempUser.setUid(1); + tempUser.setLoginid("sysadmin"); + // 获取所有设置了定时发送的默认工资单模板 + List autoSendTemplate = getSalaryTemplateService(tempUser).getAutoSendTemplate(); + LocalDateTime nowLocalDateTime = SalaryDateUtil.dateToLocalDateTime(new Date()); + LocalDate autoSendDate = SalaryDateUtil.dateToLocalDate(new Date()); + SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm"); + List needSendSobIds = autoSendTemplate.stream().filter(po -> { + int maxDays = autoSendDate.lengthOfMonth(); + Integer sendDays = Integer.valueOf(po.getAutoSendDayOfMonth()); + if (sendDays.intValue() > maxDays) { + sendDays = maxDays; + } + LocalDate autoSendlocalDate = autoSendDate.withDayOfMonth(sendDays); + LocalDateTime autoSendDateTime = null; + try { + autoSendDateTime = autoSendlocalDate.atTime(SalaryDateUtil.dateToLocalDateTime(timeFormat.parse(po.getAutoSendTimeOfDay())).toLocalTime()); + } catch (ParseException e) { + throw new RuntimeException(e); + } + if (!autoSendDateTime.isAfter(nowLocalDateTime)) { + return true; + } + return false; + }).map(SalaryTemplatePO::getSalarySobId).collect(Collectors.toList()); + // 获取工资单状态为未发送、已撤回的发放id(且工资单类型为正常,未冻结) + List needSendList = getSalarySendService(tempUser).getNeedSendInfoId(needSendSobIds); + Map> sendMap = SalaryEntityUtil.group2Map(needSendList, SalarySendInfoPO::getSalarySendId, SalarySendInfoPO::getId); + for(Map.Entry> entry : sendMap.entrySet()){ + getSalaryBillService(tempUser).grant(SalarySendGrantParam.builder().salarySendId(entry.getKey()).ids(new ArrayList(entry.getValue())).build()); + } + } +} From 82ab6c1e1108204f6e11107252b7a30279a24d47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 4 Jul 2023 09:32:12 +0800 Subject: [PATCH 227/245] =?UTF-8?q?=E9=9D=9E=E7=B3=BB=E7=BB=9F=E7=AE=97?= =?UTF-8?q?=E7=A8=8E=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctCalculateBO.java | 6 ++ .../salaryacct/SalaryAcctManager.java | 13 +++- .../impl/SalaryAcctCalculateServiceImpl.java | 3 +- .../impl/SalaryAcctResultServiceImpl.java | 8 ++- .../service/impl/SalarySobServiceImpl.java | 60 ++++++++++++------- .../sys/enums/TaxDeclarationFunctionEnum.java | 6 +- .../web/SalarySystemConfigController.java | 2 +- 7 files changed, 67 insertions(+), 31 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java index 5244de8c0..22af2b674 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java @@ -10,6 +10,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobAdjustRulePO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; import lombok.AllArgsConstructor; import lombok.Data; import lombok.experimental.Accessors; @@ -119,6 +120,11 @@ public class SalaryAcctCalculateBO { */ private BlockingDeque results; + /** + * 系统算税启用状态 + */ + private TaxDeclarationFunctionEnum taxDeclarationFunction; + @Data @AllArgsConstructor public static class Result { diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java index 200da6442..207bd1649 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java @@ -22,6 +22,9 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctResultMapper; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; +import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; @@ -140,6 +143,11 @@ public class SalaryAcctManager extends Service { return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + + /** * 补充核算 @@ -307,6 +315,8 @@ public class SalaryAcctManager extends Service { BlockingDeque calculateResults = new LinkedBlockingDeque<>(partition.size()); // 12.3、生成本次运算的key String calculateKey = UUID.randomUUID().toString(); + // 12.4、是否采用系统算税 + TaxDeclarationFunctionEnum taxDeclarationFunction = getSalarySysConfService(user).getTaxDeclaration(); // 12.4、多线程运算,运算结果存放在临时表中 for (List acctEmployeePOS : partition) { SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO() @@ -327,7 +337,8 @@ public class SalaryAcctManager extends Service { .setIssuedFieldIds(issuedFieldIds) .setChildMonitor(childMonitor) .setResults(calculateResults) - .setCalculateKey(calculateKey); + .setCalculateKey(calculateKey) + .setTaxDeclarationFunction(taxDeclarationFunction); List finalSalarySobBackItems = salarySobBackItems; LocalRunnable localRunnable = new LocalRunnable() { @Override diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 69eb5b02e..8c46d7627 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -25,6 +25,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum; import com.engine.salary.formlua.entity.standard.ExcelResult; import com.engine.salary.service.*; +import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; @@ -309,7 +310,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc */ private String handleConsolidatedTax(String resultValue, SalaryItemPO salaryItemPO, SalaryAcctCalculateBO salaryAcctCalculateBO, List otherSalaryAcctEmployeePOS, List otherSalaryAcctResultPOS) { // 如果相同税款所属期内没有其他薪资核算人员,就不存在合并计税 - if (CollectionUtils.isEmpty(otherSalaryAcctEmployeePOS) || CollectionUtils.isEmpty(otherSalaryAcctResultPOS)) { + if (salaryAcctCalculateBO.getTaxDeclarationFunction() == TaxDeclarationFunctionEnum.CLOSURE || CollectionUtils.isEmpty(otherSalaryAcctEmployeePOS) || CollectionUtils.isEmpty(otherSalaryAcctResultPOS)) { return resultValue; } // 相同税款所属期内其他薪资核算记录 diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 0fbcf6ee6..c2b522a62 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -35,6 +35,7 @@ import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl; import com.engine.salary.service.*; import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.sys.entity.po.SalarySysConfPO; +import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; @@ -754,7 +755,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe BlockingDeque calculateResults = new LinkedBlockingDeque<>(partition.size()); // 12.3、生成本次运算的key String calculateKey = UUID.randomUUID().toString(); - // 12.4、多线程运算,运算结果存放在临时表中 + // 12.4、是否采用系统算税 + TaxDeclarationFunctionEnum taxDeclarationFunction = getSalarySysConfService(user).getTaxDeclaration(); + // 12.5、多线程运算,运算结果存放在临时表中 for (List acctEmployeePOS : partition) { SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO() .setSalaryAcctRecordPO(salaryAcctRecordPO) @@ -774,7 +777,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe .setIssuedFieldIds(issuedFieldIds) .setChildMonitor(childMonitor) .setResults(calculateResults) - .setCalculateKey(calculateKey); + .setCalculateKey(calculateKey) + .setTaxDeclarationFunction(taxDeclarationFunction); List finalSalarySobBackItems = salarySobBackItems; LocalRunnable localRunnable = new LocalRunnable() { @Override diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index f10e53149..1cf4943b6 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -26,6 +26,9 @@ import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarysob.SalarySobMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; @@ -117,6 +120,9 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } @Override @@ -310,6 +316,14 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(salarySobPO.getIncomeCategory()); List salarySobDefaultItemGroupPOS = defaultItemGroupBiz.listByIncomeCategory(incomeCategoryEnum); List salarySobDefaultItemPOS = salarySobDefaultItemService.listByIncomeCategory(SalarySobDefaultItemPO.builder().incomeCategory(incomeCategoryEnum.getValue()).build()); + + //是否需要系统算税,不需要则去除系统项目 + TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration(); + if (taxDeclarationFunctionEnum == TaxDeclarationFunctionEnum.CLOSURE) { + salarySobDefaultItemGroupPOS = new ArrayList<>(); + salarySobDefaultItemPOS = new ArrayList<>(); + } + // 2、薪资账套默认引用的系统薪资项目如果没有添加到薪资项目中,这里要给添加保存 // 2.1、查询已经添加到薪资项目中的系统薪资项目 Set defaultSysSalaryItemIds = SalaryEntityUtil.properties(salarySobDefaultItemPOS, SalarySobDefaultItemPO::getSysSalaryItemId); @@ -325,7 +339,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { .filter(sysSalaryItemId -> !sysSalaryItemIds.contains(sysSalaryItemId)) .collect(Collectors.toSet()); // 需要添加进薪资项目中的回算薪资项目 - needAddSysSalaryItemIds.addAll( SalarySobBackItemIds.stream().filter(salarySobBackItemId -> !sysSalaryItemIds.contains(salarySobBackItemId)).collect(Collectors.toList()) ); + needAddSysSalaryItemIds.addAll(SalarySobBackItemIds.stream().filter(salarySobBackItemId -> !sysSalaryItemIds.contains(salarySobBackItemId)).collect(Collectors.toList())); List needAddSysSalaryItemPOS = getSysSalaryItemService(user).listByIds(needAddSysSalaryItemIds); // 2.3、需要保存的薪资项目 List needInsertSalaryItemPOS = SysSalaryItemBO.convert2SalaryItemPO(needAddSysSalaryItemPOS, (long) user.getUID()); @@ -361,8 +375,8 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { } /** - * @description 新建薪资账套时,保存默认的关联人员范围及从范围中排除 * @return void + * @description 新建薪资账套时,保存默认的关联人员范围及从范围中排除 * @author Harryxzy * @date 2022/10/9 15:30 */ @@ -372,16 +386,16 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { queryParam.setCurrent(1); queryParam.setPageSize(100000); List includeList = (List) getTaxAgentManageRangeService(user).listPageByParamAndIncludeType(queryParam, NumberUtils.INTEGER_ONE).getList(); - includeList.stream().forEach(item->{ + includeList.stream().forEach(item -> { item.setEmployeeStatus(parseEnum2ValueStr(item.getEmployeeStatus())); }); // 获取从范围中排除 List excludeList = (List) getTaxAgentManageRangeService(user).listPageByParamAndIncludeType(queryParam, NumberUtils.INTEGER_ZERO).getList(); - excludeList.stream().forEach(item->{ + excludeList.stream().forEach(item -> { item.setEmployeeStatus(parseEnum2ValueStr(item.getEmployeeStatus())); }); // 将TaxAgentManageRangeListDTO转换为SalarySobRangePO - List rangeList = convert2SalarySobRangePO(salarySobPO.getId(),includeList,excludeList); + List rangeList = convert2SalarySobRangePO(salarySobPO.getId(), includeList, excludeList); // 保存SalarySobRangePO if (CollectionUtils.isNotEmpty(rangeList)) { salarySobRangeBiz.batchInsert(rangeList); @@ -391,16 +405,16 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { /** - * @description 将TaxAgentManageRangeListDTO转换为SalarySobRangePO * @return List + * @description 将TaxAgentManageRangeListDTO转换为SalarySobRangePO * @author Harryxzy * @date 2022/10/9 16:06 */ - private List convert2SalarySobRangePO(Long salarySobID,List includeList, List excludeList) { + private List convert2SalarySobRangePO(Long salarySobID, List includeList, List excludeList) { Date now = new Date(); ArrayList result = new ArrayList(); // 关联人员范围 - includeList.stream().forEach(item->{ + includeList.stream().forEach(item -> { SalarySobRangePO salarySobRangePO = SalarySobRangePO.builder() .salarySobId(salarySobID) .targetType(item.getTargetType().getValue()) @@ -416,7 +430,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { result.add(salarySobRangePO); }); // 从范围中排除 - excludeList.stream().forEach(item->{ + excludeList.stream().forEach(item -> { SalarySobRangePO salarySobRangePO = SalarySobRangePO.builder() .salarySobId(salarySobID) .targetType(item.getTargetType().getValue()) @@ -436,8 +450,8 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { /** - * @description 将枚举的defaultLabel转换为value * @return String + * @description 将枚举的defaultLabel转换为value * @author Harryxzy * @date 2022/10/9 16:56 */ @@ -445,10 +459,10 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { String[] split = employeeStatus.split(","); StringBuilder sb = new StringBuilder(); for (SalaryEmployeeStatusEnum statusEnum : SalaryEmployeeStatusEnum.values()) { - for(int i =0;i salaryTemplatePOS = getSalaryTemplateService(user).getBySalarySobIds(ids); - if(CollectionUtils.isNotEmpty(salaryTemplatePOS)){ + if (CollectionUtils.isNotEmpty(salaryTemplatePOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99713, "账套存在工资单模板,不能删除,请先删除该账套所对应的工资单模板")); } @@ -605,7 +619,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { if (CollectionUtils.isNotEmpty(salarySobPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98403, "薪资账套名称已存在")); } - + Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); if (openDevolution) { Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID()); @@ -664,7 +678,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { } // 复制薪资账套的回算薪资项目 - if (CollectionUtils.isNotEmpty(result.getSalarySobBackItems())){ + if (CollectionUtils.isNotEmpty(result.getSalarySobBackItems())) { getSalarySobBackItemService(user).batchInsert(result.getSalarySobBackItems()); } @@ -672,7 +686,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { if (CollectionUtils.isNotEmpty(result.getSalarySobItems())) { List salarySobItems = result.getSalarySobItems(); Date now = new Date(); - salarySobItems.stream().forEach(k->{ + salarySobItems.stream().forEach(k -> { Long salarySobItemShowId = IdGenerator.generate(); SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder() .id(salarySobItemShowId) @@ -680,13 +694,13 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { .salaryItemId(k.getSalaryItemId()) .isGroup(0) .itemHide(k.getItemHide()) - .creator((long)user.getUID()) + .creator((long) user.getUID()) .deleteType(NumberUtils.INTEGER_ZERO) .createTime(now) .updateTime(now) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); - if(k.getItemHide()==null){ + if (k.getItemHide() == null) { salarySobItemHidePO.setItemHide(Long.valueOf(0)); } salarySobItemService.InsertItemShow(salarySobItemHidePO); @@ -702,7 +716,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { if (CollectionUtils.isNotEmpty(result.getSalarySobItemGroups())) { List salarySobItemGroups = result.getSalarySobItemGroups(); Date now = new Date(); - salarySobItemGroups.stream().forEach(k->{ + salarySobItemGroups.stream().forEach(k -> { Long salarySobItemShowId = IdGenerator.generate(); SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder() .id(salarySobItemShowId) @@ -710,13 +724,13 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { .salaryItemId(k.getId()) .isGroup(1) .itemHide(k.getItemHide()) - .creator((long)user.getUID()) + .creator((long) user.getUID()) .deleteType(NumberUtils.INTEGER_ZERO) .createTime(now) .updateTime(now) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); - if(k.getItemHide()==null){ + if (k.getItemHide() == null) { salarySobItemHidePO.setItemHide(Long.valueOf(0)); } salarySobItemService.InsertItemShow(salarySobItemHidePO); @@ -781,7 +795,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { @Override public List listByTaxAgentIds(Collection taxAgentIds) { - if(CollectionUtils.isEmpty(taxAgentIds)){ + if (CollectionUtils.isEmpty(taxAgentIds)) { return new ArrayList<>(); } return getSalarySobMapper().listSome(SalarySobPO.builder().taxAgentIds(taxAgentIds).build()); diff --git a/src/com/engine/salary/sys/enums/TaxDeclarationFunctionEnum.java b/src/com/engine/salary/sys/enums/TaxDeclarationFunctionEnum.java index 325c5463e..9ab77c7fd 100644 --- a/src/com/engine/salary/sys/enums/TaxDeclarationFunctionEnum.java +++ b/src/com/engine/salary/sys/enums/TaxDeclarationFunctionEnum.java @@ -4,7 +4,7 @@ import com.engine.salary.enums.BaseEnum; import org.apache.commons.lang3.StringUtils; /** - * 申报功能启用枚举 + * 个税计算启用状态 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* @@ -12,8 +12,8 @@ import org.apache.commons.lang3.StringUtils; * @version 1.0 **/ public enum TaxDeclarationFunctionEnum implements BaseEnum { - OPEN("1", "开启申报功能", 1), - CLOSURE("0", "关闭申报功能", 1), + OPEN("1", "开启", 1), + CLOSURE("0", "关闭", 1), REBOOT("2", "重启", 1); private String value; diff --git a/src/com/engine/salary/web/SalarySystemConfigController.java b/src/com/engine/salary/web/SalarySystemConfigController.java index e747d7393..a50ca3a12 100644 --- a/src/com/engine/salary/web/SalarySystemConfigController.java +++ b/src/com/engine/salary/web/SalarySystemConfigController.java @@ -47,7 +47,7 @@ public class SalarySystemConfigController { } /** - * 申报前置 + * 是否开启系统算税 * * @param request * @param response From c8cf6090ff9de13716e5cad36b2392d89374051b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 4 Jul 2023 13:21:19 +0800 Subject: [PATCH 228/245] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=8F=AF=E9=85=8D=E7=BD=AE=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E3=80=81=E5=B7=A5=E8=B5=84=E5=8D=95=E6=A8=A1=E6=9D=BF=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E6=B2=A1=E6=9C=89=E9=9A=90=E8=97=8F=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bo/SalarySobItemAggregateBO.java | 2 +- .../salary/service/SalaryTemplateService.java | 10 ++++- .../impl/SalaryTemplateServiceImpl.java | 37 +++++++++++++++++-- .../salary/wrapper/SalaryTemplateWrapper.java | 4 +- 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java index 9450cb69a..940e11b29 100644 --- a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java +++ b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java @@ -134,7 +134,7 @@ public class SalarySobItemAggregateBO { .taxDeclarationColumn(SalaryItemBO.buildTaxDeclarationColumn(salaryItemPO.getCode())) .sortedIndex(salarySobItemPO.getSortedIndex()) .canEdit(openFormulaForcedEditing || Objects.equals(salaryItemPO.getCanEdit(), 1)) - .canDelete(salaryItemPO.getCanDelete() == null || Objects.equals(salaryItemPO.getCanDelete(), 1)) + .canDelete(openFormulaForcedEditing || salaryItemPO.getCanDelete() == null || Objects.equals(salaryItemPO.getCanDelete(), 1)) .build()); } } diff --git a/src/com/engine/salary/service/SalaryTemplateService.java b/src/com/engine/salary/service/SalaryTemplateService.java index 6042da567..5cca742e9 100644 --- a/src/com/engine/salary/service/SalaryTemplateService.java +++ b/src/com/engine/salary/service/SalaryTemplateService.java @@ -84,13 +84,21 @@ public interface SalaryTemplateService { List> selectSalarySobList(); /** - * 获取薪资项目设置 + * 获取薪资项目设置(不包含已隐藏的薪资项目、分类) * * @param salarySobId * @return */ List getSalaryItemSet(Long salarySobId, boolean isReplenish); + /** + * 获取薪资项目设置(包含已隐藏的薪资项目、分类) + * + * @param salarySobId + * @return + */ + List getSalaryItemSetContainHide(Long salarySobId, boolean isReplenish); + /** * 获取默认工资单模板 * diff --git a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java index 0e270fed8..5f667cd06 100644 --- a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java @@ -14,13 +14,13 @@ import com.engine.salary.entity.salaryBill.param.SalaryTemplateQueryParam; import com.engine.salary.entity.salaryBill.param.SalaryTemplateSaveParam; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; +import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; +import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; +import com.engine.salary.entity.salarysob.po.SalarySobItemHidePO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum; import com.engine.salary.exception.SalaryRunTimeException; -import com.engine.salary.service.SalarySobItemService; -import com.engine.salary.service.SalarySobService; -import com.engine.salary.service.SalaryTemplateService; -import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -55,6 +55,10 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } + private SalarySobItemHideService getSalarySobItemHideService(User user) { + return ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user); + } + @Override public SalaryTemplatePO getById(Long id) { return mapper.getById(id); @@ -274,6 +278,31 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate @Override public List getSalaryItemSet(Long salarySobId, boolean isReplenish) { + SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId); + // 处理薪资账套中隐藏的分类和项目 + // 获取关闭显示的分类 + List hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(1).build()); + // 过滤关闭显示的薪资项目分类 + List itemGroupDTOS = salarySobItemAggregate.getItemGroups().stream().filter(group -> !(hideGroupIDs.contains(group.getId()))).collect(Collectors.toList()); + // 获取关闭显示的薪资项目 + List hideItemIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(0).build()); + for(SalarySobItemGroupDTO DTO : itemGroupDTOS){ + List items = DTO.getItems(); + DTO.setItems( items.stream().filter(item -> !(hideItemIDs.contains(item.getSalaryItemId()))).collect(Collectors.toList()) ); + } + itemGroupDTOS = itemGroupDTOS.stream().filter(DTO -> CollectionUtils.isNotEmpty(DTO.getItems())).collect(Collectors.toList()); + salarySobItemAggregate.setItemGroups(itemGroupDTOS); + if(hideGroupIDs.contains(0L)){ + // 隐藏了未分类 + salarySobItemAggregate.setItems(Collections.emptyList()); + }else{ + salarySobItemAggregate.setItems( salarySobItemAggregate.getItems().stream().filter( item -> !(hideItemIDs.contains(item.getSalaryItemId())) ).collect(Collectors.toList()) ); + } + return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish); + } + + @Override + public List getSalaryItemSetContainHide(Long salarySobId, boolean isReplenish) { SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId); return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish); } diff --git a/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java b/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java index 7639f4e13..998e2e667 100644 --- a/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java @@ -415,7 +415,7 @@ public class SalaryTemplateWrapper extends Service { Boolean isReplenish = Optional.ofNullable(param.getIsReplenish()) .orElse(false); List salaryItemSet - = getSalaryTemplateService(user).getSalaryItemSet(param.getSalarySobId(), isReplenish); + = getSalaryTemplateService(user).getSalaryItemSetContainHide(param.getSalarySobId(), isReplenish); Long groupId = param.getGroupId(); return salaryItemSet.stream() .filter(s -> Objects.equals(s.getGroupId(), groupId + "")) @@ -437,7 +437,7 @@ public class SalaryTemplateWrapper extends Service { public List getSalaryGroupSet(SalaryBillSalaryGroupQueryParam param) { Boolean isReplenish = Optional.ofNullable(param.getIsReplenish()) .orElse(false); - return getSalaryTemplateService(user).getSalaryItemSet(param.getSalarySobId(), isReplenish) + return getSalaryTemplateService(user).getSalaryItemSetContainHide(param.getSalarySobId(), isReplenish) .stream() .filter(group -> !Optional.ofNullable(param.getExistSalaryGroupIds()).orElse(Collections.emptyList()) .contains(group.getGroupId()) From a5a05aabda5c47128bb41ab8ff06c0cd7edbfca3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 4 Jul 2023 14:35:51 +0800 Subject: [PATCH 229/245] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=8F=91=E9=80=81fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SalarySendServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 683c8801e..d6e5374f0 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1560,6 +1560,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public List getNeedSendInfoId(List salarySobIds) { + if(CollectionUtils.isEmpty(salarySobIds)){ + return Collections.emptyList(); + } return getSalarySendInfoMapper().getNeedSendInfoId(salarySobIds); } } From 7f7e7cd453ce552f6e60ba4696de128c78632d91 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 4 Jul 2023 14:48:02 +0800 Subject: [PATCH 230/245] =?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=A1=A3=E6=A1=88=EF=BC=8C=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=AD=97=E6=AE=B5=E6=8F=90=E7=A4=BA=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryArchiveExcelServiceImpl.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 2ce7e1916..fd43040ac 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -388,8 +388,8 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // 4.注释 List excelComments = Lists.newArrayList(); String requireI18n = SalaryI18nUtil.getI18nLabel(100344, "必填"); - excelComments.add(new ExcelComment(0, 0, 3, 2, requireI18n)); - excelComments.add(new ExcelComment(1, 0, 4, 2, requireI18n)); + excelComments.add(new ExcelComment(0, 0, 1, 2, requireI18n)); + excelComments.add(new ExcelComment(1, 0, 2, 2, requireI18n)); //收入所得项目 // List incomeCategoryOptions = Arrays.stream(IncomeCategoryEnum.values()).map(e -> // SalaryI18nUtil.getI18nLabel(e.getLabelId(), e.getDefaultLabel()) @@ -399,16 +399,16 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // SalaryArchiveExcelBO.createExcelComment(excelComments, requireI18n + ',' + SalaryI18nUtil.getI18nLabel(127641, "多个账套之间用,分隔"), 0, 0, 3, 3); // int i = enableHr ? 10 : 9; if (isPendingList) { - excelComments.add(new ExcelComment(5, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'"))); + excelComments.add(new ExcelComment(6, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'"))); // excelComments.add(new ExcelComment(5, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'"))); } else if (isFixedList) { if (isInit) { - excelComments.add(new ExcelComment(5, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); - excelComments.add(new ExcelComment(6, 0, 9, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'"))); - excelComments.add(new ExcelComment(7, 0, 10, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); + excelComments.add(new ExcelComment(6, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); + excelComments.add(new ExcelComment(7, 0, 9, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'"))); + excelComments.add(new ExcelComment(8, 0, 10, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); } else if (isSalaryItemAdjust) { - excelComments.add(new ExcelComment(5, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,可填写如:入职,转正,调薪,调岗调薪,离职,其他,初始化"))); - excelComments.add(new ExcelComment(6, 0, 9, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); + excelComments.add(new ExcelComment(6, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,可填写如:入职,转正,调薪,调岗调薪,离职,其他,初始化"))); + excelComments.add(new ExcelComment(7, 0, 9, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); } } else if (isSuspendList) { // SalaryArchiveExcelBO.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(109736, "格式样例为'2022-01-01'、'2022/1/1'"), 0, 0, i + 1, i + 1); From c78839d8c0c70e323e5b19c3a3ed8ad1cdf1430c Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 4 Jul 2023 18:03:57 +0800 Subject: [PATCH 231/245] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=8F=91=E9=80=81=20=E6=B7=BB=E5=8A=A0=20=E5=8F=91?= =?UTF-8?q?=E6=94=BE=E5=91=A8=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/SalaryTemplateBaseSetDTO.java | 3 ++ .../param/SalaryTemplateSaveParam.java | 13 +++++ .../salaryBill/po/SalaryTemplatePO.java | 5 ++ .../SalaryAutoSendCycleTypeEnum.java | 54 +++++++++++++++++++ .../salarybill/SalarySendInfoMapper.java | 5 +- .../salarybill/SalarySendInfoMapper.xml | 27 +++++++--- .../salarybill/SalaryTemplateMapper.xml | 35 ++++++++++++ .../salary/service/SalarySendService.java | 11 +++- .../service/impl/SalarySendServiceImpl.java | 12 ++++- .../impl/SalaryTemplateServiceImpl.java | 2 + .../salary/timer/AutoSendSalaryJob.java | 39 ++++++++++---- 11 files changed, 185 insertions(+), 21 deletions(-) create mode 100644 src/com/engine/salary/enums/salarysend/SalaryAutoSendCycleTypeEnum.java diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateBaseSetDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateBaseSetDTO.java index aaac80788..972855750 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateBaseSetDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateBaseSetDTO.java @@ -58,6 +58,9 @@ public class SalaryTemplateBaseSetDTO { // 是否启用工资单定时发送 private Boolean autoSendStatus; + // 自动发送工资单周期1:本月、2:上月 + private int autoSendCycleType; + // 每月几号自动发送工资单 private String autoSendDayOfMonth; diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java index f979eecbc..7ddd4737d 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java @@ -2,6 +2,7 @@ package com.engine.salary.entity.salaryBill.param; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO; import com.engine.salary.enums.salarybill.SalaryTemplateTextContentPositionEnum; +import com.engine.salary.enums.salarysend.SalaryAutoSendCycleTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryI18nUtil; import lombok.AllArgsConstructor; @@ -66,6 +67,9 @@ public class SalaryTemplateSaveParam { // 是否启用工资单定时发送。0:未启用、1:已启用 private Boolean autoSendStatus; + // 自动发送工资单周期1:本月、2:上月 + private SalaryAutoSendCycleTypeEnum autoSendCycleType; + // 每月几号自动发送工资单 private String autoSendDayOfMonth; @@ -130,5 +134,14 @@ public class SalaryTemplateSaveParam { if (Objects.isNull(saveParam.getAutoSendStatus())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "是否启用自动发放不能为空")); } + + if (saveParam.getAutoSendStatus() == Boolean.TRUE) { + if(StringUtils.isBlank(saveParam.getAutoSendDayOfMonth())) + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "自动发放日期不能为空")); + if(Objects.isNull(saveParam.getAutoSendCycleType())) + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "自动发放周期不能为空")); + if(StringUtils.isBlank(saveParam.getAutoSendTimeOfDay())) + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "自动发放时间不能为空")); + } } } diff --git a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java index acd962c1e..69e41d5cb 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java @@ -130,6 +130,11 @@ public class SalaryTemplatePO { */ private Integer autoSendStatus; + /** + * 自动发送工资单周期1:本月、2:上月 + */ + private int autoSendCycleType; + /** * 每月几号自动发送工资单 */ diff --git a/src/com/engine/salary/enums/salarysend/SalaryAutoSendCycleTypeEnum.java b/src/com/engine/salary/enums/salarysend/SalaryAutoSendCycleTypeEnum.java new file mode 100644 index 000000000..dfe02a0be --- /dev/null +++ b/src/com/engine/salary/enums/salarysend/SalaryAutoSendCycleTypeEnum.java @@ -0,0 +1,54 @@ +package com.engine.salary.enums.salarysend; + + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * @ClassName SalaryAutoSendCycleTypeEnum + * @author Harryxzy + * @date 2023/7/4 17:30 + * @description 自动发送工资单周期 + */ +public enum SalaryAutoSendCycleTypeEnum implements BaseEnum { + + THIS_MONTH(1, "本月", 86072), + NEXT_MONTH(2, "下月", 86073); + + private int value; + + private String defaultLabel; + + private int labelId; + + SalaryAutoSendCycleTypeEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + public static SalaryAutoSendCycleTypeEnum parseByValue(int value) { + for (SalaryAutoSendCycleTypeEnum salaryCycleTypeEnum : SalaryAutoSendCycleTypeEnum.values()) { + if (Objects.equals(salaryCycleTypeEnum.getValue(), value)) { + return salaryCycleTypeEnum; + } + } + return null; + } +} diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.java b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.java index 5f971a4e3..c4f5f0db9 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.java +++ b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.salaryBill.param.SalaryBillQueryParam; import com.engine.salary.entity.salaryBill.param.SalarySendDetailQueryParam; import com.engine.salary.entity.salaryBill.param.SalarySendInfoQueryParam; import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; +import com.engine.salary.entity.salaryBill.po.SalarySendPO; import org.apache.ibatis.annotations.Param; import java.util.Collection; @@ -100,5 +101,7 @@ public interface SalarySendInfoMapper { void deleteBySalaryAcctRecordIds(@Param("salaryAcctRecordId") Collection ids); - List getNeedSendInfoId(@Param("salarySobIds") List salarySobIds); + List getNeedSendInfoList(@Param("salarySendIds") List salarySendIds); + + List getNeedSendListBySalarySobIds(@Param("salarySobIds")List salarySobIds); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml index 238365585..67bcba254 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml @@ -684,18 +684,31 @@
ORDER BY id DESC - + select id,salary_send_id from hrsa_salary_send_info a - left join hrsa_salary_send b - on a.salary_send_id = b.id where a.delete_type=0 and a.send_status in (0,2) and (a.salary_acct_type!=1 or a.salary_acct_type is null) - and b.delete_type=0 - and (b.send_status != 1 or b.send_status is null) + + AND a.salary_send_id IN + + #{salarySendId} + + + + + - diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.java b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.java index d0da230f7..ef1e6f6cb 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.java +++ b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.java @@ -63,4 +63,6 @@ public interface SalarySendMapper { void batchHandleSalaryAcctTypeHistory(); void deleteBySalaryAcctRecordIds(@Param("salaryAcctRecordId") Collection ids); + + List getNeedSendListBySalarySobIds(@Param("salarySobIds")List salarySobIds); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml index 040f23831..5b87e3774 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml @@ -236,6 +236,22 @@
ORDER BY id DESC + diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index f9c878dff..4c5645fdc 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1571,6 +1571,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService if(CollectionUtils.isEmpty(salarySobIds)){ return Collections.emptyList(); } - return getSalarySendInfoMapper().getNeedSendListBySalarySobIds(salarySobIds); + return getSalarySendMapper().getNeedSendListBySalarySobIds(salarySobIds); } } diff --git a/src/com/engine/salary/timer/AutoSendSalaryJob.java b/src/com/engine/salary/timer/AutoSendSalaryJob.java index 064cd5093..30777f606 100644 --- a/src/com/engine/salary/timer/AutoSendSalaryJob.java +++ b/src/com/engine/salary/timer/AutoSendSalaryJob.java @@ -75,7 +75,7 @@ public class AutoSendSalaryJob extends BaseCronJob { if (sendDays.intValue() > maxDays) { sendDays = maxDays; } - autoSendDate.withDayOfMonth(sendDays); + autoSendDate = autoSendDate.withDayOfMonth(sendDays); LocalDateTime autoSendDateTime = null; try { // 加上时间 From 40fc4ea13cdc8e757eee77e7cb79ea32a1862eb2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 5 Jul 2023 11:39:54 +0800 Subject: [PATCH 234/245] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=8F=91=E9=80=81=20=E8=B0=83=E6=95=B4=E5=91=A8?= =?UTF-8?q?=E6=9C=9F=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryBill/dto/SalaryTemplateBaseSetDTO.java | 2 +- .../salary/entity/salaryBill/param/SalaryTemplateSaveParam.java | 2 +- .../engine/salary/entity/salaryBill/po/SalaryTemplatePO.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateBaseSetDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateBaseSetDTO.java index 972855750..b09f269b0 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateBaseSetDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateBaseSetDTO.java @@ -59,7 +59,7 @@ public class SalaryTemplateBaseSetDTO { private Boolean autoSendStatus; // 自动发送工资单周期1:本月、2:上月 - private int autoSendCycleType; + private Integer autoSendCycleType; // 每月几号自动发送工资单 private String autoSendDayOfMonth; diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java index 474b66a01..7b9b5db2c 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java @@ -67,7 +67,7 @@ public class SalaryTemplateSaveParam { private Boolean autoSendStatus; // 自动发送工资单周期1:本月、2:上月 - private int autoSendCycleType; + private Integer autoSendCycleType; // 每月几号自动发送工资单 private String autoSendDayOfMonth; diff --git a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java index 69e41d5cb..f5c416305 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java @@ -133,7 +133,7 @@ public class SalaryTemplatePO { /** * 自动发送工资单周期1:本月、2:上月 */ - private int autoSendCycleType; + private Integer autoSendCycleType; /** * 每月几号自动发送工资单 From fa28db9c797ccfb33491ce86ee281cc675c25830 Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 7 Jul 2023 10:15:23 +0800 Subject: [PATCH 235/245] =?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=E9=AB=98=E7=BA=A7?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=92=8C=E5=AF=BC=E5=87=BA=E5=B8=A6=E5=85=A5?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E6=9D=A1=E4=BB=B6=E6=9C=AA=E7=94=9F=E6=95=88?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/salaryacct/SalaryAcctEmployeeMapper.xml | 14 ++++++++++++++ .../engine/salary/web/SalaryAcctController.java | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index f141c8728..f414ff60f 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -579,6 +579,7 @@
@@ -592,6 +593,12 @@ AND em.workcode like '%'||#{param.workcode}||'%' + + AND em.subcompanyid1 IN + + #{subcompanyId} + + AND em.departmentid IN @@ -655,6 +662,7 @@ @@ -668,6 +676,12 @@ AND em.workcode like '%'+#{param.workcode}+'%' + + AND em.subcompanyid1 IN + + #{subcompanyId} + + AND em.departmentid IN diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 8df680db0..6f06d003b 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -719,6 +719,14 @@ public class SalaryAcctController { if (StringUtils.isNotBlank(ids)) { param.setIds(Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList())); } + String workcode = request.getParameter("workcode"); + if (StringUtils.isNotBlank(workcode)) { + param.setWorkcode(workcode); + } + String subcompanyIds = request.getParameter("subcompanyIds"); + if (StringUtils.isNotBlank(subcompanyIds)) { + param.setSubcompanyIds(Arrays.stream(subcompanyIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } } From 9c34fb9497409e820a761c965bed8b62c418a2a0 Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 7 Jul 2023 11:47:43 +0800 Subject: [PATCH 236/245] =?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=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E6=96=B0=E5=A2=9E=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java | 1 + .../entity/salaryacct/param/SalaryAcctResultQueryParam.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java index 8320ff6bf..f713e07a4 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java @@ -50,6 +50,7 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam { */ private SalaryEmployeeStatusEnum status; + private Collection statusList; //离职日期") private LocalDateRange dismissDate; diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java index 21221a4b3..6edf7ab10 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java @@ -46,6 +46,7 @@ public class SalaryAcctResultQueryParam extends BaseQueryParam { //状态 private SalaryEmployeeStatusEnum status; + private Collection statusList; //离职日期 private LocalDateRange dismissDate; From b92c7ff599bc60d1828cd765924da7288dcc3e31 Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 7 Jul 2023 15:32:12 +0800 Subject: [PATCH 237/245] =?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=E3=80=81=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E3=80=81=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=EF=BC=8C=E9=AB=98=E7=BA=A7=E6=90=9C=E7=B4=A2=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9D=A1=E4=BB=B6=E6=94=B9=E4=B8=BA=E6=95=B0?= =?UTF-8?q?=E7=BB=84=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=85=A5=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/SalaryAcctEmployeeQueryParam.java | 3 ++- .../param/SalaryAcctResultQueryParam.java | 4 +++- .../param/SalaryArchiveQueryParam.java | 2 ++ .../salaryacct/SalaryAcctEmployeeMapper.xml | 18 ++++++++++++++++++ .../salary/web/SalaryAcctController.java | 4 ++++ 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java index f713e07a4..cfe97aae9 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java @@ -50,7 +50,8 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam { */ private SalaryEmployeeStatusEnum status; - private Collection statusList; + //状态(多选) + private List statuses; //离职日期") private LocalDateRange dismissDate; diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java index 6edf7ab10..c82ebf8af 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java @@ -10,6 +10,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.Collection; +import java.util.List; /** * 薪资核算结果查询参数 @@ -46,7 +47,8 @@ public class SalaryAcctResultQueryParam extends BaseQueryParam { //状态 private SalaryEmployeeStatusEnum status; - private Collection statusList; + //状态(多选) + private List statuses; //离职日期 private LocalDateRange dismissDate; diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java index c975e8283..f52e8bee2 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java @@ -48,6 +48,8 @@ public class SalaryArchiveQueryParam extends BaseQueryParam { //状态 private String userstatus; + //状态(多选) + private List statuses; //入职日期 private List hiredate; diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index f414ff60f..ea8fac029 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -528,6 +528,12 @@ #{positionId} + + AND em.status IN + + #{userStatus} + + -- 在职 AND em.status in (0,1,2,3) @@ -611,6 +617,12 @@ #{positionId}
+ + AND em.status IN + + #{userStatus} + + -- 在职 AND em.status in (0,1,2,3) @@ -694,6 +706,12 @@ #{positionId} + + AND em.status IN + + #{userStatus} + + -- 在职 AND em.status in (0,1,2,3) diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 6f06d003b..d66893e72 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -709,6 +709,10 @@ public class SalaryAcctController { if (StringUtils.isNotBlank(status)) { param.setStatus(SalaryEmployeeStatusEnum.parseByValue(Integer.parseInt(status))); } + String statuses = request.getParameter("statuses"); + if (StringUtils.isNotBlank(statuses)) { + param.setStatuses(Arrays.stream(statuses.split(",")).map(String::valueOf).collect(Collectors.toList())); + } //fixme 日期 request.getParameter("dismissDate"); String consolidatedTaxation = request.getParameter("consolidatedTaxation"); From b705161492e7ac54fa8f0e2e9432247ec807391e Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 10 Jul 2023 14:33:43 +0800 Subject: [PATCH 238/245] =?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=E3=80=81=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E3=80=81=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=EF=BC=8C=E9=AB=98=E7=BA=A7=E6=90=9C=E7=B4=A2=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 9 +++++++-- .../param/InsuranceArchivesListParam.java | 1 + .../mapper/archive/SalaryArchiveMapper.xml | 20 +++++++++++++++++-- .../salaryacct/SalaryAcctEmployeeMapper.xml | 7 +++++-- .../service/impl/SIArchivesServiceImpl.java | 5 ++++- .../service/impl/SIImportServiceImpl.java | 5 ++++- .../engine/salary/web/SISchemeController.java | 6 ++++++ .../salary/web/SalaryAcctController.java | 4 ++++ .../salary/web/SalaryArchiveController.java | 4 ++++ 9 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index dac9c3f20..51da1aa57 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -928,6 +928,10 @@ public class SIArchivesBiz { request.setPositions(Arrays.stream(param.getPositionsStr().split(",")).map(BigDecimal::new).collect(Collectors.toList())); } + if (StringUtils.isNotBlank(param.getStatusesStr())) { + request.setStatuses(Arrays.stream(param.getStatusesStr().split(",")).map(String::new).collect(Collectors.toList())); + } + request.setNeedAuth(param.getNeedAuth()); request.setTaxAgentEmployeeIds(param.getTaxAgentEmployeeIds()); request.setTaxAgentIds(param.getTaxAgentIds()); @@ -937,7 +941,7 @@ public class SIArchivesBiz { long startNum = (current - 1) * pageSize; param.setStartNum(startNum); param.setPageSize(pageSize); - request.setStatuses(param.getStatuses()); +// request.setStatuses(param.getStatuses()); request.setKeyword(param.getUserName()); request.setSiSchemeId(param.getSiSchemeId()); @@ -1393,8 +1397,9 @@ public class SIArchivesBiz { conditionItems.add(departmentIds); - SearchConditionItem statuses = conditionFactory.createCondition(ConditionType.SELECT, 502327, "statuses"); + SearchConditionItem statuses = conditionFactory.createCondition(ConditionType.SELECT, 502327, "statusesStr"); statuses.setInputType("select"); + statuses.setMultiple(true); statuses.setOptions(userStatusOptions); statuses.setColSpan(2); statuses.setFieldcol(16); diff --git a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesListParam.java b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesListParam.java index ad05e9702..276fd82b3 100644 --- a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesListParam.java +++ b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesListParam.java @@ -38,6 +38,7 @@ public class InsuranceArchivesListParam extends BaseQueryParam { //状态(多线)") private List statuses; + private String statusesStr; //岗位(多选)") private List positions; diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index cc03c82f0..2ae1e016f 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -154,6 +154,12 @@ AND e.status = #{param.userstatus} + + AND e.status IN + + #{userstatus} + + AND (e.companystartdate BETWEEN #{param.hiredate[0]} AND #{param.hiredate[1]}) @@ -229,7 +235,12 @@ AND e.status = #{param.userstatus} - + + AND e.status IN + + #{userstatus} + + AND (e.companystartdate BETWEEN #{param.hiredate[0]} AND #{param.hiredate[1]}) @@ -305,7 +316,12 @@ AND e.status = #{param.userstatus} - + + AND e.status IN + + #{userstatus} + + AND (e.companystartdate BETWEEN #{param.hiredate[0]} AND #{param.hiredate[1]}) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index ea8fac029..c4a31854d 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -497,6 +497,7 @@ or (param.subcompanyIds != null and param.subcompanyIds.size()>0) or (param.departmentIds != null and param.departmentIds.size()>0) or (param.positionIds != null and param.positionIds.size()>0) + or (param.statuses != null and param.statuses.size()>0) or (param.status != null and param.status.toString != 'ALL')"> AND t.employee_id IN ( @@ -587,7 +588,8 @@ or (param.workcode != null and param.workcode != '') or (param.subcompanyIds != null and param.subcompanyIds.size()>0) or (param.departmentIds != null and param.departmentIds.size()>0) - or (param.positionIds != null and param.positionIds.size()>0) + or (param.positionIds != null and param.positionIds.size()>0) + or (param.statuses != null and param.statuses.size()>0) or (param.status != null and param.status.toString != 'ALL')"> AND t.employee_id IN ( @@ -676,7 +678,8 @@ or (param.workcode != null and param.workcode != '') or (param.subcompanyIds != null and param.subcompanyIds.size()>0) or (param.departmentIds != null and param.departmentIds.size()>0) - or (param.positionIds != null and param.positionIds.size()>0) + or (param.positionIds != null and param.positionIds.size()>0) + or (param.statuses != null and param.statuses.size()>0) or (param.status != null and param.status.toString != 'ALL')"> AND t.employee_id IN ( diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index fb00653d7..b2db613e3 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -488,7 +488,10 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService param.setDimissionDateEnd(param.getDimissionDate()[1]); } if (Objects.equals("fromQuickSearch", param.getDataSource())) { - request.setStatuses(param.getStatuses()); +// request.setStatuses(param.getStatuses()); + if (StringUtils.isNotBlank(param.getStatusesStr())) { + request.setStatuses(Arrays.stream(param.getStatusesStr().split(",")).map(String::new).collect(Collectors.toList())); + } request.setKeyword(param.getUserName()); } else { request = param; diff --git a/src/com/engine/salary/service/impl/SIImportServiceImpl.java b/src/com/engine/salary/service/impl/SIImportServiceImpl.java index ae235c3fc..ecd8f016a 100644 --- a/src/com/engine/salary/service/impl/SIImportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIImportServiceImpl.java @@ -31,6 +31,7 @@ import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.apache.ibatis.session.SqlSession; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.conn.mybatis.MyBatisFactory; @@ -103,7 +104,9 @@ public class SIImportServiceImpl extends Service implements SIImportService { param.setDimissionDateEnd(param.getDimissionDate()[1]); } if (Objects.equals("fromQuickSearch", param.getDataSource())) { - request.setStatuses(param.getStatuses()); + if (StringUtils.isNotBlank(param.getStatusesStr())) { + request.setStatuses(Arrays.stream(param.getStatusesStr().split(",")).map(String::new).collect(Collectors.toList())); + } request.setKeyword(param.getUserName()); request.setStartNum(param.getStartNum()); request.setPageSize(param.getPageSize()); diff --git a/src/com/engine/salary/web/SISchemeController.java b/src/com/engine/salary/web/SISchemeController.java index 4270508d1..9f16e9604 100644 --- a/src/com/engine/salary/web/SISchemeController.java +++ b/src/com/engine/salary/web/SISchemeController.java @@ -182,6 +182,12 @@ public class SISchemeController { if(StringUtils.isNotBlank(runStatuses)){ param.setRunStatuses( Arrays.stream(runStatuses.split(",")).map(String::valueOf).collect(Collectors.toList())); } + + String statusesStr = request.getParameter("statusesStr"); + if (StringUtils.isNotBlank(statusesStr)) { + param.setStatuses(Arrays.stream(statusesStr.split(",")).map(String::new).collect(Collectors.toList())); + } + User user = HrmUserVarify.getUser(request, response); XSSFWorkbook workbook = getService(user).export(param); String fileName ; diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index d66893e72..c5990e729 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -297,6 +297,10 @@ public class SalaryAcctController { if (StringUtils.isNotBlank(status)) { param.setStatus(SalaryEmployeeStatusEnum.parseByValue(Integer.parseInt(status))); } + String statuses = request.getParameter("statuses"); + if (StringUtils.isNotBlank(statuses)) { + param.setStatuses(Arrays.stream(statuses.split(",")).map(String::valueOf).collect(Collectors.toList())); + } //fixme 日期 request.getParameter("dismissDate"); String ids = request.getParameter("ids"); diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index 28e773578..af9aad165 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -458,6 +458,10 @@ public class SalaryArchiveController { if (StringUtils.isNotBlank(userstatus)) { param.setUserstatus(userstatus); } + String statuses = request.getParameter("statuses"); + if (StringUtils.isNotBlank(statuses)) { + param.setStatuses(Arrays.stream(statuses.split(",")).map(String::valueOf).collect(Collectors.toList())); + } String hiredate = request.getParameter("hiredate"); if (StringUtils.isNotBlank(hiredate)) { param.setHiredate(Arrays.asList(hiredate.split(","))); From e67530eb877786d9153032890294427221b700be Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 10 Jul 2023 17:20:04 +0800 Subject: [PATCH 239/245] =?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=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=8A=A0=E9=AB=98=E7=BA=A7=E6=90=9C=E7=B4=A2=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/web/SISchemeController.java | 76 +++++++++++++++---- 1 file changed, 60 insertions(+), 16 deletions(-) diff --git a/src/com/engine/salary/web/SISchemeController.java b/src/com/engine/salary/web/SISchemeController.java index 9f16e9604..842c8b0eb 100644 --- a/src/com/engine/salary/web/SISchemeController.java +++ b/src/com/engine/salary/web/SISchemeController.java @@ -21,6 +21,7 @@ import com.engine.salary.wrapper.SISchemeWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jetbrains.annotations.NotNull; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -32,6 +33,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; import java.net.URLEncoder; import java.time.LocalDate; import java.util.Arrays; @@ -172,22 +174,7 @@ public class SISchemeController { @Path("/export") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response export(@Context HttpServletRequest request, @Context HttpServletResponse response) { - InsuranceArchivesListParam param = new InsuranceArchivesListParam(); - String ids = request.getParameter("ids"); - if(StringUtils.isNotBlank(ids)){ - param.setIds( Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList())); - } - - String runStatuses = request.getParameter("runStatuses"); - if(StringUtils.isNotBlank(runStatuses)){ - param.setRunStatuses( Arrays.stream(runStatuses.split(",")).map(String::valueOf).collect(Collectors.toList())); - } - - String statusesStr = request.getParameter("statusesStr"); - if (StringUtils.isNotBlank(statusesStr)) { - param.setStatuses(Arrays.stream(statusesStr.split(",")).map(String::new).collect(Collectors.toList())); - } - + InsuranceArchivesListParam param = buildInsuranceArchivesListParam(request); User user = HrmUserVarify.getUser(request, response); XSSFWorkbook workbook = getService(user).export(param); String fileName ; @@ -304,6 +291,63 @@ public class SISchemeController { .header("Cache-Control", "no-cache").build(); } + @NotNull + private InsuranceArchivesListParam buildInsuranceArchivesListParam(HttpServletRequest request) { + InsuranceArchivesListParam param = new InsuranceArchivesListParam(); + + String ids = request.getParameter("ids"); + if(StringUtils.isNotBlank(ids)){ + param.setIds( Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } + + String runStatuses = request.getParameter("runStatuses"); + if(StringUtils.isNotBlank(runStatuses)){ + param.setRunStatuses( Arrays.stream(runStatuses.split(",")).map(String::valueOf).collect(Collectors.toList())); + } + + String statusesStr = request.getParameter("statusesStr"); + if (StringUtils.isNotBlank(statusesStr)) { + param.setStatuses(Arrays.stream(statusesStr.split(",")).map(String::new).collect(Collectors.toList())); + } + String userName = request.getParameter("username"); + if (StringUtils.isNotBlank(userName)) { + param.setUserName(userName); + } + String jobNum = request.getParameter("jobNum"); + if (StringUtils.isNotBlank(jobNum)) { + param.setJobNum(jobNum); + } + String taxAgentId = request.getParameter("taxAgentId"); + if (StringUtils.isNotBlank(taxAgentId)) { + param.setTaxAgentId(Long.parseLong(taxAgentId)); + } + String departmentIds = request.getParameter("departmentIdsStr"); + if (StringUtils.isNotBlank(departmentIds)) { + param.setDepartmentIds(Arrays.stream(departmentIds.split(",")).map(BigDecimal::new).collect(Collectors.toList())); + } + String subcompanyIds = request.getParameter("subcompanyIdsStr"); + if (StringUtils.isNotBlank(subcompanyIds)) { + param.setSubcompanyIds(Arrays.stream(subcompanyIds.split(",")).map(BigDecimal::new).collect(Collectors.toList())); + } + String positions = request.getParameter("positionsStr"); + if (StringUtils.isNotBlank(positions)) { + param.setPositions(Arrays.stream(positions.split(",")).map(BigDecimal::new).collect(Collectors.toList())); + } + String siSchemeId = request.getParameter("siSchemeId"); + if (StringUtils.isNotBlank(siSchemeId)) { + param.setSiSchemeId(Long.valueOf(siSchemeId)); + } + String fundSchemeId = request.getParameter("fundSchemeId"); + if (StringUtils.isNotBlank(fundSchemeId)) { + param.setFundSchemeId(Long.valueOf(fundSchemeId)); + } + String otherSchemeId = request.getParameter("otherSchemeId"); + if (StringUtils.isNotBlank(otherSchemeId)) { + param.setOtherSchemeId(Long.valueOf(otherSchemeId)); + } + return param; + } + } From 7d9ad3d79eb242cec33684d70aa014d8f2c0ef1b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 11 Jul 2023 10:14:28 +0800 Subject: [PATCH 240/245] =?UTF-8?q?=E4=B8=8D=E5=85=81=E8=AE=B8=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E8=96=AA=E8=B5=84=E6=A1=A3=E6=A1=88=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryArchiveServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index c92a45063..b6c786fc4 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -313,9 +313,9 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe throw new SalaryRunTimeException("薪资档案参数为空!"); } SalarySysConfPO canDelete = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_ARCHIVE_DELETE); -// if(Objects.isNull(canDelete) || StringUtils.equals(canDelete.getConfValue(),"0") ){ -// throw new SalaryRunTimeException("不允许删除薪资档案,请先开启删除档案规则配置!"); -// } + if(Objects.isNull(canDelete) || StringUtils.equals(canDelete.getConfValue(),"0") ){ + throw new SalaryRunTimeException("不允许删除薪资档案,请先开启删除档案规则配置!"); + } List salaryArchiveList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(salaryArchiveIds).build()); //查询当前登录人员管理的个税扣缴义务人 From 287fcae68e73cb8ec628522f89499b4b1c4d474c Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 11 Jul 2023 10:22:14 +0800 Subject: [PATCH 241/245] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=8F=91=E9=80=81sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202307100103.sql | 16 ++++++++++++++++ resource/sqlupgrade/JC/sql202307100103.sql | 16 ++++++++++++++++ resource/sqlupgrade/Mysql/sql202307100103.sql | 5 +++++ resource/sqlupgrade/Oracle/sql202307100103.sql | 15 +++++++++++++++ .../sqlupgrade/SQLServer/sql202307100103.sql | 6 ++++++ 5 files changed, 58 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202307100103.sql create mode 100644 resource/sqlupgrade/JC/sql202307100103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202307100103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202307100103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202307100103.sql diff --git a/resource/sqlupgrade/DM/sql202307100103.sql b/resource/sqlupgrade/DM/sql202307100103.sql new file mode 100644 index 000000000..ffdfcf84f --- /dev/null +++ b/resource/sqlupgrade/DM/sql202307100103.sql @@ -0,0 +1,16 @@ +alter table hrsa_salary_template + add auto_send_cycle_type NUMBER null; +/ + +alter table hrsa_salary_template + add auto_send_status NUMBER null; +/ + +alter table hrsa_salary_template + add auto_send_day_of_month varchar2(200) NULL; +/ + +alter table hrsa_salary_template + add auto_send_time_of_day varchar2(200) NULL; +/ + diff --git a/resource/sqlupgrade/JC/sql202307100103.sql b/resource/sqlupgrade/JC/sql202307100103.sql new file mode 100644 index 000000000..ffdfcf84f --- /dev/null +++ b/resource/sqlupgrade/JC/sql202307100103.sql @@ -0,0 +1,16 @@ +alter table hrsa_salary_template + add auto_send_cycle_type NUMBER null; +/ + +alter table hrsa_salary_template + add auto_send_status NUMBER null; +/ + +alter table hrsa_salary_template + add auto_send_day_of_month varchar2(200) NULL; +/ + +alter table hrsa_salary_template + add auto_send_time_of_day varchar2(200) NULL; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202307100103.sql b/resource/sqlupgrade/Mysql/sql202307100103.sql new file mode 100644 index 000000000..d283335e1 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202307100103.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_template +ADD COLUMN auto_send_status int NULL, +ADD COLUMN auto_send_cycle_type int NULL, +ADD COLUMN auto_send_day_of_month varchar(200) NULL, +ADD COLUMN auto_send_time_of_day varchar(50) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202307100103.sql b/resource/sqlupgrade/Oracle/sql202307100103.sql new file mode 100644 index 000000000..73836e82e --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202307100103.sql @@ -0,0 +1,15 @@ +alter table hrsa_salary_template + add auto_send_cycle_type NUMBER null +/ + +alter table hrsa_salary_template + add auto_send_status NUMBER null +/ + +alter table hrsa_salary_template + add auto_send_day_of_month varchar2(200) NULL +/ + +alter table hrsa_salary_template + add auto_send_time_of_day varchar2(200) NULL +/ \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202307100103.sql b/resource/sqlupgrade/SQLServer/sql202307100103.sql new file mode 100644 index 000000000..bd867842c --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202307100103.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_template +ADD auto_send_status int NULL, +auto_send_cycle_type int NULL, +auto_send_day_of_month varchar(200) NULL, +auto_send_time_of_day varchar(50) NULL +GO \ No newline at end of file From bb6cf386cb499ff67cfc27d0b033d608b960d956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Jul 2023 11:05:35 +0800 Subject: [PATCH 242/245] =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/biz/SysSalaryItemBiz.java | 10 +++++ .../salaryitem/SysSalaryItemMapper.java | 4 +- .../mapper/salaryitem/SysSalaryItemMapper.xml | 7 ++++ .../service/impl/SalaryItemServiceImpl.java | 38 +++++++++---------- 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/com/engine/salary/biz/SysSalaryItemBiz.java b/src/com/engine/salary/biz/SysSalaryItemBiz.java index 4ff63dac4..19ed10802 100644 --- a/src/com/engine/salary/biz/SysSalaryItemBiz.java +++ b/src/com/engine/salary/biz/SysSalaryItemBiz.java @@ -38,4 +38,14 @@ public class SysSalaryItemBiz { sqlSession.close(); } } + + public SysSalaryItemPO selectOneByName(String name) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SysSalaryItemMapper mapper = sqlSession.getMapper(SysSalaryItemMapper.class); + return mapper.selectOneByName(name); + } finally { + sqlSession.close(); + } + } } diff --git a/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.java b/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.java index f210fe344..baf9716cb 100644 --- a/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.java +++ b/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.java @@ -1,7 +1,6 @@ package com.engine.salary.mapper.salaryitem; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; -import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -62,5 +61,6 @@ public interface SysSalaryItemMapper { * @return 返回影响行数 */ int delete(SysSalaryItemPO SysSalaryItemPO); - + + SysSalaryItemPO selectOneByName(String name); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.xml index ed5027616..f8faf9c90 100644 --- a/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SysSalaryItemMapper.xml @@ -609,5 +609,12 @@ AND delete_type = 0 + + \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 248ab4b6b..3c78cef40 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -140,27 +140,27 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService .sorted(new Comparator() { @Override public int compare(SalaryItemPO o1, SalaryItemPO o2) { - if(o1 == null) + if (o1 == null) return 1; - if(o2 == null) + if (o2 == null) return -1; - if(o1 == null && o2 == null) + if (o1 == null && o2 == null) return 0; - if(o1.getSortedIndex() == null && o2.getSortedIndex() == null){ - Integer systemType1=o1.getSystemType(); - Integer systemType2=o2.getSystemType(); - if(systemType1 == null) - systemType1=0; - if(systemType2 == null) - systemType2=0; + if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) { + Integer systemType1 = o1.getSystemType(); + Integer systemType2 = o2.getSystemType(); + if (systemType1 == null) + systemType1 = 0; + if (systemType2 == null) + systemType2 = 0; return systemType1.compareTo(systemType2); - }else{ - Integer sortedIndex1=o1.getSortedIndex(); - Integer sortedIndex2=o2.getSortedIndex(); - if(sortedIndex1 == null) - sortedIndex1=0; - if(sortedIndex2 == null) - sortedIndex2=0; + } else { + Integer sortedIndex1 = o1.getSortedIndex(); + Integer sortedIndex2 = o2.getSortedIndex(); + if (sortedIndex1 == null) + sortedIndex1 = 0; + if (sortedIndex2 == null) + sortedIndex2 = 0; return sortedIndex2.compareTo(sortedIndex1); } } @@ -203,8 +203,8 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98326, "薪资项目名称已存在,请重新命名")); } // 名称不能和已有的系统薪资项目重名 - List sysSalaryItemPOS = sysSalaryItemBiz.listSome(SysSalaryItemPO.builder().name(saveParam.getName()).build()); - if (CollectionUtils.isNotEmpty(sysSalaryItemPOS)) { + SysSalaryItemPO sysSalaryItem = sysSalaryItemBiz.selectOneByName(saveParam.getName()); + if (sysSalaryItem != null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98328, "自定义薪资项目的名称不能和系统薪资项目的名称重名")); } SalaryItemPO salaryItemPO = SalaryItemBO.convert2SalaryItemPO(saveParam, (long) user.getUID()); From 83604ba5342d005b35755317a8b170b333bc83a4 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 11 Jul 2023 11:10:32 +0800 Subject: [PATCH 243/245] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E5=88=97=E8=A1=A8=E8=BF=94=E5=9B=9E=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6=E7=8A=B6=E6=80=81=E5=80=BC=E8=BF=94=E5=9B=9E=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/siaccount/bo/InsuranceAccountBO.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java index cc31abebf..8aa28ab09 100644 --- a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java +++ b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java @@ -54,8 +54,8 @@ public class InsuranceAccountBO { .id(e.getId()) .accountant(e.getAccountant()) .billMonth(e.getBillMonth()) - .billStatus(queryLabelId(e.getBillStatus()).getDefaultLabel()) -// .billStatus(e.getBillStatus().toString()) +// .billStatus(queryLabelId(e.getBillStatus()).getDefaultLabel()) + .billStatus(e.getBillStatus().toString()) .fundNum(e.getFundNum()) .fundPay(SalaryEntityUtil.thousandthConvert(e.getFundPay())) .lastTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(e.getUpdateTime())) From ad37ba9af02451f6240a0611cf78e9036d30586d Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 11 Jul 2023 11:30:57 +0800 Subject: [PATCH 244/245] =?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=A1=A3=E6=A1=88=EF=BC=8C=E9=AB=98=E7=BA=A7?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E4=B8=AD=E5=B7=A5=E5=8F=B7=E3=80=81=E5=88=86?= =?UTF-8?q?=E9=83=A8=E7=AD=9B=E9=80=89=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/web/SalaryArchiveController.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index af9aad165..a367bd940 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -442,6 +442,10 @@ public class SalaryArchiveController { if (StringUtils.isNotBlank(username)) { param.setUsername(username); } + String workcode = request.getParameter("workcode"); + if (StringUtils.isNotBlank(workcode)) { + param.setWorkcode(workcode); + } String taxAgentId = request.getParameter("taxAgentId"); if (StringUtils.isNotBlank(taxAgentId)) { param.setTaxAgentId(Long.valueOf(taxAgentId)); @@ -450,6 +454,10 @@ public class SalaryArchiveController { if (StringUtils.isNotBlank(departmentIds)) { param.setDepartmentIds(Arrays.stream(departmentIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); } + String subcompanyIds = request.getParameter("subcompanyIds"); + if (StringUtils.isNotBlank(subcompanyIds)) { + param.setSubcompanyIds(Arrays.stream(subcompanyIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } String positionIds = request.getParameter("positionIds"); if (StringUtils.isNotBlank(positionIds)) { param.setPositionIds(Arrays.stream(positionIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); From fa950fb4dd45d336ed80e303516ae2dfaaae03a1 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 11 Jul 2023 13:23:07 +0800 Subject: [PATCH 245/245] =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E6=AF=94=E8=BE=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryItemServiceImpl.java | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index c2c89f31b..99b2730ab 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -140,27 +140,13 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService .sorted(new Comparator() { @Override public int compare(SalaryItemPO o1, SalaryItemPO o2) { - if(o1 == null) - return 1; - if(o2 == null) - return -1; - if(o1 == null && o2 == null) - return 0; if(o1.getSortedIndex() == null && o2.getSortedIndex() == null){ - Integer systemType1=o1.getSystemType(); - Integer systemType2=o2.getSystemType(); - if(systemType1 == null) - systemType1=0; - if(systemType2 == null) - systemType2=0; + Integer systemType1=o1.getSystemType() == null ? 0 : o1.getSystemType(); + Integer systemType2=o2.getSystemType() == null ? 0 : o2.getSystemType(); return systemType1.compareTo(systemType2); }else{ - Integer sortedIndex1=o1.getSortedIndex(); - Integer sortedIndex2=o2.getSortedIndex(); - if(sortedIndex1 == null) - sortedIndex1=0; - if(sortedIndex2 == null) - sortedIndex2=0; + Integer sortedIndex1=o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); + Integer sortedIndex2=o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); return sortedIndex2.compareTo(sortedIndex1); } }